回归模型的评估指标和调用方法
这里评估指标一般用于对经过训练集训练后的模型来使用的,以各项指标的评估得分来比较模型的性能。因为模型上线后,一般的未知样本的标签是较难得到的。
这里注意要与参数估计中的公式区分开,虽然有些参数估计的公式用到了诸如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=1∑n∣fi−yi∣=n1i=1∑nei
以下是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=1∑n(observedi−predictedi)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 observedi−predictedi的单位是万,则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=1∑n(observedi−predictedi)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=1∑N(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^)=1−∑i=0nsamples−1(yi−yiˉ)2∑i=0nsamples−1(yi−yi^)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=0nsamples−1(yi−yi^)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=0nsamples−1(yi−yiˉ)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^−yi∣−21δ,其他loss(yi^,y)=N1i=1∑NHuber(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=1∑Nlog(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=样例总数+TP−TN2×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} macro−P=n1i=1∑nPimacro−R=n1i=1∑nRimacro−F1=macro−P+macro−R2×macro−P×macro−R
- 或者先计对混淆矩阵各元素进行平均,得到
T
P
‾
、
F
P
‾
、
T
N
‾
、
F
N
‾
\overline{TP}、\overline{FP}、\overline{TN}、\overline{FN}
TP、FP、TN、FN,再基于平均值计算出**“宏查准率”(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} macro−P=TP+FPTPmacro−R=TP+FNTPmacro−F1=macro−P+macro−R2×macro−P×macro−R
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=1∏nyi^yi∗(1−yi^)1−yi
负对数似然损失(Negative Log Likelihood loss)
交叉熵损失(Cross Entropy loss)
Logistic损失用于解决每个类别的二分类问题,为了方便数据集把最大似然转化为负对数似然,而得到负对数似然损失,交叉熵损失从两个类别扩展到M个类别,交叉熵损失在二分类时应当是负对数似然损失。
更多的分类指标请参照[sklearn分类指标](