ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

R语言ROC曲线评价分类器的好坏

2021-05-12 13:53:09  阅读:356  来源: 互联网

标签:plot p1 阈值 Yhat sum ROC 分类器 x2 好坏


原文链接:http://tecdat.cn/?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)


然后,我们可以进行逻辑回归,P(Y = 1∣x1,x2)= 1 +eβ0+β1x1 +β2x2eβ0+β1x1 +β2x2 ,


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


然后我们可以将y_i表示为得分的函数,即P(Y = 1∣x1,i ,x2,i),


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 1
0 3 1
1 1 5


在这里,我们感兴趣的是两个指标:假正例和真正例,

FP=sum((Ps==1)*(Y==0))/sum(Y==0) 
TP=sum((Ps==1)*(Y==1))/sum(Y==1)

我们在给定的阈值(此处为50 %)处获得了该表。
这组结果给出了ROC曲线。



plot(t(V),type="s" )
segments(0,0,1,1,col="light blue")


我们可以检查在曲线上阈值50%处的点


Y Yhat 0 1
0 3 1
1 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"))


一个有趣的量称为曲线下面积(或 AUC),可在此处手动计算(我们有一个简单的阶梯函数)

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)


水平线不再是红色和蓝色一样多的线,而是与变量x_2相交的线。在这里,我们仅预测两个值:底部出现蓝色的概率为40%,顶部为蓝色的概率为80%。如果我们将观测值yi表示为预测概率的函数,则可以得出

plot(S,y,ylab="y",xlim=0:1)

50%的阈值,我们获得以下列联表


Y Yhat 0 1
0 3 2
1 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"))


该点的阈值为50%。再次,我们可以计算曲线下的面积


p2[1]*p2[2]/2+(1-p1[1])*p1[2]+(1-p1[1])*(1-p1[2])/2
[1] 0.708
auc.perf@y.values[[1]]
[1] 0.708


最受欢迎的见解

1.从决策树模型看员工为什么离职

2.R语言基于树的方法:决策树,随机森林

3.python中使用scikit-learn和pandas决策树

4.机器学习:在SAS中运行随机森林数据分析报告

5.R语言用随机森林和文本挖掘提高航空公司客户满意度

6.机器学习助推快时尚精准销售时间序列

7.用机器学习识别不断变化的股市状况——隐马尔可夫模型的应用

8.python机器学习:推荐系统实现(以矩阵分解来协同过滤)

9.python中用pytorch机器学习分类预测银行客户流失

标签:plot,p1,阈值,Yhat,sum,ROC,分类器,x2,好坏
来源: https://blog.51cto.com/u_15198753/2769925

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有