机器学习模型评估指标和调用方法

回归模型的评估指标和调用方法

       这里评估指标一般用于对经过训练集训练后的模型来使用的,以各项指标的评估得分来比较模型的性能。因为模型上线后,一般的未知样本的标签是较难得到的。

       这里注意要与参数估计中的公式区分开,虽然有些参数估计的公式用到了诸如MSE的方法,但只是方法相同,用处却不一样。

       回归模型的评估指标有平均绝对值误差均方误差均方根误差R平方值Huber损失Log-Cosh损失函数

平均绝对值误差

也称L1损失(MAE)是预测值与真实值之差的绝对值,计算公式如下:
M A E = 1 n ∑ i = 1 n ∣ f i − y i ∣ = 1 n ∑ i = 1 n e i MAE = \frac{1}{n}\sum_{i=1}^n{|f_i-y_i|}=\frac{1}{n}\sum_{i=1}^n{e_i} MAE=n1i=1nfiyi=n1i=1nei

以下是sklearn中调用MAE的示例代码:

from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_test,y_pred)
均方误差

也称L2损失(MSE)是指的参数估计值与参数真实值之差平方的期望值。MSE是衡量平均误差的一种较方便的方法,可以用来评价数据的变化程度。MSE的值越小,说明预测模型描述实验数据具有越好的精确度,计算公式如下:
M S E = 1 n ∑ i = 1 n ( o b s e r v e d i − p r e d i c t e d i ) 2 MSE = \frac{1}{n}\sum_{i=1}^n{(observed_i-predicted_i)^2} MSE=n1i=1n(observedipredictedi)2

以下是sklearn中调用MAE的示例代码:

from sklearn.metrics import mean_squared_error
mean_squared_error(y_test,y_pred)

但存在一些问题,假设误差 o b s e r v e d i − p r e d i c t e d i observed_i-predicted_i observedipredictedi的单位是万,则MSE的单位就万的平方。会带来量纲上的影响。因此采用下面的均方根误差。

均方根误差(RMSE)是MSE的平方根,计算公式如下:

R M S E = M S E = S S E n = 1 n ∑ i = 1 n ( o b s e r v e d i − p r e d i c t e d i ) 2 RMSE =\sqrt{MSE}=\sqrt{\frac{SSE}{n}}= \frac{1}{n}\sum_{i=1}^n{(observed_i-predicted_i)^2} RMSE=MSE =nSSE =n1i=1n(observedipredictedi)2

       以下是sklearn中调用RMSE的示例代码:

from sklearn.metrics import mean_squared_error
Pred_Error = mean_squared_error(y_test,y_pred)
Sqrt(Pred_Error)

上述的三个评价指标均方误差、

均方对数差损失(Mean Squared Log Error,MSLE)

l o s s ( y i ^ , y ) = 1 N ∑ i = 1 N ( l o g y i ^ − l o g y i ) 2 loss(\hat{y_i},y) = \frac{1}{N}\sum_{i=1}^N(log\hat{y_i}-logy_i)^2 loss(yi^,y)=N1i=1N(logyi^logyi)2

R平方值(R-Squared)

反映了回归模型在多大程度上解释了因变量的变化,或者说模型对观测值的拟合程度如何。计算公式如下:
R 2 ( y , y ^ ) = 1 − ∑ i = 0 n s a m p l e s − 1 ( y i − y i ^ ) 2 ∑ i = 0 n s a m p l e s − 1 ( y i − y i ˉ ) 2 R^2(y,\hat{y})=1-\frac{\sum_{i=0}^{n_{samples}-1}(y_i-\hat{y_i})^2}{\sum_{i=0}^{n_{samples}-1}(y_i-\bar{y_i})^2} R2(y,y^)=1i=0nsamples1(yiyiˉ)2i=0nsamples1(yiyi^)2

式中分子 ∑ i = 0 n s a m p l e s − 1 ( y i − y i ^ ) 2 \sum_{i=0}^{n_{samples}-1}(y_i-\hat{y_i})^2 i=0nsamples1(yiyi^)2表示模型预测产生的错误。分母 ∑ i = 0 n s a m p l e s − 1 ( y i − y i ˉ ) 2 \sum_{i=0}^{n_{samples}-1}(y_i-\bar{y_i})^2 i=0nsamples1(yiyiˉ)2就是将 y i ^ \hat{y_i} yi^替换为 y i ˉ \bar{y_i} yiˉ。表示使用模型 y = y ˉ y=\bar{y} y=yˉ预测产生的错误。可以将模型 y = y ˉ y=\bar{y} y=yˉ称为Baseline Model称为最基本的模型(类似于瞎猜吧,用均值做预测值,和样本特征无关)

R平方值是评价回归算法性能较好的评价方式。

以下是sklearn中调用R平方值的示例代码:

from sklearn.metrics import r2_score
r2_score(y_test,y_pred)
Adjusted R-Square(校正决定系数)
Huber损失(Huber loss)

H u b e r ( y i ^ , y i ) = { 1 2 ( y i ^ − y i ) 2 , ∣ y i ^ − y i ∣ ⩽ δ δ ∣ y i ^ − y i ∣ − 1 2 δ , 其 他 l o s s ( y i ^ , y ) = 1 N ∑ i = 1 N H u b e r ( y i ^ − y i ) Huber(\hat{y_i},y_i) = \begin{cases} \frac{1}{2}(\hat{y_i}-y_i)^2, |\hat{y_i}-y_i| \leqslant\delta \\ \delta |\hat{y_i}-y_i|-\frac{1}{2}\delta,其他 \end{cases} \\ loss(\hat{y_i},y)=\frac{1}{N}\sum_{i=1}^N{Huber(\hat{y_i}-y_i)} Huber(yi^,yi)={21(yi^yi)2,yi^yiδδyi^yi21δ,loss(yi^,y)=N1i=1NHuber(yi^yi)

Log-Cosh损失函数(Log-Cosh loss)

l o s s ( y i ^ , y ) = 1 N ∑ i = 1 N l o g ( c o s h ( y i ^ − y ) ) loss(\hat{y_i},y) = \frac{1}{N}\sum_{i=1}^N{log(cosh(\hat{y_i}-y))} loss(yi^,y)=N1i=1Nlog(cosh(yi^y))

       L2损失是使用最广泛的损失,在优化过程中更为稳定和准确,但是对于局外点敏感。L1损失会比较有效地惩罚局外点,但它的导数不连续使得寻找最优解的过程低效。Huber损失由L2损失与L1损失合成,当 δ \delta δ趋于0时退化成了L1损失,当 δ \delta δ趋于无穷时则退化为L2损失。 δ \delta δ决定了模型处理局外点的行为,当残差大于 δ \delta δ时使用L1损失,很小时则使用更为合适的L2损失来进行优化。Huber损失函数克服了L1损失和L2损失的缺点,不仅可以保持损失函数具有连续的导数,同时可以利用L2损失梯度随误差减小的特性来得到更精确的最小值,也对局外点具有更好的鲁棒性。但Huber损失函数的良好表现得益于精心训练的超参数 δ \delta δ。Log-Cosh损失拥有Huber损失的所有优点,并且在每一个点都是二次可导的,这在很多机器学习模型中是十分必要的。

更多的回归指标请参照sklearn回归指标

分类模型的评估指标和调用方法

错误率与精度:

错误率表示分类错误的样本数占样本总数的比例,精度表示分类正确的样本数占样本总数的比例。

查准率、查全率

​ 查准率(precision)、查全率(recall,召回率)与F1:在推荐系统、信息检索、Web搜索中需求较大。

对于二分类问题,可以通过样本预测类别和真实类别组合为下列的分类结构混淆矩阵(confusion matrix)

在这里插入图片描述

其中查准率 P P P与查全率 R R R分别定义为:
P = T P T P + F P R = T P T P + F N P = \frac{TP}{TP+FP} \\ R = \frac{TP}{TP+FN} P=TP+FPTPR=TP+FNTP
查准率 P P P与查全率 R R R为一对矛盾的度量,一般情况下,查准率较高时,查全率较低。我们可以将查准率理解为“不可冤枉一个好人”,查全率理解为“宁可错杀一千,不可放过一人”

P-R曲线

在很多情况下,可以根据分类器的预测结果对样本进行排序,排在最前面的是学习器认为“最可能”是正例的样本,排在最后的则是认为“最不可能”的样本。按此顺序逐个对样本作为正例进行预测,则每次可以计算出当前的查准率、查全率。进而得到下面的P-R曲线

对于线性模型来说,可以设置一个阈值,当模型输出大于阈值时,判定为正例。然后不断提高模型阈值,每次阈值都会对应一个Precision和Recall。这样就可以画出P-R曲线

在这里插入图片描述

当需要对比两个学习器的性能时

  • 若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者

  • 当曲线发生交叉

    • 比较曲线下面积大小—但不太容易计算

    • 比较平衡点(Break-Even Point,BEP):当查准率=查全率的取值,但过于简化

    • 常用的F1度量
      F 1 = 2 × P × R P + R = 2 × T P 样 例 总 数 + T P − T N F1 = \frac{2 \times P \times R}{P+R} = \frac{2 \times TP}{样例总数+TP-TN} F1=P+R2×P×R=+TPTN2×TP

当P=R时,F1达到最大值。最大值为1,最小值为0.

例如,在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容确实是用户感兴趣的,此时查准率更重要;在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率更重要。

F 1 F1 F1的一般形式—— F β F_\beta Fβ
F β = ( 1 + β 2 ) × P × R ( β 2 × P ) + R 其 中 β > 0 度 量 了 查 全 率 对 查 准 率 的 相 对 重 要 性 。 β = 1 时 退 化 为 标 准 的 F 1 ; β > 1 时 , 查 全 率 影 响 更 大 ; β < 1 时 , 查 准 率 影 响 更 大 F_\beta = \frac{(1+\beta^2)\times P \times R}{(\beta^2 \times P)+R} \\ 其中\beta >0 度量了查全率对查准率的相对重要性。\beta=1时退化为标准的F1; \\ \beta>1时,查全率影响更大;\beta<1时,查准率影响更大 Fβ=(β2×P)+R(1+β2)×P×Rβ>0β=1退F1;β>1β<1
以下情形中,进行多次训练/测试,每次得到一个混淆矩阵;或是在多个数据集上进行训练/测试,希望估计算法的“全局”性能;或是执行多分类任务。我们得到多个二分类混淆矩阵,希望可以综合考察查准率和查全率。

  • 现在各混淆矩阵上分别计算出查准率和查全率,记为 ( P 1 , R 1 ) , ( P 2 , R 2 ) , . . . , ( P n , R n ) (P_1,R_1),(P_2,R_2),...,(P_n,R_n) (P1,R1),(P2,R2),...,(Pn,Rn),再计算平均值,这样就得到**“宏查准率”(macro-P)“宏查全率”(macro-R),以及“宏F1”(macro-F1)**。

m a c r o − P = 1 n ∑ i = 1 n P i m a c r o − R = 1 n ∑ i = 1 n R i m a c r o − F 1 = 2 × m a c r o − P × m a c r o − R m a c r o − P + m a c r o − R macro-P = \frac{1}{n}\sum_{i=1}^n P_i \\ macro-R = \frac{1}{n}\sum_{i=1}^n R_i \\ macro-F_1 = \frac{2 \times macro-P \times macro-R}{macro-P + macro-R} macroP=n1i=1nPimacroR=n1i=1nRimacroF1=macroP+macroR2×macroP×macroR

  • 或者先计对混淆矩阵各元素进行平均,得到 T P ‾ 、 F P ‾ 、 T N ‾ 、 F N ‾ \overline{TP}、\overline{FP}、\overline{TN}、\overline{FN} TPFPTNFN,再基于平均值计算出**“宏查准率”(macro-P)“宏查全率”(macro-R),以及“宏F1”(macro-F1)**。
    m a c r o − P = T P ‾ T P ‾ + F P ‾ m a c r o − R = T P ‾ T P ‾ + F N ‾ m a c r o − F 1 = 2 × m a c r o − P × m a c r o − R m a c r o − P + m a c r o − R macro-P = \frac{\overline{TP}}{\overline{TP}+\overline{FP}} \\ macro-R = \frac{\overline{TP}}{\overline{TP}+\overline{FN}} \\ macro-F_1 = \frac{2 \times macro-P \times macro-R}{macro-P + macro-R} macroP=TP+FPTPmacroR=TP+FNTPmacroF1=macroP+macroR2×macroP×macroR
ROC与AUC

真正例率:真实正例被预测为正例的比例 T P R = T P T P + F N TPR = \frac{TP}{TP+FN} TPR=TP+FNTP

假正例率:真实反例被预测为正例的比例 F P R = F P F P + T N FPR = \frac{FP}{FP+TN} FPR=FP+TNFP

sklearn调用方式:

Logistic损失(Logistic loss)

l o s s ( y ^ , y ) = ∏ i = 1 n y i ^ y i ∗ ( 1 − y i ^ ) 1 − y i loss(\hat{y},y) = \prod_{i=1}^n{\hat{y_i}^{y_i} * (1-\hat{y_i})^{1-y_i}} loss(y^,y)=i=1nyi^yi(1yi^)1yi

负对数似然损失(Negative Log Likelihood loss)
交叉熵损失(Cross Entropy loss)

       Logistic损失用于解决每个类别的二分类问题,为了方便数据集把最大似然转化为负对数似然,而得到负对数似然损失,交叉熵损失从两个类别扩展到M个类别,交叉熵损失在二分类时应当是负对数似然损失。
更多的分类指标请参照[sklearn分类指标](

参考资料

R-squared or coefficient of determination

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值