分类器常用评价指标

基本概念

 预测为正样本预测为负样本
标记为正样本TP (true positive)FN (false negative)
标记为负样本FP (false positive)TN (true negative)

计算公式:

Accuracy:A=(TP+TN)/(TP+FN+FP+TN)

Precision:P=TP/(TP+FP)

Recall:R=TP/(TP+FN)

F1-score:2/(1/P+1/R)  = 2PR/(P+R)

1、accuracy

accuracy也就是我们中文说到的:准确率,定义为:预测结果正确的样本个数占样本总数的概率。accuracy是最常见也是最基本的评价指标。但在数据不平衡的情况下,评价效果很差。举个例子:

100个样本中,99个为负例,1个为正例,分类器只需要把所有的样本标记为负例,准确率就高达99%,可是该模型却是非常差劲的,因为其基本不具有分类效果,在下面的标准中我们会对该评价进行纠正

2、precision

 precision就是我们中文说到的:精确率,在信息检索领域也被称为查准率,定义为:在预测为正的样本中,有多少是真正的正样本。在上面的例子中,精确率为0。 

3、recall

recall就是我们中文说到的:召回率,在信息检索领域也被称为查全率,定义为: 在标记为正的样本中,有多少被预测为正。在上面的例子中,召回率为0。 

4、F1-Score 

F1值是对准确率和召回率的综合考虑,因为只有在特定的情况下,我们才会只考虑一个指标。比如在检索系统中,用户可能想得到更多的结果, 对匹配程度有较大的容忍度,那么该模型的准确率就会比较小,但是召回率就非常大;而在罪犯评判系统中,我们可能希望,对真正有罪的人判刑,因此就要求该模型准确率非常大,召回率可以容忍。除了这些情况下,我们可能就希望准确率和召回率都比较令人满意,F1值就可以对这两个指标进行综合,进而帮助我们进行模型的选择。

5、ROC-AUC 

ROC:receiver operating characteristic curve,受试者工作特征曲线,AUC:the area under the ROC curve

 ROC曲线是以true positive rate (真阳性率、灵敏度)为纵坐标和 false positive rate(假阳性率、1-特异度)为横坐标绘制的,如图一个样例:

一般来说,如果ROC是光滑的,那么基本可以判断没有太大的overfitting,曲线下的面积(AUC)越大,或者说曲线更接近左上角(true positive rate=1, false positive rate=0),那么模型就越理想,越好

6、PRC

PRC:precision recall curve,精确率召回率曲线

PRC曲线是以召回率为横坐标,准确率为纵坐标绘制的,如图一个样例:

一般来说,曲线下的面积(AUC)越大,或者说曲线更接近右上角(precision=1, recall=1),那么模型就越理想,越好;还有很重要的一点,该指标,在评价的过程中,考虑了检索结果的覆盖度,又考虑了检索结果的排序情况

该图非常形象的表明了这一点,在绘图的过程中,你对于检索结果的PR值的计算,其实是将检索结果中,正确文档的顺序也考虑在内了,正确的文档,越靠前,那么P-R曲线下面的面积就越大。

### 多分类模型评估常用指标 #### 准确率 (Accuracy) 准确率是指所有预测正确的样本占总样本的比例。对于多分类问题而言,这是最直观但也可能是最具误导性的衡量标准之一,特别是在类别不平衡的情况下。 \[ \text{Accuracy} = \frac{\text{TP + TN}}{\text{P + N}} \] 其中 TP 表示真正例(True Positive),TN 表示真负例(True Negative), P 和 N 分别代表正类和负类的实际数目[^1]。 ```python from sklearn.metrics import accuracy_score y_true = [0, 1, 2, 2, 2] y_pred = [0, 0, 2, 2, 1] print(f'Accuracy: {accuracy_score(y_true, y_pred)}') ``` #### 精确度 (Precision) 精确度反映了被预测为某个特定类别的实例中有多少确实是该类别成员。在多标签或多分类场景下,可以通过宏平均(Macro Average)或微平均(Micro Average)的方式计算总体精度。 \[ \text{Precision}_i = \frac{\text{TP}_i}{\text{TP}_i+\text{FP}_i} \] 这里 \( i \) 是指第 \( i \) 类[^4]。 ```python from sklearn.metrics import precision_score precision_macro = precision_score([0, 1, 2], [0, 0, 2], average='macro') print(f'Macro Precision: {precision_macro}') ``` #### 召回率 (Recall) 召回率表示实际属于某类的对象中有多大比例被成功识别出来。同样适用于多分类情况下的宏观/微观均值形式。 \[ \text{Recall}_i=\frac{\mathrm{T} \mathrm{P}_{i}}{\mathrm{~T} \mathrm{P}_{i}+\mathrm{FN}_{i}} \] \( FN_i \) 指的是假阴性(False Negatives)[^3]。 ```python from sklearn.metrics import recall_score recall_macro = recall_score([0, 1, 2], [0, 0, 2], average='macro') print(f'Macro Recall: {recall_macro}') ``` #### F1分数 (F1 Score) 作为精确度与召回率之间的调和平均数,F1得分提供了一个综合考量两者平衡程度的单一数值。 \[ \text{F1-Score}=2 * (\text{Precision}\times\text{Recall}) /(\text{Precision}+\text{Recall}) \] 此公式可用于单个二元分类器,也可以通过宏平均或微平均应用于多个类别上[^5]。 ```python from sklearn.metrics import f1_score f1_macro = f1_score([0, 1, 2], [0, 0, 2], average='macro') print(f'Macro F1 Score: {f1_macro}') ``` #### ROC曲线下面积(AUC-ROC Curve Area Under the Curve) 尽管传统意义上ROC曲线主要用于二元分类任务,但对于多分类问题,则可通过一对多(one-vs-rest)策略构建相应的ROC图并求得其下面积AUC来量化各分类效果的好坏。较高的AUC意味着更好的区分能力[^2]。 ```python import numpy as np from sklearn.preprocessing import label_binarize from sklearn.multiclass import OneVsRestClassifier from sklearn.svm import SVC from sklearn.metrics import roc_auc_score # 假设X_train, X_test, y_train, y_test已经定义好 classifier = OneVsRestClassifier(SVC(kernel="linear", probability=True)) y_score = classifier.fit(X_train, y_train).decision_function(X_test) roc_auc_ovr = roc_auc_score(label_binarize(y_test, classes=[0, 1, 2]), y_score, multi_class='ovr', average='weighted') print(f'AUC of OvR SVM is {roc_auc_ovr:.2f}') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值