这里评估指标一般用于对经过训练集训练后的模型来使用的,以各项指标的评估得分来比较模型的性能。因为模型上线后,一般的未知样本的标签是较难得到的。
这里注意要与参数估计中的公式区分开,虽然有些参数估计的公式用到了诸如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(loghat{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| leqslantdelta \ 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曲线。
对于线性模型来说,可以设置一个阈值,当模型输出大于阈值时,判定为正例。然后不断提高模型阈值,每次阈值都会对应一个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
真正例率:真实正例被预测为正例的比例 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分类指标](
R-squared or coefficient of determination



