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,预测正确了。
混淆矩阵在基本的统计结果上又延伸了以下四个指标
精准率(查准率):预测值为1,且预测对了的比例,即:我们关注的那个事件,预测的有多准。
召回率(查全率):所有真实值为1的数据中,预测对了的个数,即:我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少。
有的时候,对于一个算法而言,精准率高一些,召回率低一些;或者召回率高一些,精准率低一些。对于如何取舍就要视场景来定了。
F1 Score 是精准率和召回率的调和平均值
分类阈值、TPR和FPR
分类阈值并非我们通常认为的0.5,而应该视具体情况作出调整。
在sklearn中可以调用方法decision_function,返回分类阈值
TPR:预测为1,且预测对了的数量,占真实值为1的数据百分比。即是召回率.
FPR:预测为1,但预测错了的数量,占真实值不为1的数据百分比。
ROC曲线(Receiver Operation Characteristic Cureve),描述TPR和FPR之间的关系。x轴是FPR,y轴是TPR。
ROC是一条线,如果我们选择用ROC曲线评判模型的准确性,那么越靠近左上角的ROC曲线,模型的准确度越高,模型越理想;
AUC是线下面积,如果我们选择用AUC面积评判模型的准确性,那么模型的AUC面积值越大,模型的准确度越高,模型越理想;AUC的取值在0与1之间。
3.线性回归算法的衡量标准
对于简单线性回归,实际上是找到训练数据集中 最小的a,b的值。
在得到a和b之后将 代入a、b中。可以使用 来作为衡量回归算法好坏的标准。
均方误差MSE
均方根误差RMSE
平均绝对误差MAE
衡量线性回归法最好的指标 R Squared
内容有点多,只是把基本的知识概念搞清楚了,后续再补代码实践
参考
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.****.net/Orange_Spotty_Cat/article/details/80520839