## 使用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