【评价指标】ROC、AUC;MSE、RMSE、MAE

一、ROC、AUC

1. ROC(receiver operating characteristic)

1.1 混淆矩阵

在这里插入图片描述

(1)真正类率 TPR(True Postive Rate) ,灵敏度,召回率
T P R = S e n s i t i v i t y = R e c a l l = T P P = T P T P + F N TPR=Sensitivity=Recall= \frac{TP } {P }=\frac{ TP}{TP + FN} TPR=Sensitivity=Recall=PTP=TP+FNTP
(2)假正类率 FPR (False Postive Rate)
F P R = F P N = F P F P + T N FPR= \frac{FP } { N } = \frac{FP} {FP + TN} FPR=NFP=FP+TNFP
(3)真负类率 TNR(True Negative Rate) ,特异度
T N R = S p e c i f i c i t y = T N N = T N F P + T N TNR=Specificity= \frac{TN } { N }= \frac{TN }{FP + TN} TNR=Specificity=NTN=FP+TNTN
(4)精确率
P r e c i s i o n = T P P ′ = T P T P + F P Precision = \frac{TP}{P'}=\frac{TP}{TP+FP} Precision=PTP=TP+FPTP

容易看出 查准率P与查全率R的关系在于分母不同。

前三个式子确定分母的技巧:看两个描述词组合后是正类还是负类,分母就是实际类别的正类/负类。而分子显然可以直接确定。
例如:
真正(TP)类 --> 正类( P );
假正(FP)类 --> 负类( N );
真负(TN)类 --> 负类( N );

1.2 ROC的绘制:

注意:分类器输出的值是一个概率,即该样本属于正类的概率p。

  • p的讨论:

    1. p ∈ { 0 , 1 } p\in\{0,1\} p{0,1}, 那么对于一次分类结果,作图得到的是图中一个点。
    2. p ∈ [ 0 , 1 ] p\in[0,1] p[0,1], 那么对于一次分类结果,递增阈值,描点-连线,得到的是一条曲线。
  • 分类器性能的讨论:

    1. 如果为随机分类器
      若p属于情况1,无穷多次分类的结果,描点,得到对角线上离散点组成的直线;
      若p属于情况2,一次分类结果,递增阈值,描点-连线,得到对角线上的直线。
    2. 如果分类器性能很好
      若p属于情况1,无穷多次分类结果,得到靠近左上角的离散点组成曲线;
      若p属于情况2,则一次分类结果,阈值递增,描点-连线,得到靠近左上角的曲线。

在这里插入图片描述

2. AUC

(Area Under Curve)曲线下的面积

二、MSE、RMSE、MAE

1. MSE 均方误差 (mean squared error)

M S E = E [ ( θ ^ m − θ ) 2 ] = B i a s ( θ ^ m ) 2 + V a r ( θ ^ m ) = 1 m ∑ i = 1 m ( y i − y i ^ ) 2 MSE= \mathbb{E}[(\hat{\theta}_m-\theta)^2]=Bias(\hat{\theta}_m)^2+Var(\hat\theta_m)\\= \frac{1}{m}\sum^m_{i=1}(y_i-\hat{y_i})^2 MSE=E[(θ^mθ)2]=Bias(θ^m)2+Var(θ^m)=m1i=1m(yiyi^)2
偏差度量着偏离真实函数或参数的误差期望。而方差度量着数据上任意特定采样可能导致的估计期望的偏差。

利用MSE可以同时衡量偏差方差这两个不同误差来源。

(如图)增加模型复杂度会增加方差,降低偏差。
在这里插入图片描述

2. RMSE 均方根误差 ( root mean squared error)

1 m ∑ i = 1 m ( y i − y i ^ ) 2 = M S E \sqrt{\frac{1}{m}\sum^m_{i=1}(y_i-\hat{y_i})^2}=\sqrt{MSE} m1i=1m(yiyi^)2 =MSE

3. MAE 平均绝对误差(mean absolute error )

1 m ∑ i = 1 m ∣ y i − y i ^ ∣ \frac{1}{m}\sum^m_{i=1}|y_i-\hat{y_i}| m1i=1myiyi^

三、代码

1. accuracy_score

sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)

  • normalize:默认值为True,返回正确分类的比例;如果为False,返回正确分类的样本数
from sklearn.metrics import accuracy_score
y_pred = [0,2,1,3]
y_true = [0,1,2,3]
accuracy_score(y_true, y_pred) # 0.5
accuracy_score(y_true, y_pred, normalize=False) # 2

2. recall_score

sklearn.metrics.recall_score(y_true, y_pred, labels=None, pos_label=1,average='binary', sample_weight=None)

  • average : string, [None, ‘micro’, ‘macro’(default), ‘samples’, ‘weighted’]
from sklearn.metrics import recall_score
y_true = [0, 1, 2, 0, 1]
y_pred = [0, 2, 1, 0, 1]
# macro:计算二分类metrics的均值
recall_score(y_true,y_pred,average='macro') # 0.5
# micro:每个类的metrics上的权重及因子进行求和,来计算整个份额。
recall_score(y_true,y_pred,average='micro')  # 0.6
# weighted:计算二分类metrics的平均,通过在每个类的score上进行加权实现。
recall_score(y_true,y_pred,average='weighted')  # 0.6
# average=None将返回一个数组,它包含了每个类的得分.
recall_score(y_true,y_pred,average=None)  # array([1. , 0.5 , 0.])

3. roc_curve、auc、roc_auc_score

roc_curveauc

sklearn.metrics.roc_curve(y_true,y_score, pos_label=None, sample_weight=None, drop_intermediate=True)

  • 函数返回这三个变量:fpr, tpr,和 阈值thresholds; (在对应阈值下的fpr,tpr)

sklearn.metrics.auc(x, y, reorder=False)

  • 计算AUC值,其中x,y分别为数组形式,根据(xi,yi)在坐标上的点,生成的曲线,然后计算AUC值;
import numpy as np
from sklearn.metrics import roc_curve

y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8]) # “Score”表示每个测试样本属于正样本的概率。
fpr, tpr, thresholds = roc_curve(y, scores, pos_label=2)
print(fpr,tpr, thresholds) # [0.  0.  0.5 0.5 1. ] [0.  0.5 0.5 1.  1. ] [1.8  0.8  0.4  0.35 0.1 ]


from sklearn.metrics import auc 
auc(fpr, tpr)  # 0.75 

roc_auc_score
sklearn.metrics.roc_auc_score(y_true, y_score, average='macro', sample_weight=None)

  • 直接根据真实值(必须是二值)、预测值(可以是0/1,也可以是proba值)直接计算出auc值
from sklearn.metrics import roc_auc_score
y_true = np.array([0,0,1,1])
y_score = np.array([0.1, 0.4, 0.35, 0.8])
roc_auc_score(y_true, y_score)

4. mean_squared_error

MSE

sklearn.metrics.mean_squared_error(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average', squared=True)

from sklearn.metrics import mean_squared_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]

MSE = mean_squared_error(y_true, y_pred) # 0.375
RMSE = mean_squared_error(y_true, y_pred)**0.5  # 0.6123724356957945

5. mean_absolute_error

MAE

sklearn.metrics.mean_absolute_error(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average')

from sklearn.metrics import mean_absolute_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
mean_absolute_error(y_true, y_pred)  # 0.5

参考链接
[1]: https://blog.csdn.net/u013385925/article/details/80385873
[2]: https://www.zhihu.com/question/23700474
[3]: sklearn_API

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值