西安网站建设行业动态,跑纸活做网站,沈阳网站设计制作公司,微机课做网站ROC曲线#xff08;Receiver Operating Characteristic#xff0c;受试者工作特征#xff09;评价分类模型的可视化工具#xff0c;是一条横纵坐标都限制在0-1范围内的曲线横坐标是假正率FPR#xff0c;错误地判断为正例的概率纵坐标是真正率TPR#xff0c;正确地判断为正…ROC曲线Receiver Operating Characteristic受试者工作特征评价分类模型的可视化工具是一条横纵坐标都限制在0-1范围内的曲线横坐标是假正率FPR错误地判断为正例的概率纵坐标是真正率TPR正确地判断为正例的概率也是召回率recall一个混淆矩阵就对应ROC曲线中的一个坐标点TPR和FPR的分母对于同一个测试集是固定不变的因为P和N分别表示测试集中正负样本的数目所以TPR和FPR仅与TP希望尽可能大和FP希望尽可能小相关故而在左边的ROC空间内曲线越靠近左上角效果越好故B好于A对角线相当于随机猜测ROC曲线越接近这条对角线模型的准确率越低曲线凸起程度越高模型性能越好一两组概念预测概率和阈值共同决定模型输出结果分类模型的输出结果中包含一个0-1的概率值该概率代表着对应的样本被预测为某类别的可能性再通过阈值来进行划分概率≥阈值的为正反之为负TPR和FPRROC曲线的横坐标为FPRFalse Positive Rate错误的预测为正的概率纵坐标为TPRTrue Positive Rate正确的预测为正的概率二ROC曲线绘制步骤将全部样本按概率递减排序阈值从1至0变更计算各阈值下对应的 (FPR, TPR) 数值对将数值对绘于直角坐标系中阈值为1时三ROC曲线解读可以将横轴理解为代价纵轴理解为收获例子某商家最近推出一款产品找出最有可能接受该产品的客户以推销该产品。根据历史数据训练出一个模型对应ROC曲线如下图假设某一个阈值对应坐标0.2, 0.8即在该阈值下模型的FPR0.2全部不会购买该产品的客户数量的20%TPR0.8全部会购买该产品的客户数量的80%假设该商家客户有1000人其中400人购买600人不购买则在该模型的该阈值下商家根据预测名单进行推销能够推销成功的有 400*0.8320人推销不成功的有 600*0.2120人四sklearn实现绘制ROC曲线主要基于sklearn库中的两个函数roc_curve和aucroc_curve函数roc_curve(y_true, y_score, pos_labelNone, sample_weightNone,drop_intermediateTrue)1输入值y_true 一个和样本数量一致的一维向量数据是正确的二元标签。如果标签不是{- 1,1}或{0,1}则可以显式指定pos_labely_score : 一个和样本数量一致的一维向量目标分数可以是阳性类的概率估计、置信度值或决策的非阈值度量(在某些分类器上由“decision_function”返回比如SVM)。简单的理解就是对测试集进行分类后得到的一个用于衡量该类是阳性还是阴性的分数度量分类器也是根据这个分数来判断测试集是阳性样本还是阴性样本因此通常都可以在分类器的中间过程拿到这个分数pos_label样本标签如果y_true不满足 {0,1}, {-1,1} 标签则需要通过该参数指定哪些是阳性样本其余的则为阴性样本默认不输入sample_weight一个和样本数量一致的一维向量指定每个样本的权重默认不输入drop_intermediate为true时(默认 True)会删除一些不会出现在ROC曲线上的次优阈值2返回值fpr: 假阳性率序列数量与thresholds一致的一维向量tpr: 真阳性率序列数量与thresholds一致的一维向量thresholds: 该序列是一个递减序列在每一个阈值下对y_score进行划分大于的视为阳性小于的视为阴性从而计算出该阈值下的fprauc函数auc(fpr, tpr) # 输出是一个float类型的数值代码from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as pltdef plot_roc(y_true, y_pred):# 计算ROC曲线和AUC值fpr, tpr, thresholds roc_curve(y_true, y_pred, pos_label1) # 假正例率FPR、真正例率TPR、阈值roc_auc auc(fpr, tpr)plt.clf() # 清除当前figure的所有axes但是不关闭这个window所以能继续复用于其他的plot# 绘制ROC曲线plt.plot(fpr, tpr, colordarkorange, labelROC curve (AUC %0.2f) % roc_auc) # label为图例里的文字plt.plot([0, 1], [0, 1], colornavy, linestyle--) # 直线plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.05])plt.xlabel(False Positive Rate)plt.ylabel(True Positive Rate)plt.title(Receiver Operating Characteristic (ROC) Curve)plt.legend(loclower right)plt.savefig(ROC_Curve.png,dpi300) # dpi是分辨率运行效果如下AUCArea under the Curve of ROC一二分类AUC表示ROC曲线下方面积是一个数值大小在0-1之间AUC越大则分类器越好AUC1完美分类器该模型至少存在一个阈值可以将正负样本完美划分开0.5 AUC 1优于随机猜测数值越大分类器越好AUC0.5相当于随机猜测模型没有预测价值AUC 0.5比随机猜测要差然而若反向预测该模型也可优于随机猜测二N分类宏观macro-AUC针对每一个类别都可以画一个ROC曲线求出对应的AUC值最后对所有AUC值求某种平均作为整个模型所有类别的宏观AUC微观micro-AUC根据下面的表来得到一个新的针对整个模型的ROC曲线以及对应的AUC值