一文理解精确率Precision、召回率Recall以及ROC曲线 |
您所在的位置:网站首页 › python混淆矩阵画roc曲线 › 一文理解精确率Precision、召回率Recall以及ROC曲线 |
对于分类模型,常见的模型评价指标有精确率、召回率以及ROC曲线等,看名字不太好理解,下面来仔细分析。 混淆矩阵: 正样本(预测值)负样本(预测值)统计正样本(真实值)TP(True Positive)FN(False Negative)TP + FN(P)负样本(真实值)FP(False Positive)TN(True Negative)FP + TN(N)表中结果分为四类: 真正样 TP(True Positive):预测为正样本的正样本,预测正确体现在True,预测值体现在Positive。 假负样 FN(False Negative):预测为负样本的正样本,预测错误体现在False,预测值体现在Negative。 真负样 TN(True Negative):预测为负样本的负样本。 假负样 FP(False Negative):预测为正样本的负样本。 以此为基础可以得出下列指标: 真正率 TPR(True Positive Rate)又称灵敏度(Sensitivity):预测正确的正样本/正样本总数 假负率 FNR(False Negative Rate):预测错误的正样本/正样本总数 真负率TNR(True Negative Rate)又称特异度(Specificity):预测正确的负样本/负样本总数 假正率FPR(False Positive Rate):预测错误的负样本/负样本总数最后由混淆矩阵能得到下列指标: 准确率(Accuracy):分类正确的样本数/样本总数 错误率(Error):分类错误的样本数/样本总数
精确率Precision: 又称查准率,能够体现模型分类为正样本的数量中分类正确的比例,分母靠预测值决定。 正样本的预测数/被预测为正样本的数量(包含错误预测为正样本的负样本) 召回率Recall: 又称查全率,即上述的TPR。 分类正确的样本书/正样本的数量 那么按照西瓜书中的解释,精确率就是挑出的西瓜中有多少比例是好瓜,召回率就是所有好瓜中有多少比例被挑出来。 总结: 精确率和召回率是一对矛盾的度量,如果希望精确率提高,那么可以让模型阈值提高,减少FP数量,但是同样会降低TP数量因为要求更严格了,会导致召回率降低,因为有一些本可以预测为正样本的样本被阈值卡在了外面。故而精确率precision又称为查准率,突出的就是一个准字,召回率recall又称查全率,突出一个全字。 ROC曲线 ROC的全称是Receiver Operating Characteristic Curve,中文名字叫“受试者工作特征曲线” 首先是由二战中的电子工程师和雷达工程师发明的,用来侦测战场上的敌军载具(飞机、船舰),也就是信号检测理论。之后很快就被引入了心理学来进行信号的知觉检测。此后被引入机器学习领域,用来评判分类、检测结果的好坏。 从图中可以看出,ROC曲线的横坐标为FPR(假正率),纵坐标为TPR(真正率) 举个简单的例子: 有10张图片其中猫8张(Positive) 狗2张(Negative),通过模型产生了10个预测结果,其中预测为猫的有9张,狗1张。 那么TP=8 FN=0 TN=1 FP=1 即TPR=1 FPR=0.5 (0.5,1)就是ROC曲线上的一个点
如何通过ROC曲线判断模型好坏? 有了ROC曲线需要对模型有一个定量的分析,这里就需要引入AUC(Area under ROC Curve)面积,AUC指的就是ROC曲线下方的面积,计算AUC只需要沿着ROC的横轴做积分即可,真实场景下ROC曲线一般在y=x直线的上方,所以AUC的取值一般在0.5~1之间,AUC值越大说明模型的性能越好。 如何画ROC曲线? 当我们改变模型的阈值,预测结果中的TP FN TN FP都会相应的改变,即每一个阈值都会有一组(TPR, FPR)对应,ROC曲线就是不断的移动分类器的阈值来产生曲线上的关键点。 举个例子:(https://www.zhihu.com/question/22844912/answer/246037337) 图中是一个二分类模型的输出结果,一共20个样本,输出的概率就是模型判定为正样本的概率,第二列是真实label 如果我们指定阈值为0.9,那么只有第一个样本会被定为正样本,其他样本都定位负样本,可以算出TPR=0.1 FRP=0,所以(0,0.1)是ROC曲线上的一点,这样继续改变阈值(截断点)就可以得到更多的关键点,最后连接所有的关键点就能得到ROC曲线。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |