数据挖掘:模型评估
一般在比赛中,我们会看到对于回归(分类)问题,不同的比赛会有不同的评价指标。我们在训练模型时,不能只记住回归问题用均方误差,而不去在意比赛目标的评价指标,这样我们往往会得到比较差的结果,南辕北辙。
一、为什么会有这么多衡量的指标
因为具体场景不同,比赛会有不同的偏向。比如,同一个问题,M1和M2分类的准确率不一样,这时,就需要看具体的要求,如果侧重M1多一些,那么在优化时,就应该对M1进行侧重优化。
常见的一些评价指标。
这里贴出网上写的比较好的模型评估的文章,由于本人的知识量有限,无法做出较好的总结,因此先参考别人的。等以后对这块更加熟悉后,再做补充。
机器学习模型的评价指标和方法
机器学习模型评价(Evaluating Machine Learning Models)-主要概念与陷阱
机器学习模型相关评价指标最全总结
模型评估常用指标
另外,本篇文章也是来自菜菜机器学习。
二、回归问题评估指标
回归类与分类型算法的模型评估其实是相似的法则——找真实标签和预测值的差异。回归类算法中,我们有两种不同的角度来看待回归的效果:
第一,我们是否预测到了正确的数值。
第二,我们是否拟合到了足够的信息。
这两种角度,分别对应着不同的模型评估指标。
否预测到了正确的数值:MSE和MAE
RSS残差平方和,是预测值与真实值之间的差异,也就是从第一种角度来评估我们回归的效力,所以RSS既是我们的损失函数,也是我们回归类模型的模型评估指标之一。但是,RSS有着致命的缺点:它是一个无界的和,可以无限地大,(样本越多,残查平方和越大)。
为了应对这种状况,sklearn中使用RSS的变体,均方误差MSE(mean squared error)来衡量我们的预测值和真实值的差异(这样就消除了由于样本因素而对模型评估的影响。),得到有了平均误差。就可以将其和标签的取值范围在一起比较,以此获得一个较为可靠的评估依据。(得到每一个样本上的平均误差,跟均值比较看相差有多少)在sklearn当中,我们有两种方式调用这个评估指标,
- 是使用sklearn专用的模型评估模块metrics里的类mean_squared_error,
- 是调用交叉验证的类cross_val_score并使用里面的scoring参数来设置使用均方误差。
1. 均方误差为负:
cross_val_score(reg,X,y,cv=10,scoring=“neg_mean_squared_error”)
因为均方误差本身是一种误差,损失。所以被sklearn划分为模型的一种损失(loss)。在sklearn当中,所有的损失都使用负数表示,因此均方误差也被显示为负数了。真正的均方误差MSE的数值,其实就是neg_mean_squared_error去掉负号的数字。
metrics里可以调出正的均方误差。
MAE:Mean absolute error,绝对均值误差
其表达的概念与均方误差完全一致,不过在真实标签和预测值之间的差异外我们使用的是L1范式(绝对值)。现实使用中,MSE和MAE选一个来使用就好了。(MAE比MSE对异常值更加不敏感,有较好的鲁棒性)
在sklearn当中,我们使用命令from sklearn.metrics import mean_absolute_error来调用MAE。
也可以使用交叉验证中的scoring = “neg_mean_absolute_error”,以此在交叉验证时调用MAE。
是否拟合了足够的信息
对于回归类算法而言,只探索数据预测是否准确是不足够的。除了数据本身的数值大小之外,我们还希望我们的模型能够捕捉到数据的”规律“,比如数据的分布规律,单调性等等,而是否捕获了这些信息并无法使用MSE来衡量。