欢迎访问 生活随笔!

尊龙游戏旗舰厅官网

当前位置: 尊龙游戏旗舰厅官网 > 编程资源 > 编程问答 >内容正文

编程问答

sklearn模型预测性能评估(二) -尊龙游戏旗舰厅官网

发布时间:2025/1/21 编程问答 18 豆豆
尊龙游戏旗舰厅官网 收集整理的这篇文章主要介绍了 sklearn模型预测性能评估(二) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

1.1 分类器性能度量

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

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

  • metrics.precision_recall_curve(y_true,probas_pred)在不同概率阈值下计算precision-recall形成的曲线。
  • metrics.roc_curve(y_true, y_score, pos_label=none, sample_weight=none,drop_intermediate=true) 计算roc曲线。
  • 1.3用于二元多标签分类问题的评估指标

  • metrics.average_precision_score(y_true, y_score, average="macro", pos_label=1,sample_weight=none)
    计算预测得分的平均精度(map)
  • 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
    ci,jc_{i, j}ci,j实际是i类被分类为j类的数量
    hinge_loss(y_true, pred_decision, labels=none, sample_weight=none) 计算hinge loss
    hinge loss 算法参考

    1.4.2 多分类

  • accuracy_score(y_true, y_pred, normalize=true, sample_weight=none):
    参数normalize为true,返回小数(float),否则返回分类正确的个数(int)
  • 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 如何将二元分类任务扩展到多类或者多标签任务中

  • 将多类任务划分为多个二分类任务,并对数据集做相应划分
  • 计划二元分类的评价指标,将子分类的分类结果做平均
  • 有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检测概率,分母是实际样本中正样本的数量。tpr=tpptpr = \frac{tp}{p}tpr=ptpp是训练样本中正样本的数量
    • fpr
      false positive rate,假阳率,fall out, probability of false alarm(虚警率)。分母是实际样本中负样本的数量
      fpr=fpnfpr = \frac{fp}{n}fpr=nfp
    • precisionf
      精确度。分母是所有预测为正样本的数量。被挑出的正样本中,真是标签为正所占的比例。
      precision=tppredictedpositiveprecision= \frac{tp }{predicted\ positive}precision=predicted positivetp
    • accuracy
      准确率。所有样本分类正确的概率
      accuracy=tp tnp naccuracy= \frac{tp tn }{p n}accuracy=pntptn
    • f1_score 综合评价指标
      f1=21precision 1recall=2∗precision∗recallprecision recallf_{1} = \frac{2}{\frac{1}{precision} \frac{1}{recall}}=\frac{2*precision*recall}{precision recall}f1=precision1recall12=precisionrecall2precisionrecall
    • fbeta_score
      fbeta_score在f1_score的基础上添加了调节参数betabetabeta
      fβ=(1 β2)precision∗recallβ2∗precision recallf_{\beta}=(1 \beta^{2})\frac{precision*recall}{\beta^{2}*precision recall}fβ=(1β2)β2precisionrecallprecisionrecall
      β=1\beta=1β=1fβf_{\beta}fβ=f1f_{1}f1;
      β\betaβ越小,precision的作用越大;
      β\betaβ越大,recall的作用越大;
    • mcc

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

    roc曲线描述了在不同阈值下tpr随fpr变化的情况。roc曲线以fpr为x轴,以tpr为y轴.

    • 点(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曲线怎么绘制(连续分布)

    连续分布的tpr和fpr的计算.
    t是选定的分割阈值
    fpr=∫t∞fn(t)d(t)fpr = \int_{t}^{\infin}f_n(t)d(t)fpr=tfn(t)d(t)
    tpr=∫t∞fp(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))=max(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))=log(1 e−y∗f(x))l(y,f(x))=log(1 e^{-y*f(x)})l(y,f(x))=log(1eyf(x))
    • 对数损失或交叉熵损失
      l(y,f(x))=−σylog⁡(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方式编码标签,yi,k=1y_{i,k}=1yi,k=1表示第iii个样本是第kkk类。每个样本标签都是一个one-hot向量,该向量中只有一个元素为1。n个样本的标签矩阵yyy就是一个n∗kn*knk的矩阵

    分类器预测每个样本的属于每个类别的概率,预测矩阵yyy也是一个n∗kn*knk的矩阵

    l(y,y^)=−σi=0n−1σk=0k−1yi,klog⁡y^i,kl(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-类别数。yi,ky_{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损失相同
    • 在多标签任务中,汉明损失是根据标签类别计算的
      lhamming(y,y^)=1nlabelsσj=0nlabels−1i(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')
    explained_variance_score(y,y^)=1−var(y,y^)vary^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')
    mean_absolute_error(y,y^)=1nsamplesσi=1n(∣yi−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')
    mean_absolute_error(y,y^)=1nsamplesσi=1n(yi−y^i)2mean\_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 r2scorer^{2}scorer2score

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

    r2(y,y^)=1−σi=1nsamples(yi−y^i)2σi=1nsamples(yi−yiˉ)2r^{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
    r2scorer^{2}scorer2score表征模型对未来样本预测能力

    用于回归问题
    决定系数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)

    median_absolute_error(y,y^)=median(∣y1−y^1∣ ∣y2−y^2∣ ... ∣yn−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^1y2y^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)和r2scorer^{2}scorer2score还可以接受variance_weighted作为multi_output的参数,根据预测目标的方差对相应的回归目标的预测得分进行加权

    总结

    以上是尊龙游戏旗舰厅官网为你收集整理的sklearn模型预测性能评估(二)的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得尊龙游戏旗舰厅官网网站内容还不错,欢迎将尊龙游戏旗舰厅官网推荐给好友。

    网站地图