ROC曲线(精确率,召回率,F1值)。混淆矩阵

ROC曲线的例子

考虑一个二分问题,即将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会出现四种情况。

如果一个实例是正类并且也被 预测成正类,即为真正类(True positive)。

如果实例是负类被预测成正类,称之为假正类(False positive)。

如果实例是负类被预测成负类,称之为真负类(True negative)。

正类被预测成负类则为假负类(false negative)。 

ROC曲线(精确率,召回率,F1值)。混淆矩阵_第1张图片

计算精确率(precision):

正类准确率:P=TP/(TP+FP)

负类准确率:P=TN/(FN+TN)

计算召回率(recall):

正类召回率:R=TP/(TP+FN)

负类召回率:R=TN/(FP+TN)

计算F1值(F1值是精确度和召回率的调和平均值):

1/F1=1/2*(1/P+1/R)

上面表达式化简得:F1 = (2*P*R)/(P+R);

混淆矩阵的例子:

官方文档地址:http://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics

ROC曲线(精确率,召回率,F1值)。混淆矩阵_第2张图片

通过混淆矩阵计算准确率(accuracy),召回率(recall),F1值 :

混淆矩阵    1代表正类,0代表负类
 

预测

实际

  1 0 合计
1 0(TP) 5301(FN) 5301
0 0(FP) 24699(TN) 24699
合计 0 30000 30000

依据上面的混淆矩阵计算可得:

正类1的精确率(precision):P=TP/(TP+FP)=0

正类1的召回率(recall):R=TP/(TP+FN)=0/(5301+0)=0

正类1的F1值:0

 

负类0的精确率(precision):P=TN/(FN+TN)=24699/(24699+5301)=0.82

负类0的召回率(recall):R=TN/(FP+TN)=24699/(24699+0)=1

负类0的F1值:2×P×R/(P+R)=2×0.82×1/(1+0.82)=0.90

运行程序可得上例同样的结果(如下图)

ROC曲线(精确率,召回率,F1值)。混淆矩阵_第3张图片

值得一提的是精确率(精度)与准确率不同:

准确率的计算是:(TP+TN)/(TP+FN+FP+TN)这个很好理解,就是被分对的样本数除以所有的样本数,通常来说,正确率越高,分类器越好。

 

简单解释一下精确率,召回率的意义:

当一个搜索引擎返回30个页面时,只有20页是相关的,而没有返回40个额外的相关页面,其精度为20/30 = 2/3,而其召回率为

20/60 = 1/3。在这种情况下,精确度是“搜索结果有多大用处”,而召回是“结果如何完整”

你可能感兴趣的:(机器学习基础知识)