逻辑回归的大致过程_R语言:逻辑回归ROC曲线对角线分析过程及结果 - lico9e

之前我们讨论了使用ROC曲线来描述分类器的优势,有人说它描述了“随机猜测类别的策略”,让我们回到ROC曲线来说明。考虑一个非常简单的数据集,其中包含10个观测值(不可线性分离)

在这里我们可以检查一下,确实是不可分离的

plot(x1,x2,col=c("red","blue")[1+y],pch=19) 

ba960ac5b123921043a7c01124b5ba20.png

考虑逻辑回归

reg = glm(y~x1+x2,data=df,family=binomial(link = "logit"))

我们可以使用我们自己的roc函数

  1. roc=function(s,print=FALSE){

  2. Ps=(S<=s)*1

  3. FP=sum((Ps==1)*(Y==0)/sum(Y==0)

  4. TP=sum((Ps==1)*(Y==1)/sum(Y==1)

  5. if(print==TRUE){

  6. print(table(Observed=Y,Predicted=Ps))

  7. vect=c(FP,TP)

  8. names(vect)=c("FPR","TPR")

或R包

performance(prediction(S,Y),"tpr","fpr")

我们可以在这里同时绘制两个

b68eebdf048387c5ca6104d17ae7a35d.png

因此,我们的代码在这里可以正常工作。让我们考虑一下对角线。第一个是:每个人都有相同的概率(例如50%)

  1. points(V[1,],V[2,])

 52b5c06a74d162f3e5237fb7d441576e.png

但是,我们这里只有两点:(0,0)和(1,1)。实际上,无论我们选择何种概率,都是这种情况

  1. plot(performance(prediction(S,Y),"tpr","fpr"))

  2. points(V[1,],V[2,])

8306ab042b3831768a0f1f738344a6d2.png

我们可以尝试另一种策略,例如“通过扔无偏硬币进行预测”。我们得到

  1. segments(0,0,1,1,col="light blue")

b294a20586d8108482d1bd68a8847210.png

我们还可以尝试“随机分类器”,在其中我们随机选择分数

  1. S=runif(10)

a16db17a85132ab5b0f0e1b946fb1990.png

更进一步。我们考虑另一个函数来绘制ROC曲线

  1. y=roc(x)

  2. lines(x,y,type="s",col="red")

ad13105e1b37ed4beb9f25fd242effb4.png

但是现在考虑随机选择的策略

  1. for(i in 1:500){

  2. S=runif(10)

  3. V=Vectorize()(seq(0,1,length=251)

  4. MY[i,]=roc_curve(x)

7aac45df7775add373f198250dfb118a.png

红线是所有随机分类器的平均值。它不是一条直线,我们观察到它在对角线周围的波动。

  1. reg = glm(PRO~.,data=my,family=binomial(link = "logit"))

  2. plot(performance(prediction(S,Y),"tpr","fpr"))

  3. segments(0,0,1,1,col="light blue")

f8b806f2a298860e53c085a1bcd57578.png

这是一个“随机分类器”,我们在单位区间上随机绘制分数

  1. segments(0,0,1,1,col="light blue")

e13952e6a1bf81c8dc9f6e21d1f80398.png

如果我们重复500次,我们可以获得

  1. for(i in 1:500){

  2. S=runif(length(Y))

  3. MY[i,]=roc(x)

  4. }

  5. lines(c(0,x),c(0,apply(MY,2,mean)),col="red",type="s",lwd=3)

  6. segments(0,0,1,1,col="light blue")

de1368ae1ae035835a92ca7d5c8917ea.png

因此,当我在单位区间上随机绘制分数时,就会得到对角线的结果。给定Y,我们可以绘制分数的两个经验累积分布函数

  1. plot(f0,(0:(length(f0)-1))/(length(f0)-1))

  2. lines(f1,(0:(length(f1)-1))/(length(f1)-1))

3da27eee3ee9014307ee25fd309f0de9.png

我们还可以使用直方图(或密度估计值)查看分数的分布

  1. hist(S[Y==0],col=rgb(1,0,0,.2),

  2. probability=TRUE,breaks=(0:10)/10,border="white")

8f306b93b955066f28b418bcdca6ed96.png

我们确实有一个“完美的分类器”(曲线靠近左上角)

b6011d6aeae065268805795346125267.png

f0966b0ebd523dee13f80e1e6604aa54.png

有错误。那应该是下面的情况

306ca0e5e7bc57b24d59b354a64981bc.png

在10%的情况下,我们可能会分类错误

c03c5bd1e63d947b294b1a3620a12bf8.png

更多的错误分类

ef6b04e4db7ff65b0b74144c636cde81.png

f39de50d2de412e989736a36021ac1f3.png

最终我们有对角线

4a6d2179b51afe472c9dbde300cafdea.png

2cd2c5c01bfd47da160f666227e31b91.png


 fc63cd719c8f779bd9b8937768b7052e.png

最受欢迎的见解

语言多元Logistic逻辑回归 应用案例

2.面板平滑转移回归(PSTR)分析案例实现

中的偏最小二乘回归(PLSR)和主成分回归(PCR)

语言泊松Poisson回归模型分析案例

语言回归中的Hosmer-Lemeshow拟合优度检验

语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

7.在R语言中实现Logistic逻辑回归

用线性回归预测股票价格

语言如何在生存分析与Cox回归中计算IDI,NRI指标


版权声明:本文为weixin_31303743原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。