分类模型评估指标及ROC曲线和PR曲线

本文介绍了常用的分类模型评估指标,如准确率、精确率、召回率、F1值、AUC-ROC和混淆矩阵,并通过K-NN分类器实例展示了如何计算和解读ROC曲线和PR曲线。研究发现,通过优化k值,可以最大化模型在测试集上的性能。
摘要由CSDN通过智能技术生成

目录

一、介绍

二、一些常见的分类模型评估指标

    1、准确率(Accuracy)

2、精确率(Precision)

3、召回率(Recall)或真正例率(TPR)

4、F1值(F1 Score)

5、AUC-ROC(Area Under the Curve - Receiver Operating Characteristic)

6、混淆矩阵(Confusion Matrix)

三、简单的案例应用

1、代码实现:

2、运行结果:

四、实验总结

1、ROC曲线:

2、PR曲线:

3、总体分析:


一、介绍

  

分类模型评估指标是用于衡量分类模型性能的一系列指标,它们可以帮助我们理解模型在不同情况下的表现,并指导我们如何改进模型。

二、一些常见的分类模型评估指标

    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值。这对于实际应用中优化模型性能和选择合适的参数具有重要意义。

  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值