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

目录

分类模型评估指标

什么是分类模型

常见的分类模型评估指标

混淆矩阵

准确率(Accuracy)

精准率(Precision)

召回率(Recall)

F1分数

ROC曲线与PR曲线的差异

ROC曲线

PR曲线

ROC曲线与PR曲线的差异

KNN算法对不同K值下的ROC曲线的分析

运行结果

结论


分类模型评估指标

什么是分类模型

分类模型是机器学习的一种类型,主要用于区分和处理离散或分类数据。分类模型的目标是根据已有数据的特征来预测新的数据属于哪个类别。

常见的分类模型评估指标

混淆矩阵

对于二分类问题,有 FP,TP,FN,TN四个参数来表示模型的预测情况。

        TP 对应 true positive, 真阳性,真实分类为正,模型预测也为正

        TN 对应 true negative, 真阴性,真实分类为反,模型预测也为反

        FP 对应 false positive, 假阳性,真实分类为反,模型预测为正

        FN 对应 false negative, 假阴性,真实分类为正,模型预测为反

准确率(Accuracy

Accuracy=\frac{TP+TN}{TP+TN+FP+FN}

准确率是我们最常用的分类性能指标。

这个指标的含义是预测正确的数占样本总数的比例,即正确预测的正反例数 /总数。

精准率(Precision)

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

这个指标的含义是所有预测为正例的样本中正例预测正确的样本个数。

召回率(Recall)

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

正确预测的正例数与实际正例总数的比值。

这个指标的含义是实际为正例的样本中,有多少正例被检测出来了。

F1分数

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

F1分数是精确率和召回率的调和平均值,更接近于两个数较小的那个,用于综合考虑分类器的性能。所以精确率和召回率接近时,F值最大。

ROC曲线与PR曲线的差异

ROC曲线

ROC曲线(Receiver Operating Characteristic Curve)是一种用于评估二分类模型性能的工具。它通过绘制真正例率(TPR)和假正例率(FPR)之间的关系来展示模型在不同阈值下的性能。AUC值(Area Under the Curve)则是ROC曲线下的面积,它表示了模型的整体性能,AUC值越接近1,模型的性能越好。

PR曲线

在正负样本分布得极不均匀(highly skewed datasets),负例远大于正例时,并且这正是该问题正常的样本分布时,PR比ROC能更有效地反应分类器的好坏,即PR曲线在正负样本比例悬殊较大时更能反映分类的真实性能。

ROC曲线与PR曲线的差异

ROC曲线关注模型对整体样本的分类效果,适用于评估分类器的整体性能;而PR曲线则更关注模型对少数类的识别率,适用于数据不平衡或需要关注特定类别识别能力的场景。

KNN算法对不同K值下的ROC曲线的分析

import numpy as np 
import matplotlib.pyplot as plt 
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
  
# 生成一个模拟的二分类数据集  
X, y = make_classification(n_samples=1000, n_classes=2, n_features=10, random_state=42)  
# X是一个包含1000个样本、每个样本有10个特征的数组,y是一个包含1000个样本的标签的数组(0或1)  
  
# 划分数据集为训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)  
# X_train, y_train是训练集的特征和标签,X_test, y_test是测试集的特征和标签  
  
k_values = [1, 3, 6, 10]    
  
plt.figure()    
  
for k in k_values:    
    knn = KNeighborsClassifier(n_neighbors=k)    
    knn.fit(X_train, y_train)    
    y_scores = knn.predict_proba(X_test)[:, 1]  # 取正类的概率  
    
    # 计算ROC曲线的相关指标:假正率(fpr)和真正率(tpr)  
    fpr, tpr, thresholds = roc_curve(y_train, knn.predict_proba(X_train)[:, 1])  
    # 计算AUC值  
    roc_auc = auc(fpr, tpr)    
    
    print(f"k={k}, AUC={roc_auc:.2f}")    
    
    # 在同一个图上绘制不同k值的ROC曲线  
    plt.plot(fpr, tpr, label=f'ROC curve for k={k} (area = {roc_auc:.2f})')    
  

plt.plot([0, 1], [0, 1], color='navy', linestyle='--')    
plt.xlabel('False Positive Rate')    
plt.ylabel('True Positive Rate')    
plt.title('ROC curve for KNN classification with different k values on an imbalanced dataset')    
plt.legend(loc="lower right")
plt.show()

运行结果

结论

随着k值的增加,KNN分类器的决策会更加基于数据的整体分布,而不是单个样本的噪声。这通常会导致分类器性能的改善,反映在ROC曲线上的更高真正率和更低假正率。然而,k值也不能过大,因为过大的k值可能导致分类器过于平滑,失去对局部结构的敏感性,从而降低性能。因此,在实际应用中,应该选择合适的k值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值