机器学习之分类模型评估指标

本文详细介绍了分类模型评估中的关键指标如准确率、召回率、P-R曲线、F1值、ROC曲线和AUC面积,以及如何通过混淆矩阵和KNN实例演示如何绘制和解读ROC曲线。重点强调了ROC曲线在权衡真正例率和假正例率的重要性,以及P-R曲线在全面评估模型性能的作用。
摘要由CSDN通过智能技术生成

目录

一、分类模型评估指标

1、准确率(Precision)

2、召回率(Recall)

3、P-R曲线和F1值

4、ROC曲线和AUC面积

5、混淆矩阵

二、ROC曲线和P-R曲线

1、ROC曲线

2、P-R曲线

三、绘制ROC曲线


一、分类模型评估指标

        对于二分类问题,可将样例根据其真实类别与学习器预测的类别组合成混淆矩阵。在该矩阵中,矩阵中的行代表样例的真实类别,矩阵中的列代表预测器预测的类别(行和列所代表的可以互相交换)。利用混淆矩阵,可以将样本分为以下四种:

预测类别
01
实际类别0TNFP
1FNTP

        基于这四类样本,延伸出了以下模型评价指标:

1、准确率(Precision)

        所有预测为正例的样本(TP+FP)真正为正例的样本(TP)比率,又叫“查准率”,即:

precision=\frac{TP}{TP+FP}

2、召回率(Recall)

        所有预测样本中真正为正例的样本(TP)样本中实际正例(TP+FN)的比值,又叫“查全率”,即:

recall=\frac{TP}{TP+FN}

3、P-R曲线和F1值

        P-R曲线的横轴是召回率,纵轴是精确率。对于一个排序模型来说,其P-R曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本, 小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率。整条P-R曲线是通过将阈值从高到低移动而生成的。图1是P-R曲线样例图,其中实线代表模型A的P-R曲线,虚线代表模型B的P-R曲线。原点附近代表当阈值最大时模型的精确率和召回率。

图1    P-R曲线样例图

        准确率和召回率是一对相矛盾的量,一种综合指标是F1值,即:

F1=\frac{2\times P\times R}{P+R}

4、ROC曲线和AUC面积

(1)将所有样本的概率输出值prob从大到小排序;

(2)从高到低依次将prob值作为阈值threshold,计算FPR(横轴)TPR(纵轴)

TPR=\frac{TP}{TP+FN}

FPR=\frac{FP}{TN+FP}

(3)将FPR和TPR组成的点连接组成ROC曲线

图2    ROC曲线样例图

ROC曲线性质:如果一条曲线完全包裹另一条曲线,则外面曲线的性能更优。(ROC曲线下面的面积称为AUC面积

5、混淆矩阵

        混淆矩阵( confusion matrix )是一种评价分类模型好坏的形象化展示工具。

        如:有150个样本数据,这些数据分成3类,每类50个。分类结束后得到的混淆矩阵为:

类1类2类3
类14352
类22453
类30149

        从上可以看出:如果混淆矩阵中非对角线元素全为0 ,则表示是一个完美的分类器

二、ROC曲线和P-R曲线

1、ROC曲线

        ROC曲线常用于二分类问题中的模型比较,主要表现为一种真正例率 (TPR) 和假正例率 (FPR) 的权衡。具体方法是在不同的分类阈值 (threshold) 设定下分别以TPR和FPR为纵、横轴作图。由ROC曲线的两个指标:

TPR=\frac{TP}{TP+FN}           FPR=\frac{FP}{TN+FP}

可以看出,当一个样本被分类器判为正例,若其本身是正例,则TPR增加;若其本身是负例,则FPR增加,因此ROC曲线可以看作是随着阈值的不断移动,所有样本中正例与负例之间的“对抗”。曲线越靠近左上角,意味着越多的正例优先于负例,模型的整体表现也就越好

2、P-R曲线

        由图1可见,当召回率接近于0时,模型A的精确率为0.9,模型B的精确率是1, 这说明模型B得分前几位的样本全部是真正的正样本,而模型A即使得分最高的几个样本也存在预测错误的情况。

        并且,随着召回率的增加,精确率整体呈下降趋势

        但是,当召回率为1时,模型A的精确率反而超过了模型B。这充分说明,只用某个点对应的精确率和召回率是不能全面地衡量模型的性能,只有通过P-R曲线的整体表现,才能够对模型进行更为全面的评估

三、绘制ROC曲线

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import precision_recall_curve, roc_curve, auc
import matplotlib.pyplot as plt

#生成样本数据
X, Y = make_classification(n_samples=1000, n_classes=2, random_state=1)

#将数据集分为训练集和测试集
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=1)

#使用knn算法进行训练和预测
k=5
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, Y_train)
Y_pred = knn.predict(X_test)

fpr, tpr, thresholds = roc_curve(Y_test, Y_pred)
precision, recall, thresholds = precision_recall_curve(Y_test, Y_pred)

#计算AUC值
roc_auc = auc(fpr, tpr)
pr_auc = auc(recall, precision)

#绘制ROC曲线
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic')
plt.legend(loc="lower right")
plt.show()

k=5                                                                         k=20

k=50                                                                     k=100

        由图可知,在一定范围内随着k的增大,ROC曲线下的面积AUC越大,性能越好;但超过一定范围,AUC的变化不大,性能不一定越好。

Pyspark是Apache Spark的一个Python接口,它在大规模数据处理中广泛用于机器学习。对于二分类模型的评价指标,主要有以下几个: 1. **准确率(Accuracy)**:预测正确的样本数占总样本数的比例,是最直观的评估指标。公式为:(TP + TN) / (TP + TN + FP + FN),其中TP(True Positive)表示真正例,TN(True Negative)表示真负例,FP(False Positive)表示假正例,FN(False Negative)表示假负例。 2. **精确率(Precision)**:模型预测为正例且实际为正例的比例,衡量的是模型在预测为正类时的可靠性。公式为:TP / (TP + FP)。 3. **召回率(Recall)**:实际为正例被模型正确预测为正例的比例,衡量的是模型找到所有正例的能力。公式为:TP / (TP + FN)。 4. **F1分数(F1 Score)**:精确率和召回率的调和平均值,综合考虑了两个指标。公式为:2 * Precision * Recall / (Precision + Recall)。 5. **ROC曲线(Receiver Operating Characteristic Curve)**:绘制出真正例率(TPR)与假正例率(FPR)之间的关系,用来评估模型在不同阈值下的性能。 6. **AUC-ROC(Area Under the ROC Curve)**:ROC曲线下的面积,值越大说明模型性能越好,1代表完美分类。 7. **混淆矩阵(Confusion Matrix)**:展示模型预测结果与实际结果的对比,直观地看到分类效果。 8. **交叉验证得分(Cross-validation Score)**:通过将数据集划分为训练集和验证集多次,计算平均得分,避免过拟合或欠拟合的影响。 在选择指标时,需要根据具体业务场景和需求来决定,比如关注模型的准确性、误报率还是查全率等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值