scikit-learn 中常用的评估模型
Posted junge-mike
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scikit-learn 中常用的评估模型相关的知识,希望对你有一定的参考价值。
一,scikit-learn中常用的评估模型
1.评估分类模型:
2.评估回归模型:
二、常见模型评估解析:
?对于二分类问题,可将样例根据其真实类别和分类器预测类别划分为:(T,F表示预测的正确与错误性,P,N表示预测的正类和负类)
?真正例(TruePositive,TP):真实类别为正例,预测类别为正例。
?假正例(FalsePositive,FP):真实类别为负例,预测类别为正例。
?假负例(FalseNegative,FN):真实类别为正例,预测类别为负例。
?真负例(TrueNegative,TN):真实类别为负例,预测类别为负例。
?构建混淆矩阵(ConfusionMatrix):
?识别精确度(accuracy)
?Accuracy=(TP+FN)/(TP+TN+FP+FN)×100%
?准确率(precision):
?召回率(recall):
?
?F1值:精确度和召回率的调和平均值
?precision 和 recall 都是越高越好。精确度和召回率都高时,F1 值也会高. F1 值在1时达到最佳值(完美的精确度和召回率),最差为0.在二元分类中,F1 是测试准确度的量度。
classification_report 的主要参数:
真实值 | 预测值 |
0 | 0 |
1 | 2 |
2 | 0 |
2 | 2 |
1 | 1 |
0 | 0 |
先计算label 0:即reports的class0
计算precision准确率时,只看分类标签是 0 的预测值,如图有 3 个,再看其预测成功的个数 ,有2个,所以准确率为 0.67
计算recall召回率时:只看分类标签是0 的真实值,如图有2 个,再看其预测成功的个数, 有2 个,所以召回率为 1
结合p 和 r 计算 F1值
同理:计算label 1 和label 2
1).回归模型评估:
?1.均方根误差(RootMean Squared Error,RMSE)
RMSE是一个衡量回归模型误差率的常用公式。然而,它仅能比较误差是相同单位的模型
?由于对误差E 进行平方,加强了数值大的误差在指标中的作用,从而提高了指标的灵敏性。
?2.平均绝对误差(Mean Absolute Error,MAE)
?3.平均绝对百分误差(MeanAbsolute Percentage Error)
?一般认为MAPE小于10时,预测精度高。
?2)分类模型评估:
ROC-AUC曲线
?AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。
?AUC的物理意义
?假设分类器的输出是样本属于正类的score(置信度),则AUC的物理意义为,任取一对(正、负)样本,正样本的score大于负样本的score的概率。
1.ROC曲线:接受者操作特征(receiveroperating characteristic)曲线代表每个点反映着对同一个信号刺激的感受性。ROC曲线和AUC常被用来评价一个二值分类器(binaryclassifier)的优劣。
?横轴FPR越大,代表预测正类中实际负类越多
?纵轴TPR越大,代表预测正类中实际正类也越多
?因此,曲线越靠近(0,1)点,越往对角线45度左上角偏,分类效果越好。
如何绘制ROC 曲线
当我们将threshold设置为1和0时,分别可以得到ROC曲线上的(0,0)和(1,1)两个点。将这些(FPR,TPR)对连接起来,就得到了ROC曲线。当threshold取值越多,ROC曲线越平滑。
其实,我们并不一定要得到每个测试样本是正样本的概率值,只要得到这个分类器对该测试样本的“评分值”即可(评分值并不一定在(0,1)区间)。评分越高,表示分类器越肯定地认为这个测试样本是正样本,而且同时使用各个评分值作为threshold。将评分值转化为概率更易于理解一些。
2.AUC(Areaunder roc curve)在ROC曲线下的面积,度量分类模型的好坏。
?由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。
?
?首先AUC值是一个概率值,当你随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值。当然,AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类。
?判定AUC 曲线的优劣:
?.90-1= very good (A)
?.80-.90= good (B)
?.70-.80= not so good (C)
?.60-.70= poor (D)
?.50-.60= fail (F)
?3.精度-召回率曲线PRC(precisionrecall curve):与ROC曲线不同的是:PRC曲线是往右上角靠拢效果较好。
?适用场景:
1. 地震的预测
对于地震的预测,我们希望的是RECALL非常高,也就是说每次地震我们都希望预测出来。这个时候我们可以牺牲PRECISION。情愿发出1000次警报,把10次地震都预测正确了;也不要预测100次对了8次漏了两次。
2. 嫌疑人定罪
基于不错怪一个好人的原则,对于嫌疑人的定罪我们希望是非常准确的。及时有时候放过了一些罪犯(recall低),但也是值得的。
?4.如何避免过拟合:
?过拟合表现为在训练数据上的误差非常小,而在测试数据集上的误差反而增大。其中原因一般是模型过于复杂,过分去拟合数据的噪声和离群点,导致模型的泛化能力差,鲁棒性差。
?常见的解决办法:增大数据集,对模型进行正则化。
?5.交叉验证:
?K-Folds交叉验证:K层交叉验证是将原始数据随机分为K 个部分,在K 个部分中,选择1 个作为测试集,K-1 个作为训练集。将实验重复K 次,每次实验都从K 个部分选择1 个不同的作为测试集,最后对得到的K 个实验结果取平均。
参考:柚子皮blog
以上是关于scikit-learn 中常用的评估模型的主要内容,如果未能解决你的问题,请参考以下文章
[机器学习与scikit-learn-51]:模型评估-图解回归模型的评估指标MSEMAERMSER2RSS与代码示例
python机器学习——使用scikit-learn训练感知机模型
yellowbrick牛逼,机器学习“炼丹师”“调参侠”们有福了
[机器学习与scikit-learn-29]:算法-回归-普通线性回归LinearRegression拟合线性分布数据的代码示例