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

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
真实值0TNFP
真实值1FNTP

在这里插入图片描述

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

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

预测值0预测值1
真实值0997812
真实值128

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

2.3 精确率(precision)
from sklearn.metrics import precision_score

在这里插入图片描述

预测值0预测值1
真实值0997812
真实值128

根据混淆矩阵可求得精确率:$\ precision = \frac{11}{11+01}=\frac{TP}{TP+FP} $ ,即精准率为8/(8+12)=40%。所谓的精准率是:分母为所有预测为1的个数,分子是其中预测对了的个数,即预测值为1,且预测对了的比例。
在有偏的数据中,我们通常更关注值为1的特征,比如“患病”,比如“有风险”。在100次结果为患病的预测,平均有40次预测是对的。即精准率为我们关注的那个事件,预测的有多准。并且,当每一次将多数类判断错误的成本特别高时(例如大众召回车辆的例子),不希望有将多数类误判的情况,会追求高精确率。

2.4 召回率(recall)
from sklearn.metrics import recall_score

在这里插入图片描述

预测值0预测值1
真实值0997812
真实值128

根据混淆矩阵也可求得召回率:$\ recall = \frac{11}{11+10}= \frac{TP}{TP+FN} $,即召回率为8/(8+2)=80%。所谓召回率是:所有真实值为1的数据中,预测对了的个数。每当有100个癌症患者,算法可以成功的预测出80个 。召回率也就是我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少。而且,如果我们希望不计一切代价,找出少数类(比如找出潜在犯罪者的例子),那我们就会追求高召回率

2.5 F1-measure

为了同时兼顾精确度和召回率,我们创造了两者的调和平均数作为考量两者平衡的综合性指标,称之为F1-measure。我们追求尽量高的F1 measure,能够保证我们的精确度和召回率都比较高。F1 measure在[0,1]之间分布,越接近1越好。
在这里插入图片描述

2.6 假负率(FNR)

从Recall延申出来的另一个评估指标叫做假负率FNR(False Negative Rate)$\ FNR = \frac{10}{11+10} $,它等于 1 - Recall,用于衡量所有真实为1的样本中,被我们错误判断为0的。

2.7 特异度(Specificity)

在这里插入图片描述
特异度(Specificity)$Specificity= \frac{00}{01+00} $表示所有真实为0的样本中,被正确预测为0的样本所占的比例,特异度衡量了一个模型将多数类判断正确的能力

2.8 假正率(FPR)

在这里插入图片描述
假正率(False Positive Rate)$FPR= \frac{01}{01+00} $就是1 - specificity,为一个模型将多数类判断错误的能力。

2.9 ROC曲线
from sklearn.metrics import roc_curve

我们使用Recall和FPR之间的平衡,来替代Recall和Precision之间的平衡,让我们衡量模型在尽量捕捉少数类的时候,误伤多数类的情况如何变化,这就是我们的ROC曲线衡量的平衡。ROC曲线(Receiver Operation Characteristic Cureve),描述TPR(recall)和FPR之间的关系。x轴是FPR,y轴是TPR。
TPR就是所有正例(少数类)中,有多少被正确地判定为正(决策边界上方的所有红色点占全部样本中的红色点的比例);FPR是所有负例(多数类)中,有多少被错误地判定为正(决策边界上方的紫色点占所有紫色点的比例)。TPR越大越好,FPR越小越好,但这两个指标通常是矛盾的。为了增大TPR,可以预测更多的样本为正例,与此同时也增加了更多负例被误判为正例的情况。
在这里插入图片描述

2.10 AUC面积
from sklearn.metrics import roc_auc_score as AUC

一般在ROC曲线中,我们关注是曲线下面的面积, 称为AUC(Area Under Curve)。ROC和AUC的主要应用:比较两个模型哪个好?主要通过AUC能够直观看出来。

3. 评价回归结果

3.1 MSE
3.2 RMSE
3.3 MAE
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值