机器学习之-如何评价分类模型的好坏

1 数据拆分

机器学习中,通常将所有的数据划分为三份:训练数据集、验证数据集和测试数据集。

  • 训练数据集(train dataset):用来构建机器学习模型 。
  • 验证数据集(validation dataset):辅助构建模型,用于在构建过程中评估模型,为模型提供无偏估计,进而调整模型超参数 。
  • 测试数据集(test dataset):用来评估训练好的最终模型的性能。

在这里插入图片描述
为了划分这几种数据集,可以选择采用留出法、K-折交叉验证法或者自助法等多种方法。这些方法都对数据集有一些基本的假设

  • 数据集是随机抽取且独立同分布的
  • 分布是平稳的,不会随时间发生变化
  • 始终从同一个分布中抽取样本

2 分类算法的评价

分类准确度在评价分类算法时,会有很大的问题的。
对于一个癌症预测系统,输入检查指标,判断是否患有癌症,预测准确度99.9%。这个系统是好是坏呢?
如果癌症产生的概率是0.1%,那其实根本不需要任何机器学习算法,只要系统预测所有人都是健康的,即可达到99.9%的准确率。
也就是说对于极度偏斜(Skewed Data)的数据,只使用分类准确度是不能衡量。
这是就需要使用混淆矩阵(Confusion Matrix)做进一步分析。

2.1混淆矩阵

对于二分类问题来说,所有的问题被分为0和1两类,混淆矩阵是2*2的矩阵:

预测值0预测值1
真实值0TNFP
真实值1FNTP
  • TN:真实值是0,预测值也是0,即我们预测是negative,预测正确了
  • FP:真实值是0,预测值是1,即我们预测是positive,但是预测错误了
  • FN:真实值是1,预测值是0,即我们预测是negative,但预测错误了
  • TP:真实值是1,预测值是1,即我们预测是positive,预测正确了

混淆矩阵表达的信息比简单的分类准确度更全面,因此可以通过混淆矩阵得到一些有效的指标。

2.2 精准率和召回率

根据混淆矩阵可以求得指标:

预测值0预测值1
真实值09978(TN)12(FP)
真实值12(FN)8(TP)

精准率:precision = TP/(TP+FP),即精准率为8/(8+12)=40%。
所谓的精准率是:分母为所有预测为1的个数,分子是其中预测对了的个数,即预测值为1,且预测对了的比例。
召回率:recall = TP / (TP + FN) ,即精准率为8/(8+2)=80%。
所谓召回率是所有真实值为1的数据中,预测对了的个数。每当有100个癌症患者,算法可以成功的预测出8个 。也就是我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少

2.3 精准率和召回率更关注哪个

  • 精准率(查准率):预测值为1,且预测对了的比例,即:我们关注的那个事件,预测的有多准。
  • 召回率(查全率):所有真实值为1的数据中,预测对了的个数,即:我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少。
    其实在衡量机器学习的其他指标中,我们也需要进行取舍,通常只需要把握一个原则:视场景而定。

二者兼顾 F1 Score
F1 Score 是精准率和召回率的调和平均值。
F1 = (2* precision*recall) / (precision+recall)
什么是调和平均值?为什么要取调和平均值?调和平均值的特点是如果二者极度不平衡,如某一个值特别高、另一个值特别低时,得到的F1 Score值也特别低;只有二者都非常高,F1才会高。这样才符合我们对精准率和召回率的衡量标准。

3 ROC曲线

3.1 分类阈值、TPR和FPR

3.1.1 分类阈值

分类阈值,即设置判断样本为正例的阈值thr
在sklearn中有一个方法叫:decision_function返回分类阈值

decision_scores = log_reg.decision_function(X_test)
y_predict = np.array(decision_scores >= 5, dtype='int')

3.1.2 TPR

TPR:预测为1,且预测对了的数量,占真实值为1的数据百分比。很好理解,就是召回率。
TPR=recall = TP / (TP + FN)

3.1.3 FPR

FPR:预测为1,但预测错了的数量,占真实值不为1的数据百分比。与TPR相对应,FPR除以真实值为0的这一行所有的数字和 。
FPR=recall = FP / (TN+ FP)

3.2 什么是ROC曲线

ROC曲线(Receiver Operation Characteristic Cureve),描述TPR和FPR之间的关系。
x轴是FPR,y轴是TPR。
TPR就是所有正例中,有多少被正确地判定为正;
FPR是所有负例中,有多少被错误地判定为正。
分类阈值取不同值,TPR和FPR的计算结果也不同,最理想情况下,所有正例 & 负例 都被成功预测 TPR=1,FPR=0,即 所有的正例预测值 > 所有的负例预测值,此时阈值取最小正例预测值与最大负例预测值之间的值即可。
TPR越大越好,FPR越小越好,但这两个指标通常是矛盾的。为了增大TPR,可以预测更多的样本为正例,与此同时也增加了更多负例被误判为正例的情况。

3.2.1 ROC分析

ROC曲线距离左上角越近,证明分类器效果越好。如果一条算法1的ROC曲线完全包含算法2,则可以断定性能算法1>算法2。这很好理解,此时任做一条 横线(纵线),任意相同TPR(FPR) 时,算法1的FPR更低(TPR更高),故显然更优。

在这里插入图片描述
从上面ROC图中的几个标记点,我们可以做一些直观分析:

  • 左上角的点(TPR=1,FPR=0),为完美分类,也就是这个医生医术高明,诊断全对。
  • 点A(TPR>FPR),说明医生A的判断大体是正确的。
  • 中线上的点B(TPR=FPR),也就是医生B全都是蒙的,蒙对一半,蒙错一半;
  • 下半平面的点C(TPR<FPR),这个医生说你有病,那么你很可能没有病,医生C的话我们要反着听,为真庸医。

很多时候两个分类器的ROC曲线交叉,无法判断哪个分类器性能更好,这时可以计算曲线下的面积AUC,作为性能度量。

3.2.2 AUC

一般在ROC曲线中,我们关注是曲线下面的面积, 称为AUC(Area Under Curve)。这个AUC是横轴范围(0,1 ),纵轴是(0,1)所以总面积是小于1的。
ROC曲线下方由梯形组成,矩形可以看成特征的梯形。因此,AUC的面积可以这样算:(上底+下底)* 高 / 2,曲线下面的面积可以由多个梯形面积叠加得到。
AUC越大,分类器分类效果越好。

  • AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
  • 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
  • AUC = 0.5,跟随机猜测一样,模型没有预测价值。
  • AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

sklearn中求AUC值的方法

from sklearn.metrics import roc_auc_score
roc_auc_score(y_test, decision_scores)
# 输出:
# 0.9830452674897119

4 总结

  • 分类准确度在评价分类算法时,会有很大的问题,通过混淆矩阵得到一些有效的指标
  • 精准率(查准率):预测值为1,且预测对了的比例即:我们关注的那个事件,预测的有多准。
  • 召回率(查全率):所有真实值为1的数据中,预测对了的个数即:我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少。
  • F1 Score是精准率和召回率的调和平均值,可以平衡这两个指标。
  • ROC来反映分类器的性能,AUC是曲线下面积,用来直观比较模型的好坏。
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值