原文链接:http:///?p=18944本文将使用一个小数据说明ROC曲线,其中n = 10个观测值,两个连续变量x_1和x_2,以及二元变量y∈{0,1}。 我们可以表示平面(x_1,x_2)中的点,并且对y∈{0,1}中的y 使用不同的颜色。
df = data.frame(x1=x1,x2=x2,y=as.factor(y))plot(x1,x2,col=c("red","blue")[1+y],pch=19,cex=1.5)
reg = glm(y~x1+x2,data=df,family=binomial(link = "logit"))
S = predict(reg,type="response")plot(S,y ) 然后,我们将设定一个阈值(例如50%):如果Y取值1的概率超过阈值,我们将预测为1(否则为0)。在上图中,我们有4个点:阈值左侧的那些点(预测为0),如果位于底部,则分类很好,而位于顶部的分类很差;在阈值的右边(并且预测为1),如果它们位于顶部,则可以很好地分类,而底部则不能很好地分类
plot(S,y,col=c("red","blue")[1+(y==Yhat)])abline(v=s,lty=2)
Y Yhat 0 10 3 11 1 5
FP=sum((Ps==1)*(Y==0))/sum(Y==0)TP=sum((Ps==1)*(Y==1))/sum(Y==1) 我们在给定的阈值(此处为50 %)处获得了该表。
plot(t(V),type="s" )segments(0,0,1,1,col="light blue")
Y Yhat 0 10 3 11 1 5(FP = sum((Yhat)*(Y==0))/sum(Y==0))[1] 0.25(TP = sum((Yhat==1)*(Y==1))/sum(Y==1))[1] 0.83
plot(performance(pred,"tpr","fpr"))
p2[1]*p2[2]+(p1[1]-p2[1])*p1[2]+(1-p1[1])[1] 0.875
auc.perf@y.values[[1]][1] 0.87 我们尝试另一个分类器:仍然是逻辑回归,但要考虑通过将第二个变量分割成两个而获得的因子1 [s,∞) x2) abline(h=.525)
plot(S,y,ylab="y",xlim=0:1) 50%的阈值,我们获得以下列联表
Y Yhat 0 10 3 21 1 4 如果绘制ROC曲线,我们得到
plot(t(V),type="l"segments(0,0,1,1,col="light blue")
pred = prediction(S,Y)plot(performance(pred,"tpr","fpr"))
p2[1]*p2[2]/2+(1-p1[1])*p1[2]+(1-p1[1])*(1-p1[2])/2[1] 0.708auc.perf@y.values[[1]][1] 0.708 |
|