目录
5、AUC-ROC(Area Under the Curve - Receiver Operating Characteristic)
一、介绍
分类模型评估指标是用于衡量分类模型性能的一系列指标,它们可以帮助我们理解模型在不同情况下的表现,并指导我们如何改进模型。
二、一些常见的分类模型评估指标
1、准确率(Accuracy)
定义:分类正确的样本数占总样本数的比例。
公式:
适用范围:当各类别样本数量相对平衡时较为有效。
2、精确率(Precision)
定义:预测为正例的样本中真正为正例的比例。
公式:
适用范围:当关注预测为正例的样本中有多少是真正正例时,例如在垃圾邮件检测中。
3、召回率(Recall)或真正例率(TPR)
定义:预测为正例的真实正例占所有真实正例的比例。
公式:
适用范围:当关注找到所有真正正例的能力时,例如在疾病检测中。
4、F1值(F1 Score)
定义:精确率和召回率的调和平均值。
公式:
适用范围:当需要综合考虑精确率和召回率时。
5、AUC-ROC(Area Under the Curve - Receiver Operating Characteristic)
定义:ROC曲线下的面积,ROC曲线是真正例率与假正例率的关系曲线。
适用范围:当关注模型在不同分类阈值下的性能时,尤其适用于类别不平衡的情况。
6、混淆矩阵(Confusion Matrix)
定义:通过统计分类模型预测类别与实际类别之间的各类情况,展示在矩阵中。
内容:包括真正例(TP)、假正例(FP)、真反例(TN)和假反例(FN)。
适用范围:提供分类模型性能的详细分析。
真实正例 | 真实负例 | |
预测正例 | TP | FP |
预测负例 | FN | TN |
三、简单的案例应用
1、代码实现:
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import roc_curve, auc, precision_recall_curve
import matplotlib.pyplot as plt
# 生成模拟数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
# 分割数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 设置不同的k值
k_values = [3, 5, 7, 9, 11]
# 初始化ROC和PR曲线的数据
roc_data = {}
pr_data = {}
# 对每个k值进行训练和评估
for k in k_values:
model = KNeighborsClassifier(n_neighbors=k)
model.fit(X_train, y_train)
y_pred_prob = model.predict_proba(X_test)[:, 1]
# 计算ROC曲线和AUC
fpr, tpr, _ = roc_curve(y_test, y_pred_prob)
roc_auc = auc(fpr, tpr)
roc_data[k] = (fpr, tpr, roc_auc)
# 计算PR曲线
precision, recall, _ = precision_recall_curve(y_test, y_pred_prob)
pr_auc = auc(recall, precision)
pr_data[k] = (precision, recall, pr_auc)
# 绘制ROC曲线
plt.figure(figsize=(12, 6))
for k, (fpr, tpr, roc_auc) in roc_data.items():
plt.subplot(1, 2, 1)
plt.plot(fpr, tpr, lw=2, label=f'k={k}, ROC curve (area = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
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 (ROC) Curve for Different k Values')
plt.legend(loc="lower right")
# 绘制PR曲线
for k, (precision, recall, pr_auc) in pr_data.items():
plt.subplot(1, 2, 2)
plt.plot(recall, precision, lw=2, label=f'k={k}, PR curve (area = {pr_auc:.2f})')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve for Different k Values')
plt.legend(loc="upper right")
# 显示图像
plt.tight_layout()
plt.show()
2、运行结果:
四、实验总结
1、ROC曲线:
ROC曲线下的面积(AUC)是评估模型性能的一个重要指标,其值越接近1表示模型性能越好。在图中,我们可以看到随着k值的增加,ROC曲线下的面积(AUC)先增加后减少。这表明存在一个最优的k值,使得模型在测试集上的性能最佳。不同的k值会导致模型的正例识别率和负例识别率发生变化,因此ROC曲线也会相应地调整。
2、PR曲线:
PR曲线下的面积(PR AUC)同样可以用来评估模型性能。从图中可以看出,随着k值的增加,PR曲线下的面积(PR AUC)先增加后减少。这与ROC曲线下的面积(AUC)的变化趋势一致,说明PR曲线也反映了模型的性能随着k值的变化而变化。PR曲线关注的是精确率和召回率之间的关系,可以帮助我们理解模型在不同召回率下的精确率表现。
3、总体分析:
综合ROC曲线和PR曲线,我们可以得出结论:在k-NN分类器中,存在一个最优的k值,使得模型在测试集上的性能最佳。不同的k值会导致模型的正例识别率和负例识别率发生变化,从而影响ROC曲线和PR曲线。通过比较不同k值下的ROC曲线和PR曲线,我们可以选择一个最佳的k值,使得模型在测试集上的性能最佳。综上所述,通过绘制和分析ROC曲线和PR曲线,我们可以全面评估k-NN分类器的性能,并选择最佳的k值。这对于实际应用中优化模型性能和选择合适的参数具有重要意义。