使用R和Python计算AUC

1 篇文章 0 订阅
0 篇文章 0 订阅

## 使用ROCR包计算AUC ##
本来打算用python做数据分析的,因为之前一直在用python写爬虫,对python用的也算比较熟了,又写了基于numpy的智能计算,就是遗传算法,粒子群算法等的一些搜索算法,对比了matlab,觉得速度方面也还算不错,于是信心爆棚,直接进军kaggle了,结果把数据下载下来,采用最简单的多元线性回归模型,用的是sklearn的linear_model.LinearRegression(),程序运行报错:MemoryError!我就郁闷了,数据集是不小,但也只有280M左右啊,然后我想,著名的sklearn肯定没有问题,那么就是我的代码的问题了,于是各种del,gc.collectiton(),问题还是没有得到解决,转念一想,python的变量赋值方式不是’引用‘吗,然后就是各种分析变量的变化。。。反正到了最后还是没有解决掉MemoryError T_TT_T…..算了还是用R吧,慢是慢了点,但是rm()函数还是非常靠谱的,而且R的变量的赋值是值的传递的,根本不用担心一不小就改变了变量,虽然效率低了点,但是给人的感觉非常踏实啊!!!


某日重新洒下的分割线,无奈的我又用回了python…原因有两个,第一python用了好久了,不想再去用R了,虽然R的ggplot画图很好看,不过今天安装了python的ggplot库-。-好激动!,第二,也是R的一大缺憾,就是循环简直是慢得离谱。所以又用回了python,于是,就硬着头皮来分析之前的程序里的变量引用了,果然发现了大问题!之前认为python对比R的一个优势就是在于变量的引用,无奈我的功力不够很多自以为是引用,其实是传递了值,比如DataFrame中的a = frame.values,我输出了id(a)和id(frame.values)发现两个id不一样,然后又对a进行了子级的操作,发现frame根本就没改变,本以为在这里为了节省内存用了引用,却没想到在这里拜拜的浪费内存,于是经过一番修改,该死的MemoryError终于消失了:)


下面进入正题
AUC:受试者工作特征曲线 (receiver operating characteristic curve,ROC曲线),又称为感受性曲线(sensitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。接受者操作特性曲线就是以虚报概率为横轴,击中概率为纵轴所组成的坐标图,和被试在特定刺激条件下由于采用不同的判断标准得出的不同结果画出的曲线。
那么先来了解下ROC:受试者工作特征曲线 (receiver operating characteristic curve,ROC曲线),又称为感受性曲线(sensitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。接受者操作特性曲线就是以虚报概率为横轴,击中概率为纵轴所组成的坐标图,和被试在特定刺激条件下由于采用不同的判断标准得出的不同结果画出的曲线。
好了概念就介绍到这里,至于具体的AUC计算方法在这里就不在赘述了,下面讲讲ROCR包怎么计算AUC的:
首先

library(ROCR)

然后就可以开始计算了

score <- c(1.1,0.2,3.4,5.1,2.1,0.4,2.4)
label <- c(0,0,1,0,1,0,0)
pred <- prediction(score,label)
auc <- performance(pred,'auc')
auc <- unlist(slot(auc,'y.values'))
print(auc)

输出计算结果

[1] 0.7

暂时就用到这里了,至于ROC的曲线的绘制,tpr,fpr的计算,ROCR包都可以胜任,以后需要就再补充吧。


下面是用python计算AUC的例子:

from sklearn.metrics import roc_auc_score
score = [1.1,0.2,3.4,5.1,2.1,0.4,2.4]
label = [0,0,1,0,1,0,0]
auc = roc_auc_score(label,score)
print 'AUC:',auc

输出结果:

AUC: 0.7
### 回答1: 下面是一个简单的 Python 代码示例,用于绘制 AUC 曲线。 ```python import numpy as np import matplotlib.pyplot as plt from sklearn.metrics import roc_curve, auc # 生成随机数据 y_true = np.random.randint(2, size=100) y_scores = np.random.rand(100) # 计算 AUC fpr, tpr, thresholds = roc_curve(y_true, y_scores) roc_auc = auc(fpr, tpr) # 绘制 ROC 曲线 plt.figure() plt.plot(fpr, tpr, color='darkorange', label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', 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') plt.legend(loc="lower right") plt.show() ``` 这段代码使用了 Scikit-Learn 库中的 `roc_curve` 和 `auc` 函数来计算 AUC 值和 ROC 曲线上的点,然后使用 Matplotlib 库将 ROC 曲线绘制出来。 ### 回答2: Python可以使用多个库来画出AUC曲线,其中最常用的是`sklearn.metrics`库。下面是使用PythonAUC曲线的步骤: 1. 导入所需的库: ```python import matplotlib.pyplot as plt from sklearn import metrics ``` 2. 定义真实标签和预测概率: 假设我们有一个真实的标签列表`y_true`和对应的模型预测的概率列表`y_score`。 3. 计算FPR和TPR以及阈值: ```python fpr, tpr, thresholds = metrics.roc_curve(y_true, y_score) ``` 此函数将根据真实标签和预测概率计算出分类器的FPR(False Positive Rate)、TPR(True Positive Rate)和阈值。 4. 计算AUC: ```python roc_auc = metrics.auc(fpr, tpr) print('AUC值为: ', roc_auc) ``` `auc`函数将根据FPR和TPR计算AUC值。 5. 画出AUC曲线: ```python plt.figure() plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], 'k--') # 绘制对角线 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') plt.legend(loc="lower right") plt.show() ``` 使用matplotlib库的`plot`函数画出ROC曲线,并在图中显示AUC值。 上述步骤就是使用PythonAUC曲线的简单步骤。在实际使用中,可以根据需求对图形进行优化和美化。 ### 回答3: 使用Python可以通过以下步骤绘制AUC曲线: 1. 导入所需的库:导入matplotlib库用于绘图,以及numpy和sklearn库用于计算AUC。 2. 获取概率预测值和真实标签:从模型中获取样本的概率预测值和真实标签。 3. 计算FPR和TPR:使用sklearn库中的roc_curve函数计算真正例率(True Positive Rate,TPR)和假正例率(False Positive Rate,FPR)。 4. 计算AUC使用sklearn库中的auc函数计算AUC值。 5. 绘制AUC曲线:使用matplotlib库的plot函数绘制FPR和TPR的关系图。 下面是一个简单的示例代码: ```python import numpy as np from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt # 模拟概率预测值和真实标签 y_proba = np.array([0.1, 0.3, 0.4, 0.7, 0.9, 0.6, 0.2, 0.8]) y_true = np.array([0, 0, 1, 1, 1, 0, 0, 1]) # 计算FPR和TPR fpr, tpr, thresholds = roc_curve(y_true, y_proba) # 计算AUC auc_score = auc(fpr, tpr) # 绘制AUC曲线 plt.title('Receiver Operating Characteristic') plt.plot(fpr, tpr, 'b', label='AUC = %0.2f' % auc_score) plt.legend(loc='lower right') plt.plot([0, 1], [0, 1], 'r--') plt.xlim([-0.1, 1.1]) plt.ylim([-0.1, 1.1]) plt.ylabel('True Positive Rate') plt.xlabel('False Positive Rate') plt.show() ``` 以上代码首先模拟了一组概率预测值和真实标签,接着通过`roc_curve`函数计算出FPR和TPR的值,然后利用`auc`函数计算AUC值。最后使用`plot`函数绘制AUC曲线,其中标签中包含了AUC值。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值