关于混淆矩阵中TN,FP,FN,TP的计算可以参考我之前的文章
链接: 机器学习模型评估的重要指标:精确率、召回率、F1Score.
ROC曲线反应了TPR和FPR之间的关系。
真正类率(True Postive Rate)TPR: TP/(TP+FN),代表分类器预测的正类中实际正实例占所有正实例的比例
负正类率(False Postive Rate)FPR: FP/(FP+TN),代表分类器预测的正类中实际负实例占所有负实例的比例。
我们来举个例子看如何计算TPR和FPR。
当我们阈值设置为0.9时,即认为socre要大于等于0.9才会判断为P时,对应的TPR = 1 / ( 1 + 9) = 10%,FPR = 0 / (0 + 10) = 0%
当我们阈值设置为0.5时,即认为socre要大于等于0.5才会判断为P时,对应的TPR = 6 / ( 4 + 6) = 60%,FPR = 4 / (4 + 6) = 40%
如果把每个socre都当做一个阈值来算出TPR和FPR,最后画出的图像如下图所示。
from sklearn import datasets
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression,LogisticRegression
from sklearn.model_selection import train_test_split
digits = datasets.load_digits()
X = digits.data
y = digits.target.copy()
y[digits.target == 9] = 1
y[digits.target != 9] = 0
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=666)
log_reg = LogisticRegression() #构建逻辑回归模型
log_reg.fit(X_train,y_train) #使用训练数据集训练模型
y_predict = log_reg.predict(X_test) #将测试数据传入训练好的模型中,让模型预测测试数据的结果
decision_scores = log_reg.decision_function(X_test)
sklearn中roc_curve输入样本真实值和对应模型输出的分数,可以直接返回fpr,tpr和对应的阈值。
from sklearn.metrics import roc_curve
fprs, tprs, thresholds = roc_curve(y_test,decision_scores)
plt.plot(fprs,tprs)
plt.xlabel("fpr")
plt.ylabel('tprs')
plt.show()
模型评价的关键指标——AUC。AUC表示ROC曲线下的面积,主要用于衡量模型的泛化性能,即分类效果的好坏。
一般在分类模型中,预测结果都是以概率的形式表现,如果要计算准确率,通常都会手动设置一个阈值来将对应的概率转化成类别,这个阈值也就很大程度上影响了模型准确率的计算。
AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。
由此可见,Auc作为数值可以直观的评价分类器的好坏,值越大越好。
AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。
0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。
AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。
使用roc_auc_score方法(area under curve),传入的和上面画roc曲线所传入的参数一致。
from sklearn.metrics import roc_auc_score
roc_auc_score(y_test,decision_scores)
关于PR曲线可以参考我上篇文章链接: 机器学习模型评估——精确率召回率和PR曲线.
在ROC空间,ROC曲线越凸向左上方向效果越好。与ROC曲线左上凸不同的是,PR曲线是右上凸效果越好。
ROC和PR曲线都被用于评估机器学习算法对一个给定数据集的分类性能,每个数据集都包含固定数目的正样本和负样本。而ROC曲线和PR曲线之间有着很深的关系。
当正负样本差距不大的情况下,ROC和PR的趋势是差不多的,但是当负样本很多的时候,两者就截然不同了,ROC效果依然看似很好,但是PR上反映效果一般。解释起来也简单,假设就1个正例,100个负例,TPR只能是100%或者0。
下面举个网上经常看到的图,(a)(b)分别为正负样本1:1时的ROC曲线和PR曲线,二者比较接近。而©(d)的正负样本比例为1:10,这时ROC曲线效果依然很好,但是PR曲线则表现的比较差。这就说明PR曲线在正负样本比例悬殊较大时更能反映分类的性能。
最红总结一下:
参考文献:
https://www.jianshu.com/p/2ca96fce7e81
链接: 关于ROC曲线的理解.
链接: ROC曲线学习总结.
链接: ROC和PR曲线.