机器学习--ROC,AUC

  • ROC曲线的意义
    (1)ROC曲线能很容易的查出任意阈值对学习器的泛化性能影响
    (2)有助于选择最佳的阈值。ROC曲线越靠近左上角,模型的准确性就越高。最靠近左上角的ROC曲线上的点是分类错误最少的最好阈值,其假正例和假反例总数最少
    (3)可以对不同的学习器比较性能。将各个学习器的ROC曲线绘制到同一坐标中,直观地鉴别优劣,靠近左上角的ROC曲所代表的学习器准确性最高
  • 该方法简单、直观、通过图示可观察分析学习器的准确性,并可用肉眼作出判断。ROC曲线将真正例率和假正例率以图示方法结合在一起,可准确反映某种学习器真正例率和假正例率的关系,是检测准确性的综合代表。ROC曲线不固定阈值,允许中间状态的存在,利于使用者结合专业知识,权衡漏诊与误诊的影响,选择一个更加的阈值作为诊断参考值
  • 如果两条ROC曲线没有相交,我们可以根据哪条曲线最靠近左上角哪条曲线代表的学习器性能就最好。但是在实际情况下若两条曲线发生交叉就难以判断哪个好,于是就出现了AUC
  • AUC(Area Under Curve):ROC曲线下方的面积大小,表预测的正例排在负例前面的概率,是一个评估模型,衡量学习器优劣性能指标的一种手段
  • 注意:
    (1)因为是在1x1的方格里求面积,AUC必在0~1之间。
    (2)假设阈值以上是阳性,以下是阴性;
    (3)若随机抽取一个阳性样本和一个阴性样本,分类器正确判断阳性样本的值高于阴性样本的概率 = AUC 。
    (4)简单说:AUC值越大的分类器,正确率越高。
  • 从AUC 判断分类器(预测模型)优劣的标准:
数值范围 性能
AUC = 1 完美分类器
AUC = [0.85, 0.95]
### Python 中机器学习 ROCAUC 的概念 ROC (Receiver Operating Characteristic) 曲线用于展示不同阈值下分类器的真阳性率(True Positive Rate, TPR)和假阳性率(False Positive Rate, FPR)[^1]。TPR 表示实际为正类的情况下预测为正的概率;FPR 则表示实际为负类却错误地预测为正的比例。 AUC (Area Under the Curve),即曲线下面积,衡量的是整个二分类模型的好坏程度。理想的分类器其 AUC 值接近于 1,意味着具有完美的区分能力;而当 AUC 接近 0.5,则表明该分类器几乎不具备任何判别力[^2]。 ### 计算方法与实现方式 为了计算并绘制 ROCAUC,在 Python 中通常会借助 `scikit-learn` 库中的函数来完成这一过程: #### 导入必要的库 ```python import numpy as np from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import label_binarize from sklearn.multiclass import OneVsRestClassifier from sklearn.metrics import roc_curve, auc from sklearn.ensemble import RandomForestClassifier import matplotlib.pyplot as plt ``` #### 加载数据集并预处理 这里以鸢尾花(Iris)数据为例说明多类别情况下的操作流程: ```python iris = datasets.load_iris() X = iris.data y = iris.target # 将标签转换成二进制形式 Y = label_binarize(y, classes=[0, 1, 2]) n_classes = Y.shape[1] # 数据分割 X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=.5, random_state=0) ``` #### 构建分类器并训练 采用随机森林作为基础估计器构建 OvR 多标签分类器: ```python classifier = OneVsRestClassifier(RandomForestClassifier(n_estimators=100)) y_score = classifier.fit(X_train, y_train).predict_proba(X_test) ``` #### 绘制 ROC 曲线及计算 AUC 对于每一个类别分别获取对应的 FPR、TPR 并求得各自的 AUC 值: ```python fpr = dict() tpr = dict() roc_auc = dict() for i in range(n_classes): fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i]) roc_auc[i] = auc(fpr[i], tpr[i]) # 宏平均 ROC 曲线及其 AUC all_fpr = np.unique(np.concatenate([fpr[i] for i in range(n_classes)])) mean_tpr = np.zeros_like(all_fpr) for i in range(n_classes): mean_tpr += np.interp(all_fpr, fpr[i], tpr[i]) mean_tpr /= n_classes macro_roc_auc = auc(all_fpr, mean_tpr) plt.figure(figsize=(8, 6), dpi=100) lw = 2 colors = ['aqua', 'darkorange', 'cornflowerblue'] for i, color in zip(range(n_classes), colors): plt.plot(fpr[i], tpr[i], color=color, lw=lw, label='ROC curve of class {0} (area = {1:0.2f})' ''.format(i, roc_auc[i])) plt.plot([0, 1], [0, 1], 'k--', lw=lw) plt.xlim([-0.05, 1.05]) plt.ylim([-0.05, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Some extension of Receiver operating characteristic to multi-class') plt.legend(loc="lower right") plt.show() ``` 上述代码展示了如何针对多分类问题通过宏平均法得到整体表现指标,并给出了具体绘图的方法[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值