【史上最全】一文搞定机器学习的模型评估

机器学习的模型评估 类别评估方法简介分类模型准确率(Accuracy)预测正确的样本数占总样本数的比例精确率(Precision)预测为正例的样本中实际为正例的比例召回率(Recall)实际为正例的样本中被预测为正例的比例F1-Score精确率和召回率的调和平均数ROC曲线和AUC值用于衡量二分类模型的性能,AUC值越接近1,分类器性能越好PR曲线和AP值用于衡量二分类模型的性能,AP值越接近1,分类器性能越好混淆矩阵(Confusion Matrix)用于展示分类器分类结果的统计表格。 阅读详情

0. 数学约定

模型的“好坏”是相对的,取决于算法和数据,也取决于任务需求。
衡量模型的“好坏”的过程叫模型评估,也叫性能度量(performance measure)。

本篇数学约定如下:

  • x i \boldsymbol {x}_i xi​为样本向量
  • f f f为模型
  • f ( x ) f(\boldsymbol {x}) f(x)为模型预测结果
  • y i y_i yi​为样本 x i \boldsymbol {x}_i xi​对应的真实结果。
  • E ( y i ) E(y_i) E(yi​)表示结果集 { y i } \{y_i\} {yi​}的期望, E ( y i ) = y ˉ = 1 n ∑ i = 1 n y i E(y_i)=\bar y =\frac{1}{n} \sum_{i=1}^{n}y_i E(yi​)=yˉ​=n1​∑i=1n​yi​。
  • V a r ( y ) Var(y) Var(y)表示y的方差。 V a r ( y ) = E ( ( y i − y ˉ ) 2 ) Var(y)=E((y_i-\bar y)^2 ) Var(y)=E((yi​−yˉ​)2)

1. 回归型任务

简要总结如下:

评估法函数数学公式说明
MSEmean_squared_error M S E = 1 n ∑ i = 1 n ( f ( x i ) − y i ) 2 , n 为样本量 MSE=\frac{1}{n}\sum_{i=1}^{n}(f(\boldsymbol x_i)-y_i)^2,n为样本量 MSE=n1​i=1∑n​(f(xi​)−yi​)2,n为样本量MSE即预测误差的数学期望,是最常用的一个性能度量方法。
R 2 {R^2} R2r2_score R 2 = 1 − ∑ i = 1 n ( f ( x i ) − y i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2=1-\frac{\sum_{i=1}^{n}(f(\boldsymbol x_i)-y_i)^2}{\sum_{i=1}^{n}(y_i-\bar y)^2} R2=1−∑i=1n​(yi​−yˉ​)2∑i=1n​(f(xi​)−yi​)2​【维基百科:】在统计学中用于度量应变数的变异中可由自变量解释部分所占的比例,以此来判断回归模型的解释力。
MAEmean_absolute_error M S E = 1 n ∑ i = 1 n ∣ f ( x i ) − y i ∣ MSE=\frac{1}{n}\sum_{i=1}^{n}|f(\boldsymbol x_i)-y_i| MSE=n1​i=1∑n​∣f(xi​)−yi​∣
MSLEmean_squared_log_error M S L E = 1 n ∑ i = 1 n ( l o g e ( 1 + f ( x i ) ) − l o g e ( 1 + y i ) ) 2 MSLE=\frac{1}{n}\sum_{i=1}^{n}(log_e(1+f(\boldsymbol x_i))-log_e(1+y_i))^2 MSLE=n1​i=1∑n​(loge​(1+f(xi​))−loge​(1+yi​))2该指标最适合用于具有指数增长的目标,例如人口数量、商品在几年内的平均销售额等。请注意,该指标对低估的估计值比高估的估计值的惩罚更大。
MAPEmean_absolute_percentage_error M A P E = 1 n ∑ i = 1 n ∣ f ( x i ) − y i ∣ max ⁡ ( ϵ , ∣ y i ∣ ) MAPE=\frac{1}{n}\sum_{i=1}^{n}\frac{|f(\boldsymbol x_i)-y_i|}{\max(\epsilon,|y_i|)} MAPE=n1​i=1∑n​max(ϵ,∣yi​∣)∣f(xi​)−yi​∣​MSLE会忽略小幅度值,只反映最高幅度值的预测误差。但是这个问题在 MAPE 的情况下得到了解决,因为它计算了相对于实际输出的相对百分比误差。
MedAEmedian_absolute_error M e d A E = m e d i a n ( ∣ f ( x 1 ) − y 1 ∣ , ∣ f ( x 2 ) − y 2 ∣ , ⋯   , ∣ f ( x n ) − y n ∣ ) MedAE=median(|f(\boldsymbol x_1)-y_1|,|f(\boldsymbol x_2)-y_2|,\cdots,|f(\boldsymbol x_n)-y_n|) MedAE=median(∣f(x1​)−y1​∣,∣f(x2​)−y2​∣,⋯,∣f(xn​)−yn​∣)MedAE它对异常值具有鲁棒性。损失是通过取目标和预测之间的所有绝对差的中值来计算的。
MaxErrormax_error M a x E r r o r = max ⁡ ( ∣ f ( x i ) − y i ∣ ) Max Error=\max(|f(\boldsymbol x_i)-y_i|) MaxError=max(∣f(xi​)−yi​∣)
EVSexplained_variance_score E V S = 1 − V a r ( y i − f ( x i ) ) V a r ( y i ) EVS =1-\frac{Var(y_i-f(\boldsymbol x_i))}{Var(y_i)} EVS=1−Var(yi​)Var(yi​−f(xi​))​ E V S EVS EVS和 R 2 {R^2} R2得分之间的差异: R 2 {R^2} R2是当 E V S EVS EVS不考虑预测中的系统偏移时的情况。出于这个原因, R 2 {R^2} R2通常应该是首选。
MTDEmean_tweedie_deviance M T D E = 1 n ∑ i = − 1 n { ( f ( x i ) − y ) 2 , p = 0 2 ( y i l o g ( y i f ( x i ) ) + f ( x i ) − y i ) , p = 1 2 ( l o g ( f ( x i ) y i ) + y i f ( x i ) − 1 ) , p = 2 2 ( max ⁡ ( y i , 0 ) 2 − p ( 1 − p ) ( 2 − p ) − y i f ( x i ) 1 − p 1 − p + f ( x i ) 2 − p 2 − p ) , 其他 \def\bsl{\boldsymbol}MTDE=\frac{1}{n}\sum_{i=-1}^n\begin{cases}(f(\bsl x_i)-y)^2 &,p=0\\2(y_i log(\frac{y_i}{f(\bsl x_i)})+f(\bsl x_i)- y_i) &,p=1\\2(log(\frac{f(\bsl x_i)}{y_i})+\frac{y_i}{f(\bsl x_i)}-1) &,p=2\\2(\frac{\max(y_i,0)^{2-p}}{(1-p)(2-p)}-\frac{y_if(\bsl x_i)^{1-p}}{1-p}+\frac{f(\bsl x_i)^{2-p}}{2-p}) &,其他\\\end{cases} MTDE=n1​i=−1∑n​⎩ ⎨ ⎧​(f(xi​)−y)22(yi​log(f(xi​)yi​​)+f(xi​)−yi​)2(log(yi​f(xi​)​)+f(xi​)yi​​−1)2((1−p)(2−p)max(yi​,0)2−p​−1−pyi​f(xi​)1−p​+2−pf(xi​)2−p​)​,p=0,p=1,p=2,其他​深度理解这个偏差是比较困难的,我们只要简单的了解p越大,求和时真实目标和预测目标之间的极端偏差的权重就越小。
pinballmean_pinball_loss p i n b a l l = 1 n ∑ i = 1 n α max ⁡ ( ( y i − f ( x i ) ) , 0 ) + ( 1 − α ) max ⁡ ( ( f ( x i ) − y i ) , 0 ) pinball=\frac{1}{n}\sum_{i=1}^{n}\alpha\max((y_i-f(\boldsymbol x_i)),0)+(1-\alpha)\max((f(\boldsymbol x_i)-y_i),0) pinball=n1​i=1∑n​αmax((yi​−f(xi​)),0)+(1−α)max((f(xi​)−yi​),0)可用于构造评分器,再通过交叉验证评估分位数回归模型的泛化性能,见示例
D 2 D^2 D2 score略略比较难理解,少见,略

可通过sklearn.metrics的Regression metrics(官方说明) 调用。

1.1 MSE(西瓜书只介绍了这种)

最常用的评估方法是MSE(mean squared error),即均方误差:
M S E = 1 n ∑ i = 1 n ( f ( x i ) − y i ) 2 , n 为样本量 MSE=\frac{1}{n}\sum_{i=1}^{n}(f(\boldsymbol x_i)-y_i)^2,n为样本量 MSE=n1​i=1∑n​(f(xi​)−yi​)2,n为样本量
MSE即预测误差的数学期望,是最常用的一个性能度量方法。

1.2 R 2 \boldsymbol {R^2} R2

R 2 {R^2} R2叫可决系数(coefficient of determination),或测定系数、决定系数。
R 2 = 1 − ∑ i = 1 n ( f ( x i ) − y i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2=1-\frac{\sum_{i=1}^{n}(f(\boldsymbol x_i)-y_i)^2}{\sum_{i=1}^{n}(y_i-\bar y)^2} R2=1−∑i=1n​(yi​−yˉ​)2∑i=1n​(f(xi​)−yi​)2​
其中, y ˉ = 1 n ∑ i = 1 n y i \bar y =\frac{1}{n} \sum_{i=1}^{n}y_i yˉ​=n1​∑i=1n​yi​ ,即平均真实值。

作用:
【维基百科:】在统计学中用于度量应变数的变异中可由自变量解释部分所占的比例,以此来判断回归模型的解释力。

1.3 MAE

平均绝对误差,MAE(mean absolute error):
M S E = 1 n ∑ i = 1 n ∣ f ( x i ) − y i ∣ , n 为样本量 MSE=\frac{1}{n}\sum_{i=1}^{n}|f(\boldsymbol x_i)-y_i|,n为样本量 MSE=n1​i=1∑n​∣f(xi​)−yi​∣,n为样本量

1.4 MSLE

均方对数误差,MSLE(mean_squared_log_error):
M S L E = 1 n ∑ i = 1 n ( l o g e ( 1 + f ( x i ) ) − l o g e ( 1 + y i ) ) 2 , n 为样本量 MSLE=\frac{1}{n}\sum_{i=1}^{n}(log_e(1+f(\boldsymbol x_i))-log_e(1+y_i))^2,n为样本量 MSLE=n1​i=1∑n​(loge​(1+f(xi​))−loge​(1+yi​))2,n为样本量

该指标最适合用于具有指数增长的目标,例如人口数量、商品在几年内的平均销售额等。请注意,该指标对低估的估计值比高估的估计值的惩罚更大。

1.5 MAPE

平均绝对百分比误差, MAPE( mean_absolute_percentage_error):
M A P E = 1 n ∑ i = 1 n ∣ f ( x i ) − y i ∣ max ⁡ ( ϵ , ∣ y i ∣ ) , n 为样本量 MAPE=\frac{1}{n}\sum_{i=1}^{n}\frac{|f(\boldsymbol x_i)-y_i|}{\max(\epsilon,|y_i|)},n为样本量 MAPE=n1​i=1∑n​max(ϵ,∣yi​∣)∣f(xi​)−yi​∣​,n为样本量
ϵ \epsilon ϵ是一个任意小的但严格为正的数,以避免当 y 为零时出现未定义的结果。MSLE会忽略小幅度值,只反映最高幅度值的预测误差。但是这个问题在 MAPE 的情况下得到了解决,因为它计算了相对于实际输出的相对百分比误差。

1.6 MedAE

中值绝对误差,MedAE(median_absolute_error),
M e d A E = m e d i a n ( ∣ f ( x 1 ) − y 1 ∣ , ∣ f ( x 2 ) − y 2 ∣ , ⋯   , ∣ f ( x n ) − y n ∣ ) MedAE=median(|f(\boldsymbol x_1)-y_1|,|f(\boldsymbol x_2)-y_2|,\cdots,|f(\boldsymbol x_n)-y_n|) MedAE=median(∣f(x1​)−y1​∣,∣f(x2​)−y2​∣,⋯,∣f(xn​)−yn​∣)
MedAE它对异常值具有鲁棒性。损失是通过取目标和预测之间的所有绝对差的中值来计算的。

1.7 MaxError

最大误差, Max Error(max_error)
M a x E r r o r = max ⁡ ( ∣ f ( x i ) − y i ∣ ) Max Error=\max(|f(\boldsymbol x_i)-y_i|) MaxError=max(∣f(xi​)−yi​∣)
这是一个衡量预测值和真实值之间最坏情况误差的指标

1.8 EVS

解释方差分数,EVS explained_variance_score:
E V S = 1 − V a r ( y i − f ( x i ) ) V a r ( y i ) EVS =1-\frac{Var(y_i-f(\boldsymbol x_i))}{Var(y_i)} EVS=1−Var(yi​)Var(yi​−f(xi​))​
E V S EVS EVS和 R 2 {R^2} R2得分之间的差异: R 2 {R^2} R2是当 E V S EVS EVS不考虑预测中的系统偏移时的情况。出于这个原因, R 2 {R^2} R2通常应该是首选。

1.9 MTDE

平均Tweedie偏差,MTDE(mean_tweedie_deviance),由超参数p控制:
M T D E = 1 n ∑ i = − 1 n { ( f ( x i ) − y ) 2 , p = 0 2 ( y i l o g ( y i f ( x i ) ) + f ( x i ) − y i ) , p = 1 2 ( l o g ( f ( x i ) y i ) + y i f ( x i ) − 1 ) , p = 2 2 ( max ⁡ ( y i , 0 ) 2 − p ( 1 − p ) ( 2 − p ) − y i f ( x i ) 1 − p 1 − p + f ( x i ) 2 − p 2 − p ) , 其他 \def\bsl{\boldsymbol} MTDE=\frac{1}{n}\sum_{i=-1}^n\begin{cases} (f(\bsl x_i)-y)^2 &,p=0\\ 2(y_i log(\frac{y_i}{f(\bsl x_i)})+f(\bsl x_i)- y_i) &,p=1\\ 2(log(\frac{f(\bsl x_i)}{y_i})+\frac{y_i}{f(\bsl x_i)}-1) &,p=2\\ 2(\frac{\max(y_i,0)^{2-p}}{(1-p)(2-p)}-\frac{y_if(\bsl x_i)^{1-p}}{1-p}+\frac{f(\bsl x_i)^{2-p}}{2-p}) &,其他\\ \end{cases} MTDE=n1​i=−1∑n​⎩ ⎨ ⎧​(f(xi​)−y)22(yi​log(f(xi​)yi​​)+f(xi​)−yi​)2(log(yi​f(xi​)​)+f(xi​)yi​​−1)2((1−p)(2−p)max(yi​,0)2−p​−1−pyi​f(xi​)1−p​+2−pf(xi​)2−p​)​,p=0,p=1,p=2,其他​

深度理解这个偏差是比较困难的,我们只要简单的了解p越大,求和时真实目标和预测目标之间的极端偏差的权重就越小。

举个例子:

>>> from sklearn.metrics import mean_tweedie_deviance
>>> mean_tweedie_deviance([1.0], [1.5], power=0)
0.25
>>> mean_tweedie_deviance([100.], [150.], power=0)
2500.0

>>> mean_tweedie_deviance([1.0], [1.5], power=1)
0.18...
>>> mean_tweedie_deviance([100.], [150.], power=1)
18.9...

>>> mean_tweedie_deviance([1.0], [1.5], power=2)
0.14...
>>> mean_tweedie_deviance([100.], [150.], power=2)
0.14...

可以看到 y = 1.0 , f ( x ) = 1.5 y=1.0,f(\boldsymbol x)=1.5 y=1.0,f(x)=1.5 和 y = 100 , f ( x ) = 150 y=100,f(\boldsymbol x)=150 y=100,f(x)=150,随着p变大,MTDE趋近相同。
所以, 从这个角度看,MTDE有点类似MAPE的感觉。

1.10 pinball

弹球损失,pinball loss (mean_pinball_loss):
p i n b a l l = 1 n ∑ i = 1 n α max ⁡ ( ( y i − f ( x i ) ) , 0 ) + ( 1 − α ) max ⁡ ( ( f ( x i ) − y i ) , 0 ) pinball=\frac{1}{n}\sum_{i=1}^{n}\alpha\max((y_i-f(\boldsymbol x_i)),0)+(1-\alpha)\max((f(\boldsymbol x_i)-y_i),0) pinball=n1​i=1∑n​αmax((yi​−f(xi​)),0)+(1−α)max((f(xi​)−yi​),0)
α = 0 , 5 \alpha=0,5 α=0,5时,pinball等于MAE。

可用于构造评分器,再通过交叉验证评估分位数回归模型的泛化性能,见示例。

1.11 D 2 D^2 D2 score

比较少见,比较难懂,省略。有兴趣自行查看,官方。

2. 分类型任务

2.0 错误率和精度

e r r o r _ r a t e = 1 n ∑ i = 1 n ( f ( x i ) ≠ y i 时取值 1 ) , n 为样本量 error\_rate=\frac{1}{n}\sum_{i=1}^{n}(f(\boldsymbol x_i)\neq y_i时取值1),n为样本量 error_rate=n1​i=1∑n​(f(xi​)=yi​时取值1),n为样本量
a c c u r a c y _ r a t e = 1 − e r r o r _ r a t e = 1 n ∑ i = 1 n ( f ( x i ) = y i 时取值 1 ) , n 为样本量 accuracy\_rate=1-error\_rate=\frac{1}{n}\sum_{i=1}^{n}(f(\boldsymbol x_i)= y_i时取值1),n为样本量 accuracy_rate=1−error_rate=n1​i=1∑n​(f(xi​)=yi​时取值1),n为样本量

2.1 混淆矩阵

首先,针对二分类型的任务,介绍下混淆矩阵(confusion matrix),因为较多的评估指标,都是基于混淆矩阵设计的。假设二分类类别为1和0,我们将1作为正类(positive)和0作为负类(negative),则所有样本分类的结果有4种,表格如下:

预测值1预测值0合计
真实值1TPFN真实为1的总数:TP+FN
真实值0FPTN真实为0的总数:FP+TN
合计预测为1的总数:TP+FP预测为0的总数:FN+TN总样本数=总预测数=总真实数=TP+FP+FN+TN

注意行列合计的含义。

说明:

  • TP(True Positive): 真正类。 真实为1,预测也为1
  • FN(False Negative): 假负类。真实为1,预测为0
  • FP(False Positive): 假正类。真实为0,预测为1
  • TN(True Negative): 真负类。真实为0,预测也为0

2.2 初阶:precision、recall、sensitivity、specificity、TPR、TNR、FPR、NPV、PPV

预测值1预测值0预测正确的比例
真实值1TP=20FN=180 r e c a l l \color{blue}{recall} recall ( 查全率、 (查全率、 (查全率、 T P R \color{red}TPR TPR ) = 1 预测正确数 真实为 1 的总数 = T P T P + F N )=\frac{1预测正确数}{真实为1的总数}=\frac{TP}{TP+FN} )=真实为1的总数1预测正确数​=TP+FNTP​
真实值0FP=10TN=1820 s p e c i f i c i t y ( 特异度、 T N R ) = 0 预测正确数 真实为 0 的总数 = T N F P + T N specificity(特异度、TNR)=\frac{0预测正确数}{真实为0的总数}=\frac{TN}{FP + TN} specificity(特异度、TNR)=真实为0的总数0预测正确数​=FP+TNTN​
F P R \color{red}FPR FPR = 1 − T N R = F P F P + T N = 1- TNR =\frac{FP}{FP + TN} =1−TNR=FP+TNFP​
预测正确的比例 p r e c i s i o n \color{blue}precision precision ( 查准率、 P P V ) = 1 预测正确数 预测为 1 的总数 = T P T P + F P (查准率、PPV)=\frac{1预测正确数}{预测为1的总数}=\frac{TP}{TP+FP} (查准率、PPV)=预测为1的总数1预测正确数​=TP+FPTP​ N P V = T N F N + T N NPV=\frac{TN}{FN+TN} NPV=FN+TNTN​ T P R \color{red}TPR TPR和 F P R \color{red}FPR FPR构成 R O C \color{red}ROC ROC曲线
p r e c i s i o n \color{blue}precision precision和 r e c a l l \color{blue}recall recall构成 P - R \color{blue}P\raisebox{0mm}{-}R P-R曲线

注意1:各指标的分子,和前面混淆矩阵合计一样。各值可自行计算看看。
注意2:最重要的是recall和precision,后续计算中分别用 R R R和 P P P表示。

等价命名和作用:

  • recall:召回率、查全率、sensitivity( 敏感度)、真正率TPR(True positive rate)=TP/ (TP+ FN),通常用 R R R表示。一般情况下,Recall越高,说明有更多的正类样本被模型预测正确,模型的效果越好。特别的,如果一个系统,更关心真实正样本不被漏掉,则要求查全率更高(如预测对象是否为罪犯的系统)。
  • precision: 正确率、准确率、查准率,通常用 P P P表示,PPV:正预测(Positive predictive value)=TP / (TP + FP)。一般情况下,查准率越高,说明模型的效果越好。特别的,如果一个系统,更关心预测正样本要准确,则要求查准率更高(如预测用户是否喜欢某个推送消息的系统,可减少对用户的打扰)。
  • specificity: 特异度、真负率TNR(True negative rate)= TN / (FP + TN)
  • FPR:假正率(FPR,false positive rate) = 1- TNR = FP/(FP+TN),由于我们比较关心正样本,所以需要查看有多少负样本被错误地预测为正样本,所以使用(1-特异度),而不是特异度。
  • NPV:负预测(Negative predictive value)=TN / (FN + TN)

性质:

  1. P P P和 R R R通常会相互矛盾。一个值变大的同时,另一个值往往比较小,只有在一些简单的任务中, P P P和 R R R才会都比较高。

2.3 中阶1:Accuracy、 F 1 F_1 F1​-score、 F β F_\beta Fβ​-score、macro、micro

一般情况下,这些值越大,说明模型的效果越好。

2.3.1 Accuracy

按章节2.0的定义可知,精度Accuracy为:
A C C = 预测正确数 总样本数 = T P + T N T P + F P + F N + T N ACC=\frac{预测正确数}{总样本数}=\frac{TP+TN}{TP+FP+FN+TN} ACC=总样本数预测正确数​=TP+FP+FN+TNTP+TN​

2.3.2 F 1 F_1 F1​-score

综合考虑 P P P和 R R R得到的一个分数:
F 1 = 2 P ⋅ R P + R F_1=2\frac{P\cdot R}{P+R} F1​=2P+RP⋅R​

2.3.3 F β F_\beta Fβ​-score

F 1 F_1 F1​中 P P P和 R R R重要性一样,在前面 P P P和 R R R的介绍中,我们知道不同系统对 P P P和 R R R的关注度是不同的,这就引申出了 F β F_\beta Fβ​-score:
F β = ( 1 + β 2 ) P ⋅ R β 2 P + R F_\beta=\frac{(1+\beta^2)P\cdot R}{\beta^2P+R} Fβ​=β2P+R(1+β2)P⋅R​
β = 1 \beta=1 β=1时为 F 1 F_1 F1​-score。 β > 1 \beta\gt 1 β>1时查全率 R R R有更大影响, β < 1 \beta\lt 1 β<1时查准率 P P P有更大影响。

说明,F值是用到调和平均:
1 F β = 1 ( 1 + β 2 ) ( 1 P + β 2 R ) \frac{1}{F_\beta}=\frac{1}{(1+\beta^2)}(\frac{1}{P}+\frac{\beta^2}{R}) Fβ​1​=(1+β2)1​(P1​+Rβ2​)
调和平均更重视较小值。考虑极限情况 β → + ∞ \beta \rightarrow +\infty β→+∞时, 1 F β \frac{1}{F_\beta} Fβ​1​只和 1 R \frac{1}{R} R1​有关, β → 0 \beta \rightarrow 0 β→0时, 1 F β \frac{1}{F_\beta} Fβ​1​只和 1 P \frac{1}{P} P1​有关。

2.3.4 macro、micro

当我们由多个二分类混淆矩阵的时候,可能来自

  • 多次训练/测试
  • 在多个数据集上训练/测试
  • 多分类任务,每两两类别组合都对应一个混淆矩阵

假设一共有n组 { ( P i , R i ) } \{(P_i,R_i)\} {(Pi​,Ri​)},我们希望估计算法的“全能”性能时,就要用到macro性能:
{ 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 \def\dh{\raisebox{0mm}{-}} \begin{cases} macro \dh P=\frac{1}{n}\sum_{i=1}{n}P_i\\ macro \dh R=\frac{1}{n}\sum_{i=1}{n}R_i\\ macro \dh F_1=2\frac{macro \dh P\cdot macro \dh R}{macro \dh P+macro \dh R} \end{cases} ⎩ ⎨ ⎧​macro-P=n1​∑i=1​nPi​macro-R=n1​∑i=1​nRi​macro-F1​=2macro-P+macro-Rmacro-P⋅macro-R​​
也可以根据 { ( P i , R i ) } \{(P_i,R_i)\} {(Pi​,Ri​)}先计算各 T P 、 F P 、 T N 、 F N TP、FP、TN、FN TP、FP、TN、FN的平均值 T P ‾ 、 F P ‾ 、 T N ‾ 、 F N ‾ \overline{TP}、\overline{FP}、\overline{TN}、\overline{FN} TP、FP、TN、FN,得到micro性能:
{ m i c r o - P = T P ‾ T P ‾ + F N ‾ m i c r o - R = 1 n ∑ i = 1 n R i m i c r o - F 1 = 2 m i c r o - P ⋅ m i c r o - R m i c r o - P + m i c r o - R \def\dh{\raisebox{0mm}{-}} \begin{cases} micro \dh P=\frac{\overline{TP}}{\overline{TP}+\overline{FN}}\\ micro \dh R=\frac{1}{n}\sum_{i=1}{n}R_i\\ micro \dh F_1=2\frac{micro \dh P\cdot micro \dh R}{micro \dh P+micro \dh R} \end{cases} ⎩ ⎨ ⎧​micro-P=TP+FNTP​micro-R=n1​∑i=1​nRi​micro-F1​=2micro-P+micro-Rmicro-P⋅micro-R​​

可类似地定义出 m a c r o - F β 和 m i c r o - F β macro \raisebox{0mm}{-} F_\beta和 micro \raisebox{0mm}{-} F_\beta macro-Fβ​和micro-Fβ​,略。

2.4 中阶2:P-R、ROC、AUC、Precision@N、Recall@N

2.4.1 P-R

曲线的画法:二分类问题中,我们一般有个阈值(thredshold,记为 t h r thr thr),当预测概率大于阈值 t h r thr thr,则预测为正,否则预测为负。这样不同的阈值 t h r thr thr都会产生一组 ( P t h r , R t h r ) (P_{thr},R_{thr}) (Pthr​,Rthr​),把 t h r thr thr从 100 % 100\% 100%以一定的步长降到 0 % 0\% 0%,则可得到一系列 ( P t h r , R t h r ) (P_{thr},R_{thr}) (Pthr​,Rthr​),就可以画出一条P-R曲线。
曲线画法2:在推荐问题中,通常模型返回的是一组推荐列表,没有一个确定的阈值来把预测结果直接判定为正样本或负样本,而是采用 Top N 排序结果的精确率(Precision@N)和召回率(Recall@N)来衡量排序模型的性能。具体操作,就是认为模型排序的前 N 个结果就是模型判定的正样本,然后分别计算 Precision@N 和 Recall@N。而ROC曲线则可以通过取不同的N画出来。(本质上,不同N对应的也是不同的预测得分阈值,因为返回结果都会按得分从高到底排列。只不过对于不同的用户,返回列表的得分可能差异很大,不合适用一个固定的得分作为阈值,而是用Top N 这样的方法)。

在这里插入图片描述
A、B、C表示三个不同算法画出的P-R曲线。
模型选择:

  • 如果一个模型的P-R曲线完全被另一个模型的曲线保住,则另一个好,如C、B中B好。
  • 如果模型有交叉,如A、B,则不一定哪个好,看系统更关注且阈值设置为什么。例如,如果系统更关注查全率,则thr为1%时的B比A更好。
  • 通常情况,不好比较的时候,比较平衡点,平衡点表示查全率和查准率都比较高的情况。所以平衡点离原点越远的越好,A>B>C。
  • 但是,P-R曲线一般不需要用来选择模型了,前面讲的F-score能很好地完成P和R两个维度下的模型选择。

极限情况: t h r = 0 % thr=0\% thr=0%,100个样本,80个1,20个0,预测值都为1,则:

预测值1预测值0合计
真实值1TP=80FN=0 R = T P T P + F N = 100 % R=\frac{TP}{TP+FN}=100\% R=TP+FNTP​=100%
真实值0FP=20TN=0
合计 P = T P T P + F P = 80 % P=\frac{TP}{TP+FP}=80\% P=TP+FPTP​=80%

极限情况: t h r = 100 % thr=100\% thr=100%,100个样本,80个1,20个0,预测值几乎都为0,则:

预测值1预测值0合计
真实值1TP=1FN=79 R = T P T P + F N = 1.25 % R=\frac{TP}{TP+FN}=1.25\% R=TP+FNTP​=1.25%
真实值0FP=0TN=20
合计 P = T P T P + F P = 100 % P=\frac{TP}{TP+FP}=100\% P=TP+FPTP​=100%
2.4.2 ROC、AUC

曲线的画法:同P-R,只不过ROC曲线横轴为假正率(FPR) = 1- TNR = FP/(FP+TN),纵轴为查全率,也叫真正率(TPR)=TP/ (TP+ FN)。
在这里插入图片描述
模型选择:

  • 如果一个模型的ROC曲线完全被另一个模型的曲线保住,则另一个好。
  • 如果模型有交叉,则不能很好的选择。
  • 通常情况,不好比较的时候,比较ROC下面的面积大小,这个面积就是AUC。

极限情况: t h r = 0 % thr=0\% thr=0%,100个样本,80个1,20个0,预测值都为1,则:

预测值1预测值0合计
真实值1TP=80FN=0 T P R = R = T P T P + F N = 100 % TPR=R=\frac{TP}{TP+FN}=100\% TPR=R=TP+FNTP​=100%
真实值0FP=20TN=0 F P R = F P F P + T N = 100 % FPR=\frac{FP}{FP + TN}=100\% FPR=FP+TNFP​=100%
合计

极限情况: t h r = 100 % thr=100\% thr=100%,100个样本,80个1,20个0,预测值几乎都为0,则:

预测值1预测值0合计
真实值1TP=1FN=79 R = T P T P + F N = 1.25 % R=\frac{TP}{TP+FN}=1.25\% R=TP+FNTP​=1.25%
真实值0FP=0TN=20 F P R = F P F P + T N = 0 % FPR=\frac{FP}{FP + TN}=0\% FPR=FP+TNFP​=0%
合计

2.5 中阶3:平均精度均值MAP(Mean Average Precision)

平均精度均值 mAP(mAP,mean average precision),它除了在推荐系统中比较常用,在信息检索领域也很常用。mAP 其实是对平均精度(AP,average precision)的再次平均。

平均精度(AP):假设,推荐系统对某一用户测试集的排序结果是 1, 0, 0, 1, 1, 1。其中,1 代表正样本,0 代表负样本。接下来,按照前面提过的绘图方法2,计算这个序列中每个位置上的 precision@N:

在这里插入图片描述
计算平均精度 AP 的时候,我们只取正样本处的 precision 进行平均,根据得到的表格 AP =(1/1 + 2/4 + 3/5 + 4/6)/4 = 0.6917。

mAP:如果对测试集中的每个用户都进行样本排序,那么每个用户都会计算出一个 AP 值,再对所有用户的 AP 值进行平均,就得到了 mAP。也就是说,mAP 是对精确度平均的平均。

注意,mAP 的计算方法和 P-R 曲线、ROC 曲线的计算方法是完全不同的,因为 mAP 需要对每个用户的样本进行分用户排序,而 P-R 曲线和 ROC 曲线均是对全量测试样本进行排序。

2.6 中阶4:平均倒数排名MRR (Mean Reciprocal Rank)

在这里插入图片描述

tf平价指标:https://tensorflow.google.cn/api_docs/python/tf/keras/metrics

参考:
《西瓜书》
混淆矩阵(Confusion Matrix)
机器学习笔记 混淆矩阵(Confusion Matrix)
信息检索-评价指标
wiki-平均倒数排名MRR

【临床预测模型】----10步建立完整的临床机器学习预测模型,5分钟搞定!! 【临床预测模型】----10步建立预测模型 好多小伙伴在首次构建一个临床预测模型构建时,一头雾水找不着北???? 为了解决这一问题,小编思索良久,决定彻夜归纳,5min快速概括,告诉各位头大的小朋友,每一步应该怎么做~???????? 满满只放干货,划重点!! 研究思路 ???? ????准备工作 ➡️ 统计分析 ➡️ 成果展示 !!大部分的研究,取决于我们有什么样的现有数据!! so,数据是一切的源头,巧妇难为无米之炊。 1、准备工作: 1)确立研究问题 2)选择数据来源 3)数据的预处理 2、统计 阅读详情

相关推荐

机器学习很难,sklearn很简单

Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模块之一.Sklearn 包含了很多种机器学习的方式: - Classification 分类 - Regression 回归 - Clustering 非监督分类 - Dimensionality reduction 数据降维 - Model Selection 模型选择 - Preprocessing 数据预处理 我们总能够从这些方法中挑选出一个适合于自己问题的, 然后用来

阿丹的彩蛋 5151

【机器学习基础】机器学习的模型评估(评估方法及性能度量原理及主要公式)

机器学习模型评估是机器学习领域中的一个重要研究方向,其研究背景在于随着大数据时代的到来,人们面临着越来越多的数据分析和处理任务,而机器学习作为一种高效的数据处理技术,在很多领域都得到了广泛应用。然而,机器学习模型的效果评估是机器学习应用过程中一个非常关键的问题,因此机器学习模型评估的研究具有非常重要的意义。

z135733的博客 2万+

用SQL做机器学习:BigQuery ML实战指南

机器学习(ML)本质上是将数据转化为可执行预测的统计建模过程,其核心原理在于特征工程、模型拟合与泛化评估。随着数据基础设施演进,ML正从Python生态向数据湖原生能力迁移——SQL作为最普及的数据操作语言,天然具备可审计、可复现、易协同的工程优势。BigQuery ML正是这一趋势的典型代表,它将逻辑回归、ARIMA_PLUS、DNN等常用模型封装为标准SQL语法,在PB级数据上直接完成训练与预测,无需导出、不依赖本地环境。该技术显著降低数据科学门槛,特别适用于电商复购预测、用户分群、LTV建模等高频业务

cri5768的博客 424

【机器学习】模型评估

​ 一般情况来说,单一评分标准无法完全评估一个机器学习模型。只用good和bad偏离真实场景去评估某个模型,都是一种欠妥的评估方式。下面介绍常用的分类模型和回归模型评估方法。分类模型常用评估方法:回归模型常用评估方法:在机器学习中,Bias(偏差),Error(误差),和Variance(方差)存在以下区别和联系:**对于Error **:误差(error):一般地,我们把学习器的实际预测输出与样本的真是输出之间的差异称为“误差”。Error = Bias + Variance + Noise,Error反

sikh_0529的博客 1万+

C# ML.NET机器学习入门:5步轻松搞定,代码详解+实战演练

通过以上五个步骤,你已经成功地使用C#和ML.NET创建并使用了一个简单的机器学习模型。是不是感觉比想象中简单多了?其实,机器学习并没有那么高深莫测,只要你愿意动手实践,就能轻松上手。希望这篇教程对你有所帮助,如果你有任何问题或建议,欢迎在评论区留言交流!接下来,你可以尝试使用更多的数据集和不同的任务类型,进一步提升你的机器学习技能。加油,未来的机器学习专家!🌟✨😊✨。

java专栏 4713

一文搞定机器学习中的“模型可解释性”

机器学习是最近许多科技进步的核心。随着计算机在围棋等游戏中击败专业人士,许多人开始询问,机器是否也能成为更好的司机,甚至更好的医生。如果⼀个机器学习模型运⾏良好,为什么我们仅仅信任该模型⽽忽略为什么做出特定的决策呢?诸如分类准确性之类的单⼀指标⽆法完整地描述⼤多数实际任务。当涉及到预测模型时,需要作出权衡:**你是只想知道预测是什么?**例如,客户流失的概率或某种药物对病⼈的疗效。**还是想知道为什么做出这样的预测?**这种情况下可能为了可解释性付出预测性能下降的代价。

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 2591

机器学习:模型评价指标总结

混淆矩阵 混淆矩阵是一种特定的矩阵用来呈现算法性能的可视化效果,通常用于二分类模型。其每一列代表预测值,每一行代表的是实际的类别。 其实就是把所有类别的预测结果与真实结果按类别放置到了同一个表里,在这个表格中我们可以清楚看到每个类别正确识别的数量和错误识别的数量。 TP :预测为正样本,实际也是正样本。 FP :预测为正样本,实际是负样本。 FN :预测为负样本,实际是正样本。 TN :预测为负样本,实际也是负样本。 准确率 准确率是指我们的模型预测正确的结果所占的比例。 精确率 所有预测为正样本的

weixin_34280060的博客 2410

SimpleFOC STM32实战:基于F103与HAL库,剖析速度环与电流环的协同控制

本文详细介绍了基于STM32F103与HAL库的SimpleFOC实战应用,重点剖析速度闭环控制与电流环的协同工作原理。通过开发环境搭建、参数调试技巧及性能优化方案,帮助开发者高效实现无刷电机精准控制,适用于机器人、无人机等高精度应用场景。

weixin_29170327的博客 476

机器学习之模型评估

模型评估在机器学习中至关重要。模型评估可以帮助我们了解模型的性能如何,指导我们对模型进行改进和优化。通过模型评估,我们可以确定模型的准确性、泛化能力和稳定性,以及是否存在过拟合或欠拟合等问题,常用的评估指标包括准确率、精确率、召回率等。另外,对于不同类型的问题,还可以采用不同的评估方法,如P-R曲线、ROC曲线、混淆矩阵等。综上所述,模型评估在机器学习中是至关重要的,可以帮助我们提高模型的性能和效果。FN%7D。

m0_72946768的博客 3399

头歌 JAVA 桥接模式实验

这样,通过客户端代码配置不同的 FileConvertor 子类和 DataHandler 子类(如 OracleHandler 或 SQLServerHandle),即可实现从不同数据库读取数据并转换成不同格式的功能,而无需修改已有代码。

m0_74091276的博客 3194

CMU动作捕捉数据集实战:从AMC文件到Python可视化的完整流程

本文提供了CMU动作捕捉数据集的完整实战指南,详细解析了AMC文件格式,并对比了MATLAB转换、Python原生解析及转换为BVH格式三种数据解析策略。重点介绍了如何构建Python数据处理与可视化管道,包括将数据转换为Pandas DataFrame、绘制时间序列与相关性热力图,以及实现3D骨架动画,帮助开发者高效利用这一经典动作捕获数据集进行运动分析与模型训练。

android的专栏 716

机器学习进阶,一文搞定模型选型!

如何选择适合的机器学习算法?关键步骤包括:1)明确业务目标与评估标准;2)确定问题类型(回归/分类/聚类);3)分析数据特性(规模、线性、特征等);4)从简单模型开始(如线性回归/逻辑回归);5)逐步尝试强效算法(如随机森林/XGBoost);6)通过交叉验证快速迭代验证。核心原则是:没有"最优"算法,只有最适合具体问题和数据特点的解决方案。建议优先考虑随机森林/XGBoost等对表格数据处理效果好的算法,再根据实际效果调整。最终选择需结合业务需求和实验结果。

明月专栏 1512

人工势场法三大致命缺陷?我用ROS+Gazebo做了组对比实验

本文通过ROS与Gazebo仿真实验,深入剖析了人工势场法(APF)在机器人路径规划中的三大经典问题:局部最小值、目标不可达和路径震荡。文章不仅复现了这些缺陷,还对比测试了虚拟目标点法、改进斥力场及运动平滑等主流改进方案,为工程选型提供了基于数据的实用建议。

dapp9builder的博客 219

几行代码搞定ML模型,低代码机器学习Python库正式开源

PyCaret 库支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型,提升机器学习实验的效率。 想提高机器学习实验的效率,把更多精力放在解决业务问题而不是写代码上?低代码平台或许是个不错的选择。 最近,机器之心发现了一个开源低代码机器学习 Python 库 PyCaret,它支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型。 GitHub 地址:https://...

喜欢打酱油的老鸟 1125

科研级YOLOv8 Neck革新:BiFPN双向特征金字塔赋能,让多尺度融合更高效的实战指南

在文件夹下新建BiFPN.py,将上述BiFPNLayer和BiFPN类的代码写入其中。这一步是为了让YOLOv8的代码架构能识别我们的自定义Neck模块。

m0_64661770的博客 153

手把手保姆级|Python爬取微信公众号文章完整版,反反爬策略拉满,附可运行完整代码(永久可用)

做Python爬虫的朋友都知道,爬取微信公众号文章 绝对是爬虫领域的「香饽饽」也是「硬骨头」。一方面,微信公众号的文章是极具价值的数据源:不管是自媒体从业者做竞品分析、新媒体运营者整理干货、还是个人学习收集资料,都需要批量爬取公众号文章;另一方面,微信的反爬机制堪称全网最严苛之一 ——腾讯对微信生态的风控做到了极致,动态渲染页面、高频IP封禁、Cookie短时效失效、请求头严格校验、自动化工具秒识别、频繁请求直接拉黑,这些反爬手段让90%的爬虫新手望而却步:要么爬了几篇就被封IP,要么Cookie失效爬取中

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2626

决策树算法全解析:从零基础到Titanic实战,一文搞定机器学习经典模型

你是否曾好奇,机器学习如何从海量数据中挖掘出隐藏的规律?或者,一个简单的模型如何帮助医生诊断疾病、银行评估信用,甚至预测泰坦尼克号上的生还者?答案就在决策树算法中。作为机器学习领域的“常青树”,决策树以其直观易懂和强大的实用性,深受初学者和专业人士的喜爱。我还记得自己第一次接触决策树时的兴奋——用几行代码,就能让计算机像人类一样“思考”问题、分步决策。那一刻,我意识到它的潜力远超想象。这篇文章将带你走进决策树的世界,从零基础的构建过程,到信息增益与基尼指数的奥秘,再到剪枝优化和真实案例的实战演练。

吴师兄大模型的博客 4544

【WorkBuddy专栏52】Codex与WorkBuddy生态适配、用户争夺与未来走向(下)

【WorkBuddy专栏52】Codex与WorkBuddy在中国大陆的发展——生态适配、用户争夺与未来走向(下)

AI人人懂 679

机器学习实战练手项目

机器学习是一种从数据生成规则、发现模型,来帮助我们预测、判断、分析和解决问题的技术。一个机器学习项目从开始到结束大致分为5步,分别是定义问题、收集数据和预处理、选择算法和确定模型、训练拟合模型、评估并优化模型性能。......

qq_43300880的博客 2万+

全志F1C100S/F1C200S学习笔记(1)——基础简介及资料

资料: 荔枝派资料下载站 荔枝派github 荔枝派中文论坛 荔枝派DIY-github资料 荔枝派Nano 全流程指南 芒果派 坑网

丨晋丨 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【AI机器学习入门与实战】训练模型、优化模型、部署模型

弄清楚在机器学习中训练模型、评估优化模型、部署模型上线到底该怎么做?

真正的大师,永远怀着一颗学徒的❤ 5696

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【机器学习】AUC、F1分数不再迷茫:图解Scikit-Learn模型评估与选择核心技巧

在前几天的学习中,我们已经接触了多种机器学习模型,如线性回归、逻辑回归、决策树、随机森林等。我们如何知道哪个模型更好?如何科学地评估模型的性能,并从中选择最适合我们任务的模型呢?这就是我们今天要深入探讨的主题——模型评估与选择。选择错误的评估指标或方法,可能会让你对模型的“性能”产生误判,尤其是在处理现实世界中常见的不平衡数据时。

吴师兄大模型的博客 2045

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

机器学习建模神器PyCaret已开源!提升效率,几行代码轻松搞定模型

Datawhale干货编译:张峰,Datawhale成员寄语:PyCaret,是一款 Python中的开源低代码(low-code)机器学习库,支持在「低代码」环境中训练和部署有监督...

Datawhale 8236

C#实战:从零构建你的第一个AI分类模型【ML.NET入门】

本文为C#开发者提供了使用ML.NET框架从零构建第一个AI分类(回归)模型的实战入门指南。通过房屋价格预测的完整案例,详细讲解了环境搭建、数据定义、模型训练与预测的全流程,展示了如何在熟悉的.NET生态中轻松集成人工智能能力,无需依赖Python环境。

raspberrypi5的博客 399

LeetCode 25. Reverse Nodes in k-Group 题解:Go 递归实现 K 个一组反转链表

本文围绕 [25. Reverse Nodes in k-Group 题解文档](https://link.gitcode.com/i/e96f7b9edab56c5291b3f1d06af01e25) 展开,深入讲解"链表按 K 个节点一组反转、尾部不足 K 个保持原样"这一经典链表操作问题,并结合本仓库中对应的 Go 源码实现 与 单元测试,逐行剖析其递归 + 局部区间反转的实现原理。读完本文

gitblog_00095的博客 454
上一篇: 【Python】基础学习&技能提升&代码样例7:代码测试
下一篇: 【PlayWright】Playwright Inspector使用
Code_LT
博客等级 码龄10年 307粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值