ML02 -- 如何评价模型的好坏

要学习了解的概念知识:

  • 数据拆分:训练数据集&测试数据集
  • 评价分类结果:精准度、混淆矩阵、精准率、召回率、F1 Score、ROC曲线等
  • 评价回归结果:MSE、RMSE、MAE、R Squared

1.数据拆分

训练数据集&测试数据集

我们写好了一个算法模型,但是对其准确性以及能否到正式使用还不确定,这时候就要经过大量的调试,直到模型的准确度达到满意才可以投入生产。

对于判断模型好坏,需要将数据拆分为训练数据和测试数据,使用训练数据训练模型,再用测试数据判断模型好坏,然后再不断对模型进行修改。

对于训练数据集和测试数据集的拆分,一般情况下我们按照0.8:0.2的比例进行拆分的。
但是在拆分数据的时候不能简单的按顺序取数来拆分,比如前80%的数据作为训练数据,后20%的数据作测试数据,因为有的数据集本身就是有顺序的,应该先将数据集打乱再进行拆分。

sklearn中的train_test_split可直接调用进行数据拆分,通过测试数据直接判断模型的效果,在模型进入真实环境前改进模型。

分类准确度accuracy:评价分类算法的好坏,

accuracy_score:函数计算分类准确率,返回被正确分类的样本比例(default)或者是数量,正确率越高,分类器越好。

sklearn中可以直接调用封装好的方法,accuracy_score(y_test, y_predict)

超参数

所谓超参数,就是在机器学习算法模型执行之前需要指定的参数。如kNN算法中的k的取值。(调参调的就是超参数)

如何寻找最好的K值,逻辑非常简单,就是设定一个初始化的分数,然后循环更新k值,找到最好的score
对于多个超参数,及超参数之间的相互依赖,使用sklearn中封装好的网格搜索算法,可以帮助我们进行基础调参。

2.评价分类结果

分类算法的评价如果只使用分类精准度来衡量是不全面的。

比如对于是否发生地震的预测,因为发生的概率本身就很低,所以就算模型的准确率到达了99.9%,但那0.1%带来的损失是无法承受的。对于数据分布不均衡,极度偏斜(Skewed Data)的数据,只使用分类准确度是不能衡量。

混淆矩阵

混淆矩阵就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。

我们通过样本的采集,能够直接知道真实情况下,哪些数据结果是positive,哪些结果是negative。同时,我们通过用样本数据跑出分类型模型的结果,也可以知道模型认为这些数据哪些是positive,哪些是negative

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

混淆矩阵在基本的统计结果上又延伸了以下四个指标

ML02 -- 如何评价模型的好坏
精准率(查准率):预测值为1,且预测对了的比例,即:我们关注的那个事件,预测的有多准。
召回率(查全率):所有真实值为1的数据中,预测对了的个数,即:我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少。

有的时候,对于一个算法而言,精准率高一些,召回率低一些;或者召回率高一些,精准率低一些。对于如何取舍就要视场景来定了。
F1 Score 是精准率和召回率的调和平均值
F1=2precisionrecallprecision+recallF1=\frac {2*precision*recall}{precision+recall}

分类阈值、TPR和FPR

分类阈值并非我们通常认为的0.5,而应该视具体情况作出调整。
在sklearn中可以调用方法decision_function,返回分类阈值

TPR:预测为1,且预测对了的数量,占真实值为1的数据百分比。即是召回率.
TPR=recall=TPTP+FNTPR=recall=\frac{TP} {TP+FN}

FPR:预测为1,但预测错了的数量,占真实值不为1的数据百分比。FPR=FPTN+FPFPR=\frac{FP}{TN+FP}

ROC曲线(Receiver Operation Characteristic Cureve),描述TPR和FPR之间的关系。x轴是FPR,y轴是TPR。
ROC是一条线,如果我们选择用ROC曲线评判模型的准确性,那么越靠近左上角的ROC曲线,模型的准确度越高,模型越理想;

AUC是线下面积,如果我们选择用AUC面积评判模型的准确性,那么模型的AUC面积值越大,模型的准确度越高,模型越理想;AUC的取值在0与1之间。

3.线性回归算法的衡量标准

对于简单线性回归,实际上是找到训练数据集中 i=1m(y(i)axib)2\sum _{i=1}^{m}(y^{(i)} - ax^i -b)^2最小的a,b的值。

在得到a和b之后将 xtestx_{test}代入a、b中。可以使用 i=1m(ytest(i)y^test(i))2\sum _{i=1}^{m}(y_{test}^{(i)} -\hat{y}_{test}^{(i)})^2 来作为衡量回归算法好坏的标准。

均方误差MSE
ML02 -- 如何评价模型的好坏
均方根误差RMSE
RMSE=MSERMSE=\sqrt{MSE}
平均绝对误差MAE
ML02 -- 如何评价模型的好坏
衡量线性回归法最好的指标 R Squared
ML02 -- 如何评价模型的好坏
内容有点多,只是把基本的知识概念搞清楚了,后续再补代码实践

参考
https://mp.weixin.qq.com/s/BEmMdQd2y1hMu9wT8QYCPg
https://mp.weixin.qq.com/s/elI6-BX-AfKGuVjPPPE0rw
https://mp.weixin.qq.com/s/vvCM0vWH5kmRfrRWxqXT8Q
https://blog.csdn.net/Orange_Spotty_Cat/article/details/80520839