sklearn模型预测性能评估(二)

1. 使用sklearn.metric包中的性能度量函数

在这里插入图片描述

1.1 分类器性能度量

  • 精度-召回率-F度量
  • 损失函数
  • 接收机操作曲线

1.2 只限于二元单标签分类问题的评估指标

  1. metrics.precision_recall_curve(y_true,probas_pred)在不同概率阈值下计算precision-recall形成的曲线。
  2. metrics.roc_curve(y_true, y_score, pos_label=None, sample_weight=None,drop_intermediate=True) 计算ROC曲线。

1.3用于二元多标签分类问题的评估指标

  1. metrics.average_precision_score(y_true, y_score, average="macro", pos_label=1,sample_weight=None)
    计算预测得分的平均精度(mAP)
  2. metrics.roc_auc_score(y_true, y_score, average="macro", sample_weight=None, max_fpr=None):
    计算预测得分的AUC值。

1.4用于多分类问题的评估指标

####1.4.1 多分类单标签
confusion_matrix(y_true, y_pred, labels=None, sample_weight=None) 计算混淆矩阵
返回值
C : array, shape = [n_classes, n_classes] Confusion matrix
C i , j C_{i, j} Ci,j实际是i类被分类为j类的数量
hinge_loss(y_true, pred_decision, labels=None, sample_weight=None) 计算hinge loss
hinge loss 算法参考

1.4.2 多分类
  1. accuracy_score(y_true, y_pred, normalize=True, sample_weight=None):
    参数normalize为true,返回小数(float),否则返回分类正确的个数(int)
  2. classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False)
    返回值
    report:string / dict
    返回每个类别的precision, recall, F1 score
    如果output_dict=True,字典结构如下:
{'label 1': {'precision':0.5,
                         'recall':1.0,
                         'f1-score':0.67,
                         'support':1},
             'label 2': { ... },
              ...
            }

output_dict 默认是None

r = metrics.classification_report(y_true,y_pred, labels=["ant", "bird", "cat"])

在这里插入图片描述
3. 其他一些

metrics.f1_score()
metrics.fbeta_score()
metrics.hamming_loss()
metrics.log_loss()
metrics.zero_one_loss()

metrics.precision_score()
metrics.recall_score()

1.5 如何将二元分类任务扩展到多类或者多标签任务中

  1. 将多类任务划分为多个二分类任务,并对数据集做相应划分
  2. 计划二元分类的评价指标,将子分类的分类结果做平均
  3. 有5中不同的平均方式macro,micro,weighted,samples,None
    macro(宏平均)与micro(微平均)的区别
    average=None 不平均,输出列表,每个类别的结果。
    在这里插入图片描述
    在这里插入图片描述

Macro-averaging与Micro-averaging的不同之处在于:Macro-averaging赋予每个类相同的权重,然而Micro-averaging赋予每个样本决策相同的权重。

1.6 分类器性能评估指标相应函数

1.6.1 精度-召回率-F度量

precision_recall_curve 二分类
多分类

metrics.precision_score()
metrics.recall_score()
metrics.average_precision_score()
metrics.f1_score()
metrics.fbeta_score()
metrics.precision_recall_fscore_support()
1.6.2 损失函数
metrics.hamming_loss()
metrics.log_loss()
metrics.zero_one_loss()
1.6.3 接收机操作曲线

接收机操作曲线(Reciver operating curve) 二分类
MCC指标(Matthews Correlation Coefficient) 二分类
杰拉德系数(Jaccard Similarity Coefficient)多分类

2 sklearn 分类器性能指标

2.1 准确率

accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)
参数normalize为true,返回小数(float),否则返回分类正确的个数(int)

2.2 混淆矩阵

混淆矩阵(confusion matrix),也成为错误矩阵(error matrix),每一行表示实际为实际样本个数,每一列为预测样本个数。所有正确分类都在对角线上。
在这里插入图片描述
当类别不平衡时,通过accuracy作为衡量分类器的指标不可靠。只依据accuracy评判,容易产生误导人的结果。通过混淆矩阵计算precision(精确度)和recall(召回率、查全率)
根据上面的混淆矩阵,得出cat类别的tabele of confusion
在这里插入图片描述
confusion_matrix(y_true, y_pred, labels=None, sample_weight=None) 计算混淆矩阵、
返回C
labels=None返回矩阵的类别按顺序排列

y_pred = [1,1,1,2,0,0,1]
y_true = [1,1,1,2,1,0,1]
c = metrics.confusion_matrix(y_true,y_pred)
print(c)

在这里插入图片描述
带标签形式

y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]
y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]
c =metrics.confusion_matrix(y_true, y_pred, labels=["ant", "bird", "cat"])

在这里插入图片描述

2.3 精确率、召回率、F1_score、Fbeta_score

table of confusion
在这里插入图片描述

  • TPR
    True Positive Rate,正阳率,也叫Recall召回率,sensitivity敏感度,probability of detection检测概率,分母是实际样本中正样本的数量。 T P R = T P P TPR = \frac{TP}{P} TPR=PTPP是训练样本中正样本的数量
  • FPR
    False Positive Rate,假阳率,fall out, probability of false alarm(虚警率)。分母是实际样本中负样本的数量
    F P R = F P N FPR = \frac{FP}{N} FPR=NFP
  • PrecisionF
    精确度。分母是所有预测为正样本的数量。被挑出的正样本中,真是标签为正所占的比例。
    P r e c i s i o n = T P P r e d i c t e d   p o s i t i v e Precision= \frac{TP }{Predicted\ positive} Precision=Predicted positiveTP
  • Accuracy
    准确率。所有样本分类正确的概率
    A c c u r a c y = T P + T N P + N Accuracy= \frac{TP+TN }{P+N} Accuracy=P+NTP+TN
  • F1_score 综合评价指标
    f 1 = 2 1 p r e c i s i o n + 1 R e c a l l = 2 ∗ p r e c i s i o n ∗ R e c a l l p r e c i s i o n + R e c a l l f_{1} = \frac{2}{\frac{1}{precision}+\frac{1}{Recall}}=\frac{2*precision*Recall}{precision+Recall} f1=precision1+Recall12=precision+Recall2precisionRecall
  • Fbeta_score
    Fbeta_score在F1_score的基础上添加了调节参数 b e t a beta beta
    f β = ( 1 + β 2 ) p r e c i s i o n ∗ R e c a l l β 2 ∗ p r e c i s i o n + R e c a l l f_{\beta}=(1+\beta^{2})\frac{precision*Recall}{\beta^{2}*precision+Recall} fβ=(1+β2)β2precision+RecallprecisionRecall
    β = 1 \beta=1 β=1 f β f_{\beta} fβ= f 1 f_{1} f1;
    β \beta β越小,precision的作用越大;
    β \beta β越大,Recall的作用越大;
  • MCC
    在这里插入图片描述

2.4 分类器评估标准之ROC曲线

ROC曲线描述了在不同阈值下TPR随FPR变化的情况。ROC曲线以FPRX轴,以TPRY轴.

  • 点(0,1) 100%灵敏度,0%的虚警率,完美分类器。
  • 如果以对角线划分ROC空间,对角线以上的是好的分类器,对角线是坏分类器。在对角线是随机的结果。一个坏的分类器可以通过逆转得到一个好的分类器。
  • 下图中的A、B、C三个分类器。
  • A 虚警率低、敏感度高,分类效果好
  • B 随机分类器
  • C 虚警率高,灵敏度低,坏的分类器
  • C ′ C^{'} C C的逆转分类器,虚警率低,灵敏度高,好分类器。
    在这里插入图片描述
2.4.1 ROC曲线怎么绘制

计算在不同阈值下对应的FPR和TPR

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

返回值
fpr、tpr
threshold

y_true = np.array([1, 1, 2, 2])
y_pred = np.array([0.1, 0.4, 0.35, 0.8])
fpr,tpr,threshold =metrics.roc_curve(y_true,y_pred,pos_label=2)
print('threshold',threshold)
print('fpr',fpr)
print('tpr',tpr)
threshold [1.8  0.8  0.4  0.35 0.1 ]
fpr [0.  0.  0.5 0.5 1. ]
tpr [0.  0.5 0.5 1.  1. ]
2.4.2 ROC曲线怎么绘制(连续分布)

连续分布的tprfpr的计算.
T是选定的分割阈值
f p r = ∫ T ∞ f N ( t ) d ( t ) fpr = \int_{T}^{\infin}f_N(t)d(t) fpr=TfN(t)d(t)
t p r = ∫ T ∞ f P ( t ) d ( t ) tpr = \int_{T}^{\infin}f_P(t)d(t) tpr=TfP(t)d(t)
在这里插入图片描述

3 sklearn中分类器评估方法

损失函数用来度量模型预测输出与真实标签间不一致的程度。

  • 0-1损失
    L ( y , f ( x ) ) = { 0 ( y = f ( x ) ) 1 ( y ≠ f ( x ) ) L(y,f(x))=\left\{ \begin{aligned} 0(y=f(x)) \\ 1(y\neq f(x)) \\ \end{aligned} \right. L(y,f(x))={0(y=f(x))1(y=f(x))
  • hinge 损失
    L ( y , f ( x ) ) = m a x ( 0 , 1 − y ∗ f ( x ) ) L(y,f(x))=max(0,1-y*f(x)) L(y,f(x))=max(0,1yf(x))
    y-标签值,f(x) - 预测值
  • Logistic 损失
    L ( y , f ( x ) ) = l o g ( 1 + e − y ∗ f ( x ) ) L(y,f(x))=log(1+e^{-y*f(x)}) L(y,f(x))=log(1+eyf(x))
  • 对数损失或交叉熵损失
    L ( y , f ( x ) ) = − Σ y log ⁡ ( f ( x ) ) L(y,f(x))=-\Sigma y\log(f(x)) L(y,f(x))=Σylog(f(x))

3.1 对数损失或交叉熵损失

在多元分类任务中,假定有K个类别,则类标签集合就是 { 1 , 2 , . . . , K } \{1,2,...,K\} {1,2,...,K}。用one-hot方式编码标签, y i , k = 1 y_{i,k}=1 yi,k=1表示第 i i i个样本是第 k k k类。每个样本标签都是一个one-hot向量,该向量中只有一个元素为1。N个样本的标签矩阵 Y Y Y就是一个 N ∗ K N*K NK的矩阵
在这里插入图片描述
分类器预测每个样本的属于每个类别的概率,预测矩阵 Y Y Y也是一个 N ∗ K N*K NK的矩阵
在这里插入图片描述
L ( y , y ^ ) = − Σ i = 0 N − 1 Σ k = 0 K − 1 y i , k log ⁡ y ^ i , k L(y,\hat y )=-\Sigma_{i=0}^{N-1}\Sigma_{k=0}^{K-1}y_{i,k}\log\hat y_{i,k} L(y,y^)=Σi=0N1Σk=0K1yi,klogy^i,k
N-样本总数,K-类别数。 y i , k y_{i,k} yi,k标签值, y ^ i , k \hat y_{i,k} y^i,k预测值。

y_true=[0,0,1,1]
y_pred = [[0.2,0.8],[0.3,0.7],[0.2,0.8],[0.5,0.5]]
log_loss = metrics.log_loss(y_true,y_pred)

log_loss函数会将标签转成one-hot编码

3.2 汉明损失

  • 在多分类任务中,汉明损失与0-1损失相同
  • 在多标签任务中,汉明损失是根据标签类别计算的
    L H a m m i n g ( y , y ^ ) = 1 n l a b e l s Σ j = 0 n l a b e l s − 1 I ( y ≠ y ^ ) L_{Hamming}(y,\hat y)=\frac{1}{n_{labels}}\Sigma_{j=0}^{n_{labels}-1}I(y\neq\hat y) LHamming(y,y^)=nlabels1Σj=0nlabels1I(y=y^)

4. sklearn中回归器评估方法

4.1 解释方差(Explained Variance Score)

explained_variance_score(y_true, y_pred,sample_weight=None,multioutput='uniform_average')
e x p l a i n e d _ v a r i a n c e _ s c o r e ( y , y ^ ) = 1 − v a r ( y , y ^ ) v a r y ^ explained\_variance\_score(y,\hat y)=1-\frac{var(y,\hat y)}{var{\hat y }} explained_variance_score(y,y^)=1vary^var(y,y^)

4.2 平均绝对误差(MAE)

mean_absolute_error(y_true, y_pred, sample_weight=None, multioutput='uniform_average')
m e a n _ a b s o l u t e _ e r r o r ( y , y ^ ) = 1 n s a m p l e s Σ i = 1 n ( ∣ y i − y ^ i ∣ ) mean\_absolute\_error(y,\hat y)=\frac{1}{n_{samples}}\Sigma_{i=1}^{n}(\left |y_{i}-\hat y_{i}\right|) mean_absolute_error(y,y^)=nsamples1Σi=1n(yiy^i)

4.3 平均平方误差(Mean Squared Error)

mean_squared_error(y_true, y_pred, sample_weight=None, multioutput='uniform_average')
m e a n _ a b s o l u t e _ e r r o r ( y , y ^ ) = 1 n s a m p l e s Σ i = 1 n ( y i − y ^ i ) 2 mean\_absolute\_error(y,\hat y)=\frac{1}{n_{samples}}\Sigma_{i=1}^{n}(y_{i}-\hat y_{i})^{2} mean_absolute_error(y,y^)=nsamples1Σi=1n(yiy^i)2

4.4 r 2 s c o r e r^{2}score r2score

r2_score(y_true, y_pred, sample_weight=None, multioutput="uniform_average")

R 2 ( y , y ^ ) = 1 − Σ i = 1 n s a m p l e s ( y i − y ^ i ) 2 Σ i = 1 n s a m p l e s ( y i − y i ˉ ) 2 R^{2}(y,\hat y)=1-\frac{\Sigma_{i=1}^{n_{samples}}(y_{i}-\hat y_{i})^{2}}{\Sigma_{i=1}^{n_{samples}}(y_{i}-\bar{y_{i}})^{2}} R2(y,y^)=1Σi=1nsamples(yiyiˉ)2Σi=1nsamples(yiy^i)2
r 2 s c o r e r^{2}score r2score表征模型对未来样本预测能力

用于回归问题
决定系数R2 ,衡量模型预测能力好坏(真实和预测的 相关程度百分比)
Y_true是真实的数据,y_pred是预测的数据。

使用r2_score()方法可以看到,预测数据和真实数据越接近,R2越大。当然最大值是 1 一个模型的R2
值为0还不如直接用平均值来预测效果好;而一个R2值为1的模型则可以对目标变量进行完美的预测。从0至1之间的数值,则表示该模型中目标变量中有百分之多少能够用特征来解释。模型也可能出现负值的R2,这种情况下模型所做预测有时会比直接计算目标变量的平均值差很多。
参考

在这里插入图片描述
参考

4.5 平均中值误差(Median Absolute Error)

对于异常值有很强的鲁棒性

median_absolute_error(y_true, y_pred)

m e d i a n _ a b s o l u t e _ e r r o r ( y , y ^ ) = m e d i a n ( ∣ y 1 − y ^ 1 ∣ + ∣ y 2 − y ^ 2 ∣ + . . . + ∣ y n − y ^ n ∣ ) median\_absolute\_error(y,\hat y)=median(\left |y_{1}-\hat y_{1}\right|+\left |y_{2}-\hat y_{2}\right|+...+\left |y_{n}-\hat y_{n}\right|) median_absolute_error(y,y^)=median(y1y^1+y2y^2+...+yny^n)

  • 4.1~4.5都有multi_output参数,用于指定在多目标回归问题中,单个目标获得分以什么样的形式平均起来。
  • 如果传入一个shape为(n_output,)的ndarray,那么ndarray中的每个元素视为对单个预测得分的加权值。
  • 如果multi_output=raw_values,那么所有预测目标的回归损失单独返回到shape为(n_output,)的数组中。n_output——回归变量的个数。
  • 解释方差(Explained Variance Score)和 r 2 s c o r e r^{2}score r2score还可以接受variance_weighted作为multi_output的参数,根据预测目标的方差对相应的回归目标的预测得分进行加权
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值