第二周:如何评价模型好坏

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-05 15:58:26

1. 数据拆分

数据拆分,即划分训练数据集&测试数据集
现在也多直接调用sklearn中的库

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=10)
"注意X_train, X_test, y_train, y_test顺序"

2. 评价分类结果

2.1 准确度(accuracy)

accuracy_score:函数计算分类准确率,返回被正确分类的样本比例(default)或者是数量(normalize=False)

from sklearn.metrics import accuracy_score

但是它在某些情况下并不一定是评估模型的最佳工具。比如一个经典例子—癌症预测系统,如果癌症的发病率只有百分之0.1,那么只要系统都预测成健康,那么准确就达到了99.9%,但是这样的系统基本上没有什么价值,因为我们关注的是比较少的那一部分样本,但是这一部分样本,并没有预测出来。
这是就需要使用混淆矩阵(Confusion Matrix)做进一步分析。

2.2 混淆矩阵(Confusion Matrix)

from sklearn.metrics import confusion_matrix

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

预测值0 预测值1
真实值0 TN FP
真实值1 FN TP
  • TN:真实值是0,预测值也是0,即我们预测是Negative,预测True
  • FP:真实值是0,预测值是1,即我们预测是Positive,但是预测False
  • FN:真实值是1,预测值是0,即我们预测是Negative,但预测False
  • TP:真实值是1,预测值是1,即我们预测是Positive,预测True

现在假设有1万人进行预测,填入混淆矩阵如下:

预测值0 预测值1
真实值0 9978 12
真实值1 2 8

对于1万个人中,有9978个人本身并没有癌症,我们的算法也判断他没有癌症;有12个人本身没有癌症,但是我们的算法却错误地预测他有癌症;有2个人确实有癌症,但我们算法预测他没有癌症;有8个人确实有癌症,而且我们也预测对了。

2.3 精确率(precision)

from sklearn.metrics import precision_score
预测值0 预测值1
真实值0 9978 12
真实值1 2 8

根据混淆矩阵可求得精确率:$\ precision = \frac{TP}{TP+FP} $ ,即精准率为8/(8+12)=40%。所谓的精准率是:分母为所有预测为1的个数,分子是其中预测对了的个数,即预测值为1,且预测对了的比例。
在有偏的数据中,我们通常更关注值为1的特征,比如“患病”,比如“有风险”。在100次结果为患病的预测,平均有40次预测是对的。即精准率为我们关注的那个事件,预测的有多准。

2.4 召回率(recall)

from sklearn.metrics import recall_score
预测值0 预测值1
真实值0 9978 12
真实值1 2 8

根据混淆矩阵也可求得召回率:$\ recall = \frac{TP}{TP+FN} $,即召回率为8/(8+2)=80%。所谓召回率是:所有真实值为1的数据中,预测对了的个数。每当有100个癌症患者,算法可以成功的预测出80个 。召回率也就是我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少

2.5 F1 Score

3. 评价回归结果

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!