机器学习sklearn(⼆⼗五):模型评估(五)量化预测的质量(⼆)分类指标分类指标
模块实现了⼏个 loss, score, 和 utility 函数来衡量 classification (分类)性能。某些 metrics (指标)可能需要 positive class (正类),confidence values(置信度值)或binary decisions values (⼆进制决策值)的概率估计。⼤多数的实现允许每个样本通过sample_weight参数为 overall score (总分)提供 weighted contribution (加权贡献)。其中⼀些仅限于⼆分类⽰例:
调⽤功能
(y_true, probas_pred)Compute precision-recall pairs for different probability thresholds
(y_true, y_score[, pos_label, …])Compute Receiver operating characteristic (ROC)
其他也可以在多分类⽰例中运⾏:
调⽤功能
(y1, y2[, labels, weights, …])Cohen’s kappa: a statistic that measures inter-annotator agreement.
(y_true, y_pred[, labels, …])Compute confusion matrix to evaluate the accuracy of a classification
(y_true, pred_decision[, labels, …])Average hinge loss (non-regularized)
(y_true, y_pred[, …])Compute the Matthews correlation coefficient (MCC)
有些还可以在 multilabel ca (多重⽰例)中⼯作:
调⽤功能
(y_true, y_pred[, normalize, …])Accuracy classification score.
(y_true, y_pred[, …])Build a text report showing the main classification metrics
(y_true, y_pred[, labels, …])Compute the F1 score, also known as balanced F-score or F-measure
(y_true, y_pred, beta[, labels, …])Compute the F-beta score
(y_true, y_pred[, labels, …])Compute the average Hamming loss.
(y_true, y_pred[, …])Jaccard similarity coefficient score
(y_true, y_pred[, eps, normalize, …])Log loss, aka logistic loss or cross-entropy loss.
(y_true, y_pred)Compute precision, recall, F-measure and support for each class
(y_true, y_pred[, labels, …])Compute the precision
(y_true, y_pred[, labels, …])Compute the recall
(y_true, y_pred[, normalize, …])Zero-one classification loss.
⼀些通常⽤于 ranking:
调⽤功能
(y_true, y_score[, k])Discounted cumulative gain (DCG) at rank K.
(y_true, y_score[, k])Normalized discounted cumulative gain (NDCG) at rank K.
有些⼯作与 binary 和 multilabel (但不是多类)的问题:
调⽤功能
(y_true, y_score[, …])Compute average precision (AP) from prediction scores
(y_true, y_score[, average, …])Compute Area Under the Curve (AUC) from prediction scores
在以下⼩节中,我们将介绍每个这些功能,前⾯是⼀些关于通⽤ API 和 metric 定义的注释。
1. 从⼆分到多分类和 multilabel
⼀些 metrics 基本上是为 binary classification tasks (⼆分类任务)定义的 (例如 , ) 。在这些情况下,默认情况下仅评估 positive label (正标签),假设默认情况下,positive label (正类)标记为1(尽管可以通过pos_label参数进⾏配置)。
将 binary metric (⼆分指标)扩展为 multiclass (多类)或 multilabel (多标签)问题时,数据将被视为⼆分问题的集合,每个类都有⼀个。然后可以使⽤多种⽅法在整个类中average binary metric calculations (平均⼆分指标计算),每种类在某些情况下可能会有⽤。如果可⽤,您应该使⽤average参数来选择它们。
"macro(宏)"简单地计算 binary metrics (⼆分指标)的平均值,赋予每个类别相同的权重。在不常见的类别重要的问题上,macro-averaging (宏观平均)可能是突出表现的⼀种⼿段。另⼀⽅⾯,所有类别同样重要的假设通常是不真实的,因此 macro-averaging (宏观平均)将过度强调不频繁类的典型的低性能。
"weighted(加权)"通过计算其在真实数据样本中的存在来对每个类的 score 进⾏加权的 binary metrics (⼆分指标)的平均值来计算类不平衡。
"micro(微)"给每个 sample-class pair (样本类对)对 overall metric (总体指数)(sample-class 权重的结果除外)等同的贡献。除了对每个类别的 metric 进⾏求和之外,这个总和构成每个类别度量的 dividends (除数)和 divisors (除数)计算⼀个整体商。在 multilabel ttings (多标签设置)中,Micro-averaging 可能是优先选择的,包括要忽略 majority class (多数类)的 multiclass classification (多类分类)。
"samples(样本)"仅适⽤于 multilabel problems (多标签问题)。它 does not calculate a per-class measure (不计算每个类别的 measure),⽽是计算 evaluation data (评估数据)中的每个样本的 true and predicted class (真实和预测类别)的 metric (指标),并返回 (sample_weight-weighted) 加权平均。
选择average=None将返回⼀个 array 与每个类的 score 。
虽然将 multiclass data (多类数据)提供给 metric ,如 binary targets (⼆分类⽬标),作为 array of class labels (类标签的数组),multilabel data (多标签数据)被指定为indicator matrix(指⽰符矩阵),其中 cell [i, j]具有值 1,如果样本i具有标号j,否则为值 0 。
2. 精确度得分
函数计算 , 正确预测的分数(默认)或计数 (normalize=Fal)。
在 multilabel classification (多标签分类)中,函数返回 subt accuracy(⼦集精度)。如果样本的 entire t of predicted labels (整套预测标签)与真正的标签组合匹配,则⼦集精度为 1.0; 否则为 0.0 。
如果是第个样本的预测值,是相应的真实值,则上的正确预测的分数被定义为
其中是 .
>>> import numpy as np
>>> ics 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=Fal)
甜酒鸡蛋做法
2
In the multilabel ca with binary label indicators(在具有⼆分标签指⽰符的多标签情况下):
义务兵述职报告>>> accuracy_score(np.array([[0, 1], [1, 1]]), np.ones((2, 2)))
0.5
⽰例:
参阅例如使⽤数据集排列的 accuracy score (精度分数)。
3. Balanced accuracy score
此balanced_accuracy_score函数计算 balanced accuracy, 它可以避免在不平衡数据集上作出夸⼤的
性能估计。它是每个类的召回分数的宏观平均,或者,等价地,原始准确度,其中每个样本根据其真实类的样本占⽐率加权。因此,对均衡数据集,该函数的得分与准确率得分是相等的。
在⼆分类情况下, balanced accuracy等价于(true positive rate)和 (真负率:true negative rate)的算术平均值, 或者ROC曲线下具有⼆元预测值的⾯积,⽽不是分数。
如果分类器在两个类上都表现的⼀样好,该函数就会退化为传统的准确率(即正确预测数量除以总的预测数量).
作为对⽐, 如果传统的准确率(conventional accuracy)⽐较好,仅仅是因为分类器利⽤了⼀个不均衡测试集,此时balanced_accuracy将会近似地掉到
得分的范围是0到1, 或者当设置参数adjusted=True 时,得分被缩放到从到1,包括边界的,随机条件下得分为0.
如果yi是第i个样本的真值,并且wi是对应的样本权重,然后我们调整样本权重到:
其中1(x)是,给定样本中,如果是第i个样本的真值,则balanced_accuracy表⽰为:
当设置参数adjusted=True时,balanced_accuracy反映的相对增加,在⼆分类情况下,这也被称为或者informedness
注意:这⾥的multiclass定义似乎是⼆进制分类中使⽤的度量的最合理的扩展,尽管在⽂献中没有达成⼀定的共识:写信结尾
我们定义:来⾃[Mosley2013], [Kelleher2015]和[Guyon2015], [Guyon2015]调整后的版本,以确保随机预测得分为0,完美的预测得分为1 .
如[Mosley2013]所述:计算每个类的精度与召回量之间的最⼩值。然后将这些值平均到类的总数上,以获得平衡的精度。
如[Urbanowicz2015]所述:计算每个类的敏感性和特异性的平均值,然后在总类数上取平均值。
参考资料:
[Guyon2015] (1, 2) I. Guyon, K. Bennett, G. Cawley, H.J. Escalante, S. Escalera, T.K. Ho, N. Macià, B. Ray, M. Saeed, A.R. Statnikov, E. Viegas, , IJCNN 2015.
[Mosley2013] (1, 2) L. Mosley, , IJCV 2010.
[Kelleher2015] John. D. Kelleher, Brian Mac Namee, Aoife D’Arcy, , 2015.
[Urbanowicz2015] Urbanowicz R.J., Moore, J.H. , Evol. Intel. (2015) 8: 89.
4. Cohen’s kappa
函数计算 statistic(统计)。这个 measure (措施)旨在⽐较不同⼈⼯标注者的标签,⽽不是 classifier (分类器)与 ground truth (真实数据)。
kappa score (参阅 docstring )是 -1 和 1 之间的数字。 .8 以上的 scores 通常被认为是很好的 agreement (协议); 0 或者更低表⽰没有 agreement (实际上是 random labels (随机标签))。
Kappa scores 可以计算 binary or multiclass (⼆分或者多分类)问题,但不能⽤于 multilabel problems (多标签问题)(除了⼿动计算 per-label score (每个标签分数)),⽽不是两个以上的 annotators (注释器)。
>>> ics import cohen_kappa_score
>>> y_true = [2, 0, 2, 2, 0, 1]
>>> y_pred = [0, 0, 2, 2, 0, 2]
>>> cohen_kappa_score(y_true, y_pred)
0.4285714285714286
5. 混淆矩阵
函数通过计算来 evaluates classification accuracy (评估分类的准确性)。
根据定义,confusion matrix (混淆矩阵)中的 entry(条⽬),是实际上在 group 中的 obrvations (观察数),但预测在 group 中。这⾥是⼀个⽰例:
>>> ics import confusion_matrix
>>> y_true = [2, 0, 2, 2, 0, 1]
>>> y_pred = [0, 0, 2, 2, 0, 2]
>>> confusion_matrix(y_true, y_pred)
array([[2, 0, 0],
[0, 0, 1],
[1, 0, 2]])
这是⼀个这样的 confusion matrix (混淆矩阵)的可视化表⽰(这个数字来⾃于):
对于 binary problems (⼆分类问题),我们可以得到 true negatives(真 negatives), fal positives(假 positives), fal negatives(假 negatives)和 true positives(真positives)的数量如下:
>>> y_true = [0, 0, 0, 1, 1, 1, 1, 1]
>>> y_pred = [0, 1, 0, 1, 0, 1, 0, 1]
>>> tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
>>> tn, fp, fn, tp
(2, 1, 2, 3)
⽰例:
参阅例如使⽤ confusion matrix (混淆矩阵)来评估 classifier (分类器)的输出质量。
参阅例如使⽤ confusion matrix (混淆矩阵)来分类⼿写数字。
参阅例如使⽤ confusion matrix (混淆矩阵)对⽂本⽂档进⾏分类。
6. 分类报告
函数构建⼀个显⽰ main classification metrics (主分类指标)的⽂本报告。这是⼀个⼩⽰例,其中包含⾃定义的target_names和 inferred labels (推断标签):
>>> ics import classification_report
>>> y_true = [0, 1, 2, 2, 0]
>>> y_pred = [0, 0, 2, 1, 0]
>>> target_names = ['class 0', 'class 1', 'class 2']
>>> print(classification_report(y_true, y_pred, target_names=target_names))
precision recall f1-score support
class 0 0.67 1.00 0.80 2
class 1 0.00 0.00 0.00 1
class 2 1.00 0.50 0.67 2
accuracy 0.60 5
macro avg 0.56 0.50 0.49 5
weighted avg 0.67 0.60 0.59 5
⽰例:
参阅作为⼿写数字的分类报告的使⽤⽰例。
参阅作为⽂本⽂档的分类报告使⽤的⽰例。
情感句子参阅例如使⽤ grid arch with nested cross-validation (嵌套交叉验证进⾏⽹格搜索)的分类报告。
7. 汉明损失
计算两组样本之间的 average Hamming loss (平均汉明损失)或者。
如果是给定样本的第个标签的预测值,则是相应的真实值,⽽是 class or labels (类或者标签)的数量,则两个样本之间的 Hamming loss (汉明损失)定义为:
其中是 .
>>> ics import hamming_loss
>>> y_pred = [1, 2, 3, 4]
>>> y_true = [2, 2, 3, 4]
>>> hamming_loss(y_true, y_pred)
0.25
在具有 binary label indicators (⼆分标签指⽰符)的 multilabel (多标签)情况下:
>>> hamming_loss(np.array([[0, 1], [1, 1]]), np.zeros((2, 2)))
0.75
注意
在 multiclass classification (多类分类)中, Hamming loss (汉明损失)对应于y_true和y_pred之间的 Hamming distance(汉明距离),它类似于函数。然⽽, zero-one loss penalizes (0-1损失惩罚)不严格匹配真实集合的预测集,Hamming loss (汉明损失)惩罚 individual labels (独⽴标签)。因此,Hamming loss(汉明损失)⾼于 zero-one loss(0-1 损失),总是在 0 和 1 之间,包括 0 和 1;预测真正的标签的正确的 subt or supert (⼦集或超集)将给出 0 和 1 之间的 Hamming loss(汉明损失)。
8. 精准,召回和 F-measures
直观地来理解,是 the ability of the classifier not to label as positive a sample that is negative (classifier (分类器)的标签不能被标记为正的样本为负的能⼒),并且是classifier (分类器)查找所有 positive samples (正样本)的能⼒。
(和 measures) 可以解释为 precision (精度)和 recall (召回)的 weighted harmonic mean (加权调和平均值)。 measure 值达到其最佳值 1 ,其最差分数为 0 。与, 和是等价的, recall (召回)和 precision (精度)同样重要。
通过改变 decision threshold (决策阈值)从 ground truth label (被标记的真实数据标签)和 score given by the classifier (分类器给出的分数)计算 precision-recall curve (精确召回曲线)。
函数根据 prediction scores (预测分数)计算出 average precision (AP)(平均精度)。该分数对应于 precision-recall curve (精确召回曲线)下的⾯积。该值在 0 和 1 之间,并且越⾼越好。通过 random predictions (随机预测), AP 是 fraction of positive samples (正样本的分数)。
其中Pn和Rn是第n个阈值处的precision和recall。对于随机预测,AP是正样本的⽐例。
参考⽂献 [Manning2008] 和 [Everingham2010] 提出了AP的两种可替代变体对precision-recall曲线进⾏内插。当前,函数average_precision_score还没有实现任何具备内插的变体版本。参考⽂献 [Davis2006] 和 [Flach2015] 描述了为什么precision-recall曲线上的点的线性内插提供了⼀个过于乐观(overly-optimistic)的分类器性能度量。在函数auc中使⽤梯形规则(trapezoidal rule)计算曲线下⾯积的时候,这个线性内插(linear interpolation)会被使⽤。
⼏个函数可以让您实现 analyze the precision (分析精度),recall(召回)和 F-measures 得分:
调⽤功能
(y_true, y_score[, …])Compute average precision (AP) from prediction scores
(y_true, y_pred[, labels, …])Compute the F1 score, also known as balanced F-score or F-measure
我的童年作文400字(y_true, y_pred, beta[, labels, …])Compute the F-beta score
(y_true, probas_pred)Compute precision-recall pairs for different probability thresholds
(y_true, y_pred)Compute precision, recall, F-measure and support for each class
(y_true, y_pred[, labels, …])Compute the precision
(y_true, y_pred[, labels, …])Compute the recall
请注意,函数仅限于 binary ca (⼆分情况)。函数只适⽤于 binary classification and multilabel indicator format (⼆分类和多标签指⽰器格式)。
⽰例:
参阅例如⽤于分类⽂本⽂档的⽤法。
参阅例如和⽤于 using grid arch with nested cross-validation (使⽤嵌套交叉验证的⽹格搜索)来估计参数。
参阅例如⽤于 evaluate classifier output quality(评估分类器输出质量)。
参考资料
[Manning2008] C.D. Manning, P. Raghavan, H. Schütze, , 2008.
[Everingham2010] M. Everingham, L. Van Gool, C.K.I. Williams, J. Winn, A. Zisrman, , IJCV 2010.
[Davis2006] J. Davis, M. Goadrich, , ICML 2006.
[Flach2015] P.A. Flach, M. Kull, , NIPS 2015.
8.1. ⼆分类
在⼆分类任务中,术语 ‘’positive(正)’’ 和 ‘’negative(负)’’ 是指 classifier’s prediction (分类器的预测),术语 ‘’true(真)’’ 和 ‘’fal(假)’’ 是指该预测是否对应于external judgment (外部判断)(有时被称为 ‘’obrvation(观测值)’‘)。给出这些定义,我们可以指定下表:
Actual class (obrvation)Actual class (obrvation)
学银Predicted class (expectation)tp (true positive) Correct result fp (fal positive) Unexpected result
Predicted class (expectation)fn (fal negative) Missing result tn (true negative) Correct abnce of result
在这种情况下,我们可以定义 precision(精度), recall(召回)和 F-measure 的概念:
以下是 binary classification (⼆分类)中的⼀些⼩⽰例:
>>> from sklearn import metrics
>>> y_pred = [0, 1, 0, 0]
>>> y_true = [0, 1, 0, 1]
>>> metrics.precision_score(y_true, y_pred)
1.0
>>> all_score(y_true, y_pred)
0.5
>>> metrics.f1_score(y_true, y_pred)
>>> metrics.fbeta_score(y_true, y_pred, beta=0.5)
>>> metrics.fbeta_score(y_true, y_pred, beta=1)
>>> metrics.fbeta_score(y_true, y_pred, beta=2)
>>> metrics.precision_recall_fscore_support(y_true, y_pred, beta=0.5)
(array([, 1. ]), array([1. , 0.5]), array([, ]), array([2, 2]))
>>> import numpy as np
>>> ics import precision_recall_curve
>>> ics import average_precision_score
>>> y_true = np.array([0, 0, 1, 1])
>>> y_scores = np.array([0.1, 0.4, 0.35, 0.8])
>>> precision, recall, threshold = precision_recall_curve(y_true, y_scores)
>>> precision
array([, 0.5 , 1. , 1. ])
>>> recall
array([1. , 0.5, 0.5, 0. ])
>>> threshold
array([0.35, 0.4 , 0.8 ])
>>> average_precision_score(y_true, y_scores)
8.2. 多类和多标签分类
在 multiclass and multilabel classification task(多类和多标签分类任务)中,precision(精度), recall(召回), and F-measures 的概念可以独⽴地应⽤于每个标签。有以下⼏种⽅法 combine results across labels (将结果跨越标签组合),由average参数指定为(仅⽤于 multilabel), , , , 和函数,如上所述。请注意,对于在包含所有标签的多类
设置中进⾏ “micro”-averaging (”微”平均),将产⽣相等的 precision(精度), recall(召回)和,
⽽ “weighted(加权)” averaging(平均)可能会产⽣ precision(精度)和 recall(召回)之间的 F-score 。
为了使这⼀点更加明确,请考虑以下 notation (符号):
predicted(预测)对
true(真)对
labels 集合
samples 集合
的⼦集与样本, 即
的⼦集与 label
类似的, 和是的⼦集
(Conventions (公约)在处理有所不同; 这个实现使⽤, 与类似.)
然后将 metrics (指标)定义为:
average Precision Recall
"micro"
"samples"
"macro"
"weighted"
None
>>> from sklearn import metrics
>>> y_true = [0, 1, 2, 0, 1, 2]
>>> y_pred = [0, 2, 1, 0, 0, 1]
>>> metrics.precision_score(y_true, y_pred, average='macro')
>>> all_score(y_true, y_pred, average='micro')
...
>>> metrics.f1_score(y_true, y_pred, average='weighted')
>>> metrics.fbeta_score(y_true, y_pred, average='macro', beta=0.5)
很高兴遇见你英文
>>> metrics.precision_recall_fscore_support(y_true, y_pred, beta=0.5, average=None)
.
..
(array([, 0. , 0. ]), array([1., 0., 0.]), array([, 0. , 0. ]), array([2, 2, 2]...))
For multiclass classification with a “negative class”, it is possible to exclude some labels:
>>> all_score(y_true, y_pred, labels=[1, 2], average='micro')
... # excluding 0, no labels were correctly recalled
0.0
Similarly, labels not prent in the data sample may be accounted for in macro-averaging.
>>> metrics.precision_score(y_true, y_pred, labels=[0, 1, 2, 3], average='macro')
...
9. Jaccard 相似系数 score
函数计算 pairs of label ts (标签组对)之间的也称作 Jaccard index 的平均值(默认)或总和。
将第个样本的 Jaccard similarity coefficient 与被标注过的真实数据的标签集和 predicted label t (预测标签集):定义为
jaccard_score就像precision_recall_fscore_support中的设定⽅法,本⾝应⽤于⼆分类,并通过使⽤从⼆分类扩展到多标记和多类(见)。
⼆分类时:
>>> import numpy as np
>>> ics import jaccard_score
>>> y_true = np.array([[0, 1, 1],
... [1, 1, 0]])
>>> y_pred = np.array([[1, 1, 1],
... [1, 0, 0]])
>>> jaccard_score(y_true[0], y_pred[0])
在具有⼆分类标签指⽰符的多标签⽰例中:
>>> jaccard_score(y_true, y_pred, average='samples')
>>> jaccard_score(y_true, y_pred, average='macro')
>>> jaccard_score(y_true, y_pred, average=None)
array([0.5, 0.5, 1. ])
将多类问题⼆进制化并像对应的多标签问题⼀样处理:陈宏一
>>> y_pred = [0, 2, 1, 2]
>>> y_true = [0, 1, 2, 2]
>>> jaccard_score(y_true, y_pred, average=None)
...
array([1. , 0. , ])
>>> jaccard_score(y_true, y_pred, average='macro')
>>> jaccard_score(y_true, y_pred, average='micro')
10. Hinge loss
函数使⽤计算模型和数据之间的 average distance (平均距离),这是⼀种只考虑 prediction errors
(预测误差)的 one-sided metric (单向指标)。(Hinge loss ⽤于最⼤边界分类器,如⽀持向量机)
如果标签⽤ +1 和 -1 编码,则: 是真实值,并且是由decision_function输出的 predicted decisions (预测决策),则 hinge loss 定义为:
如果有两个以上的标签,由于 Crammer & Singer ⽽使⽤了 multiclass variant (多类型变体)。是描述它的论⽂。
如果是真实标签的 predicted decision (预测决策),并且是所有其他标签的预测决策的最⼤值,其中预测决策由 decision function (决策函数)输出,则 multiclass hinge loss 定义如下:
这⾥是⼀个⼩⽰例,演⽰了在 binary class (⼆类)问题中使⽤了具有 svm classifier (svm 的分类器)的函数:
>>> from sklearn import svm
>>> ics import hinge_loss
>>> X = [[0], [1]]
>>> y = [-1, 1]
>>> est = svm.LinearSVC(random_state=0)
>>> est.fit(X, y)
LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,
intercept_scaling=1, loss='squared_hinge', max_iter=1000,
multi_class='ovr', penalty='l2', random_state=0, tol=0.0001,
verbo=0)
>>> pred_decision = est.decision_function([[-2], [3], [0.5]])
>>> pred_decision
array([-, , ])
>>> hinge_loss([-1, 1, 1], pred_decision)
这⾥是⼀个⽰例,演⽰了在 multiclass problem (多类问题)中使⽤了具有 svm 分类器的函数:
>>> X = np.array([[0], [1], [2], [3]])
>>> Y = np.array([0, 1, 2, 3])
>>> labels = np.array([0, 1, 2, 3])
>>> est = svm.LinearSVC()
>>> est.fit(X, Y)
LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,
intercept_scaling=1, loss='squared_hinge', max_iter=1000,
multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,
verbo=0)
>>> pred_decision = est.decision_function([[-1], [2], [3]])
>>> y_true = [0, 2, 3]
>>> hinge_loss(y_true, pred_decision, labels)
11. Log 损失
Log loss,⼜被称为 logistic regression loss(logistic 回归损失)或者 cross-entropy loss(交叉熵损失)定义在 probability estimates (概率估计)。它通常⽤于 (multinomial) logistic regression ((多项式)logistic 回归)和 neural networks (神经⽹络)以及 expectation-maximization (期望最⼤化)的⼀些变体中,并且可⽤于评估分类器的probability outputs (概率输出)(predict_proba)⽽不是其 discrete predictions (离散预测)。
对于具有真实标签的 binary classification (⼆分类)和 probability estimate (概率估计), 每个样本的 log loss 是给定的分类器的negative log-likelihood 真正的标签:
这扩展到 multiclass ca (多类⽰例)如下。让⼀组样本的真实标签被编码为 1-of-K binary indicator matrix , 即如果样本具有取⾃⼀组个标签的标签,则。令为 matrix of probability estimates (概率估计矩阵),。那么整套的 log loss 就是
为了看这这⾥如何 generalizes (推⼴)上⾯给出的 binary log loss (⼆分 log loss),请注意,在 binary ca (⼆分情况下),和,因此扩展的 inner sum (内部和),给出 binary log loss (⼆分 log loss)。
函数计算出⼀个 a list of ground-truth labels (已标注的真实数据的标签的列表)和⼀个 probability matrix (概率矩阵)的 log loss,由 estimator (估计器)的predict_proba⽅法返回。
>>> ics import log_loss
>>> y_true = [0, 0, 1, 1]
>>> y_pred = [[.9, .1], [.8, .2], [.3, .7], [.01, .99]]
>>> log_loss(y_true, y_pred)
y_pred中的第⼀个[.9, .1]表⽰第⼀个样本具有标签 0 的 90% 概率。log loss 是⾮负数。
12. 马修斯相关系数
函数⽤于计算 binary class (⼆分类)的引⽤⾃ Wikipedia:
“Matthews correlation coefficient(马修斯相关系数)⽤于机器学习,作为 binary (two-class) classifications (⼆分类)分类质量的度量。它考虑到 true and fal positives and negatives (真和假的 positives 和 negatives),通常被认为是可以使⽤的 balanced measure(平衡措施),即使 class are of very different sizes (类别⼤⼩不同)。MCC 本质上是 -1 和 +1 之间的相关系数值。系数 +1 表⽰完美预测,0 表⽰平均随机预测, -1 表⽰反向预测。statistic (统计量)也称为 phi coefficient (phi)系数。”
在 binary (two-class) (⼆分类)情况下,, , 和分别是 true positives, true negatives, fal positives 和 fal negatives 的数量,MCC 定义为
在 multiclass ca (多类的情况)下, Matthews correlation coefficient(马修斯相关系数)可以根据 class (类)的定义。为了简化定义,考虑以下中间变量: