机器学习之ROC曲线理解

ROC曲线通过坐标(真正例率,假正例率)展示不同分类阈值下的分类效果,帮助评估学习器的性能。文章介绍了ROC曲线的计算方法,并通过实例说明了如何根据学习器的预测结果绘制ROC曲线,以此分析学习器的优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROC曲线

1、roc曲线

曲线的坐标分别为真正例率(TPR)和假正例率(FPR),定义如下:
在这里插入图片描述
真正例的个数是实际值为正例被预测成为正例的值得个数,TPR是预测结果中真正例占实际值中正例的比例;
反正例的个数是实际值为反例被预测成为正例的值得个数,FPR是预测结果中反正例占实际值中的反例的比例;

很多学习器是为测试样本是产生一个实值或概率预测,然后将这个预测值与一个分类阈值进行比较,若大于阈值分为正类,否则为反类,因此分类过程可以看作选取一个截断点。(通常截取点为0.5,大于0.5为正例,小于0.5为负例)

选择不同的截断点对结果的影响很大,截断点的取值区间是【0,1】,如果截断点靠近1,则被判断为正例的数量会变少;如果截断点靠近0,则被判断为正例的数量会变多。x轴的取值范围为【0,1】,x点代表FPR的概率;y轴的取值范围为【0,1】,y点代表TPR的概率

不同任务中,可以选择不同截断点,若更注重”查准率”,应选择排序中靠前位置进行截断,反之若注重”查全率”,则选择靠后位置截断。因此排序本身质量的好坏,可以直接导致学习器不同泛化性能好坏,ROC曲线则是从这个角度出发来研究学习器的工具。

下图为ROC曲线示意图,因现实任务中通常利用有限个测试样例来绘制ROC图,因此应为无法产生光滑曲线,如右图所示。
在这里插入图片描述绘图举例:给定m个正例子,n个反例子,根据学习器预测结果进行排序,先把分类阈值设为最大,使得所有例子均预测为反例,此时TPR和FPR均为0,在(0,0)处标记一个点,再将分类阈值依次设为每个样例的预测值,即依次将每个例子划分为正例

### 如何使用随机森林绘制ROC曲线 为了在机器学习中利用随机森林绘制接收者操作特征(ROC曲线,需先理解并掌握几个关键概念和技术细节。scikit-learn是一个广受欢迎的Python机器学习库,因其简单易用且功能强大而备受青睐[^2]。 #### 准备工作 确保已成功安装并能够正常导入`scikit-learn`库: ```python import sklearn print(sklearn.__version__) ``` 接着引入必要的模块来构建随机森林模型,并准备用于绘图的相关函数: ```python from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt ``` #### 构建与训练模型 创建合成的数据集作为例子展示如何实现这一过程;实际应用时应替换为真实数据集: ```python X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_redundant=10, random_state=42) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3, random_state=42) rfc = RandomForestClassifier(random_state=42) rfc.fit(X_train, y_train) ``` #### 绘制ROC曲线 获取预测概率值之后,可以通过计算假阳性率(False Positive Rate,FPR)和真阳性率(True Positive Rate,TPR),进而画出ROC曲线: ```python y_score = rfc.predict_proba(X_test)[:, 1] fpr, tpr, _ = roc_curve(y_test, y_score) roc_auc = auc(fpr, tpr) plt.figure() lw = 2 plt.plot(fpr, tpr, color='darkorange', lw=lw, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=lw, 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() ``` 这段代码展示了完整的流程,从加载数据到最终呈现ROC曲线图表,其中特别强调了随机森林分类器的应用及其性能评估方式之一—ROC曲线下面积(AUC)[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值