博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bobo老师机器学习笔记第九课-PR曲线和ROC曲线
阅读量:4171 次
发布时间:2019-05-26

本文共 2264 字,大约阅读时间需要 7 分钟。

在文章中,我们已经概述了PR曲线。现在做个简单的回归

1、什么是PR曲线? 

PR曲线是精准率(Precision)和召回率(Recall)的缩写,

精准率表示在预测的关注事件中,其中预测正确的有多少。  Precision = TP / (TP + FP)

召回率表示在实际的关注事件中,正确预测出来了有多少。 Recall = TP / (FN + TP)

然后以recall为X轴, Precision为Y轴。

在曲线下降最厉害的点就是模型最好的点。 像上面图形在0.9左右。 

1、什么是ROC曲线? 

ROC曲线是Receiver Operating Characteristic的简称,主要用来描述模型的识别能力随着阈值变化的曲线。 

说到ROC要涉及两个概念: 误拒率TPR(True positive rate) 和误纳率FPR(false positive rate)

FPR表示正类样本中被判定为正类的比例

TPR表示负类样本中被判定为正类的比例

这两个存在正相关的关系。

绘制曲线(横轴FPR,纵坐标是TPR ):

一般在ROC曲线中,我们关注是曲线下面的面积, 这个成为AUC(Area Under Curve)。这个AUC是横轴范围(0,1 ),纵轴是(0,1)所以总面积是小于1的。

ROC和AUC的主要应用:比较两个模型哪个好? 主要通过AUC能够直观看出来。 

下面是在sklearn中如何绘制ROC

import numpy as npimport matplotlib.pyplot as pltfrom sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import train_test_splitfrom sklearn.datasets import load_digitsfrom sklearn.metrics import confusion_matrix, precision_score, recall_score, f1_score, roc_curve, roc_auc_score, precision_recall_curveX, target = load_digits(return_X_y=True)y = target.copy()y[target == 9] = 1y[target != 9] = 0X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)log_reg = LogisticRegression()log_reg.fit(X_train, y_train)y_predict = log_reg.predict(X_test)confusion = confusion_matrix(y_test, y_predict)score = log_reg.score(X_test, y_test)precision = precision_score(y_test, y_predict)recall = recall_score(y_test, y_predict)f1_scores = f1_score(y_test, y_predict)print 'confusion matrix:\n', confusionprint 'accuracy score:', scoreprint 'precision:', precisionprint 'recall:', recallprint 'f1_scores:', f1_scoresdecision_scores = log_reg.decision_function(X_test)y_predict_2 = np.array(decision_scores >= 5, dtype='int')confusion = confusion_matrix(y_test, y_predict_2)print 'confusion matrix (decision_scores >= 5):\n', confusionprecisions = []recalls = []precisions, recalls, thresholds = precision_recall_curve(y_test, decision_scores)#PR-Threshold# plt.plot(thresholds, precisions, label='Precision')# plt.plot(thresholds, recalls,  label='Recall')# plt.legend()# plt.show()# PR# plt.plot(precisions, recalls)# plt.show()fpr, tpr, thresholds = roc_curve(y_test, decision_scores)# ROC# plt.plot(fpr, tpr)# plt.show()roc_auc_score = roc_auc_score(y_test, decision_scores)print 'roc_auc_score:\n', roc_auc_score

 

参考文章:

转载地址:http://nekai.baihongyu.com/

你可能感兴趣的文章
关于sqlite的模糊查询
查看>>
Android安装步骤
查看>>
Android--图片像素信息的修改.(透明度,RGB)
查看>>
怎样获得当前mouse坐标处的颜色??[
查看>>
EditText的使用
查看>>
EditText 监听 Text 的 改动
查看>>
android之EditText文本监听(addTextChangedListener)
查看>>
JAVA 遍历HashMap及获取所有的Key值
查看>>
在JAVA中如何定义一个不定长的数组?
查看>>
android中ImageButton的使用
查看>>
AutoCompleteTextView获取其内容
查看>>
AutoCompleteTextView获取其内容
查看>>
AutoCompleteTextView获取值
查看>>
Android adb LOGCAT显示中文
查看>>
像素和灰度,色调之间的换算
查看>>
Linux指南
查看>>
linux文件夹常用命令
查看>>
Linux中如何对文件进行压缩与解压
查看>>
linux压缩文件总结(zz)
查看>>
Windows下的文件如何复制到虚拟机的Linux中
查看>>