python机器学习—— 模型评估

模型评估

我们发现了仅仅使用默认配置的模型与不经处理的数据特征,在大多数任务下是无法得到最佳性能表现的,因此,在最终交由测试集进行性能评估之前,我们选择利用手头仅有的数据对模型进行调优。前面我们利用的测试集实际上不是严格意义上的测试集,实际上那叫验证集,测试集在监督学习的情况下是没有 y 的,或者说并不知道 y 。

分类问题

分类模型是数据挖掘中应用非常广泛的,常用的分类算法有 Logistic 模型、决策树、随机森林、神经网络、Boosting 等。针对同一个数据集,可以使用这么多的算法,那如何评估什么样的模型比较合理呢?本文就讲讲常用的模型验证武器,主要包括混淆矩阵和ROC 曲线。

混淆矩阵

对于分类问题,我们构建混淆矩阵,通过计算 Accuracy、Precisim、Recall、与 F1 measure 等四个指标,对模型进行评价。

在这里插入图片描述
注:TP(实际为正预测为正),FP(实际为负但预测为正),TN(实际为负预测为负),FN(实际为正但预测为负)

① 召回率( Recall ,TNR ):预测对的正例数占真正的正例数的比率:

在这里插入图片描述

② 准确率( Accuracy ):反映分类器统对整个样本的判定能力,能将正的判定为正,负的判定为负:

在这里插入图片描述
③ 精准率( Precision ):预测正确的正例数占预测为正例总量的比率:

在这里插入图片描述
④ F 值(F1-Score):是召回率和准确率的调和平均数,并假设两者一样重要:

在这里插入图片描述

模型的性能测评就是通过这四个指标,这些指标越接近1,表示模型效果越好。

⑤ 阴性预测值( NPV ):阴性预测值被预测准确的比例:

在这里插入图片描述
可以看到,recall 体现了分类模型对正样本的识别能力,recall 越高,说明模型对正样本的识别能力越强;precision 体现了模型的稳定性,precision 越高,说明模型的稳定性越好。F1-score 是两者的综合。F1-score 越高,说明分类模型越好。

比如我们常见的雷达预警系统,我们需要对雷达信号进行分析,判断这个信号是飞行器(正样本)还是噪声 (负样本), 很显然,我们希望系统既能准确的捕捉到飞行器信号,也可以有效地区分噪声信号。所以就要同时权衡 recall 和 precision 这两个指标,如果我们把所有信号都判断为飞行器,那 recall 可以达到 1 ,但是 precision 将会变得很低(假设两种信号的样本数接近),可能就在 0.5 左右,那 F1-score 也不会很高。

ROC 曲线

在讲解ROC曲线之前,我们先看看几个定义:

Sensitivity:正确预测到的正例数/实际正例总数
Specificity:正确预测到的负例数/实际负例总数

ROC 曲线就是根据这两个指标值绘制出来的,其中 x 轴为 1-Specificity ,y 轴为 Sensitivity 。通过比较 ROC 曲线与 45°直线可以直观的反映模型的好坏,但并不能从定量的角度反馈模型好是好到什么程度或模型差是差到什么程度。那么就引申出了 AUC 的概念,即 ROC 曲线下的面积。当曲线偏离 45°直线越远,则 AUC 越大,模型相应就会越好。一般认为 AUC 在 0.75 以上,模型就可以接受了。

受试者工作特征曲线 (receiver operating characteristic curve,简称ROC曲线),又称为感受性曲线(sensitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。接受者操作特性曲线就是以假阳性概率(False positive rate)为横轴,击中概率为纵轴所组成的坐标图,和被试在特定刺激条件下由于采用不同的判断标准得出的不同结果画出的曲线。

ROC 曲线是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线。传统的诊断试验评价方法有一个共同的特点,必须将试验结果分为两类,再进行统计分析。ROC 曲线的评价方法与传统的评价方法不同,无须此限制,而是根据实际情况,允许有中间状态,可以把试验结果划分为多个有序分类,如正常、大致正常、可疑、大致异常和异常五个等级再进行统计分析。因此,ROC 曲线评价方法适用的范围更为广泛。

下表是一个逻辑回归得到的结果。将得到的实数值按大到小划分成 10 个个数 相同的部分。
在这里插入图片描述
其正例数为此部分里实际的正类数。也就是说,将逻辑回归得到的结果按从大到小排列,倘若以前10% 的数值作为阈值,即将前 10% 的实例都划归为正类,6180 个。其中,正确的个数为 4879 个,占所有正类的 4879/14084100%=34.64% ,即敏感度;另外,有 6180-4879=1301 个负实例被错划为正类,占所有负类的1301 /47713100%=2.73% ,即 1-特异度 。以这两组值分别作为 y 值(敏感度)和 x 值(1-特异度),在 excel 中作散点图。得到 ROC 曲线如下

在这里插入图片描述

调试学习算法

若根据已有的训练集,我们已经将模型训练完毕。但是,当我们需要在新的数据集上进行预测时,发现预测的结果和实际有很大的误差。下面我们可以从下面的一些角度考虑:

(1)获取更多的数据量

注意:

① 有时数据量大并没有帮助。

② 通常数据量越大,学习模型训练得越好,但是即使这样,也应该做一些初步实验来确保数据量越大,训练越好。如果一开始就用大量的数据来训练模型,将会耗费大量的时间(收集数据,训练模型)。

(2)减少特征量

注意:

① 细心地从已有的特征量中选出一个子集。

② 可以手工选择,也可以用一些降维( dimensionality reduction )技术。

(3)增加额外的特征量

注意:

① 有时并不起作用。

② 仔细考虑数据集,是否遗漏了一些重要的特征量(可能花费较多的时间)。

③ 添加的特征量可能只是训练集的特征,不适合全体数据集,可能会过拟合

(4)添加多项式的特征量

(5)减少正则化参数

(6)增加正则化参数

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值