五分钟秒懂机器学习混淆矩阵、ROC和AUC

本文详细介绍了机器学习中重要的评估指标——混淆矩阵、ROC曲线和AUC。混淆矩阵用于分析二分类模型的预测效果,通过TPR和FPR理解模型性能。ROC曲线展示了不同阈值下的TPR与FPR关系,AUC则是ROC曲线下的面积,代表模型区分正负样本的能力。AUC值越大,模型性能越好。在某些应用场景中,AUC比精度、召回率更能体现模型价值。

本文始发于个人公众号:TechFlow,原创不易,求个关注


今天是机器学习专题的第18篇文章,我们来看看机器学习领域当中,非常重要的其他几个指标。

混淆矩阵

在上一篇文章当中,我们在介绍召回率、准确率这些概念之前,先讲了TP、FP、FN、和FP这几个值。我们再来简单地回顾一下,我们不能死记硬背这几个指标,否则很容易搞错,并且还容易搞混。我们需要从英文入手来理解,其中的T表示真,可以理解成预测正确,F表示假,也就是预测错误。而P和N表示positive和negative,也就是阴和阳,或者是0和1,也就是两个不同的类别。

既然是两个类别,那么显然说明了我们的这些指标针对的是二分类的场景,也是机器学习当中最常见的场景。

混淆矩阵其实本质上就是将这四个值展示在一个表格当中,这样方便我们观察结果做出分析。

我们举个例子:

假设某一个模型的预测结果的混淆矩阵是这样,我们从上面展示的数据当中很容易就分析出,我们预测的错误主要发生在49这一格,也就是假阴性这一格。也就是说模型将大量的阳性样本预测成了阴性,说明模型的阈值设置得过高,我们可以尝试降低阈值来提升扩大召回。

反之,如果假阳性的样本太多,则说明模型的阈值过低,将大量阴性的样本预测成了阳性。我们想要提升模型的效果,可以考虑提升一下模型分类的阈值。

如果假阳和假阴都很多该怎么办?

这种情况也很多,一般情况下是由于模型没有完全收敛,或者是模型不够强大。比如特征过多,特征当中很多隐藏的信息没有能够学习到。这个时候可以考虑使用更加复杂的模型,比如神经网络或者是XGboost这种较为强力的模型。如果模型本身已经足够复杂,那么可能是训练的时候的样本数量不够多,导致模型的能力无法完全发挥,这个时候可以考虑增加一些样本。

理解了混淆矩阵的概念和用途之后,我们就可以进一步来看ROC了。

ROC

ROC的英文是receiver operating characteristic curve,翻译过来是接受者操作特征曲线,这是一个从信号系统学科当中迁移过来的一个概念。老实讲我不太了解信号系统,不太清楚它原本的含义,但是在机器学习当中,它是反应TPR和FPR的曲线。

标一下关键点,TPR和FPR以及曲线。这里的TRP就是True Positive Rate,也就是真阳率,这里的FPR是假阳率。

所谓的真阳率也就是召回率,也就是所有阳性样本当中被我们预测成阳性的比例

TPR(recall)=TPTP+FNTPR(recall) = \frac{TP}{TP+FN}TPR(rec

### 含义 ROC即接收者操作特征曲线,AUC即曲线下面积,它们是用于评估分类模型性能的重要工具,尤其适用于二分类问题,二者相辅相成,可帮助全面理解模型在不同阈值下的表现[^2]。 ### 原理 ROC曲线以假阳性率(FP)为横轴,真阳性率(TP)为纵轴绘制。中间的虚线代表模型最不好的情况,此时TPFP相等,意味着模型完全随机分类;若曲线在虚线下边,可通过反向预测来处理;红色的线代表模型分类效果还可以,当TP>FP时,曲线越靠近左上角,模型性能越好。AUC则是ROC曲线下的面积,AUC值越大,说明模型的性能越好[^3]。 ### 应用 在机器学习领域,模型评估是确保模型性能的关键环节,ROC曲线与AUC值作为重要的评估工具,在分类任务尤其是处理不平衡数据集时发挥着不可或缺的作用[^1]。 ### 计算方法 因未给出具体计算代码相关内容,以下为Python中使用`scikit-learn`库计算ROCAUC的示例代码: ```python from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt # 生成示例数据 X, y = make_classification(n_samples=1000, n_classes=2, random_state=42) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 训练模型 model = LogisticRegression() model.fit(X_train, y_train) # 预测概率 y_score = model.predict_proba(X_test)[:, 1] # 计算ROC曲线的假阳性率、真阳性率阈值 fpr, tpr, thresholds = roc_curve(y_test, y_score) # 计算AUCroc_auc = auc(fpr, tpr) # 绘制ROC曲线 plt.figure() plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc) 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 example') plt.legend(loc="lower right") plt.show() print(f"AUC值: {roc_auc}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值