最详细的基于R语言的Logistic Regression(Logistic回归)源码,包括拟合优度,Recall,Precision的计算

这篇日志也确实是有感而发,我对R不熟悉,但实验需要,所以简单学了一下。发现无论是网上无数的教程,还是书本上的示例,在讲Logistic Regression的时候就是给一个简单的函数及输出结果说明。从来都没有讲清楚几件事情:

1. 怎样用训练数据训练模型,然后在测试数据上进行验证(测试数据和训练数据可能有重合)?

2. 怎样计算预测的效果,也就是计算Recall,Precision,F-measure等值?

3. 怎样计算Nagelkerke拟合优度等评价指标?

发现这些书本和一些写博客的朋友,脑子真是不清楚得可以。去看你的教程,不是光看看简单的函数使用,或者听你讲讲原理,还是希望能尽快并且正确地用起来。从我的经历来看,已有的网上教程都做得太差了。

这里我也不详细介绍过程了,贴上有详细注释的代码,相信大家一看就明白:

rm(list=ls(all=TRUE))#首先删除工作空间中所有对象
training=read.csv("training.csv",header=FALSE)
testing=read.csv("testing.csv",header=FALSE)#分别导入训练和测试数据
 
glm.fit=glm(V16~V7,data=training,family=binomial(link="logit"))#用训练数据生成模型,这里我是用第7列数据预测第16列
 
n=nrow(training)#训练数据的行数,也就是样本数量
 
R2<-1-exp((glm.fit$deviance-glm.fit$null.deviance)/n)#计算Cox-Snell拟合优度
cat("Cox-Snell R2=",R2,"\n")
 
R2<-R2/(1-exp((-glm.fit$null.deviance)/n))#计算Nagelkerke拟合优度,我们在最后输出这个拟合优度值
 
p=predict(glm.fit,testing)#用模型对测试数据进行预测
p=exp(p)/(1+exp(p))#计算因变量的值
 
testing$V16_predicted=1*(p>0.5)#给test数据增加一列,也就是对V16的预测,当p>0.5时,预测值为1
 
true_value=testing[,16]
predict_value=testing[,17]#分别将16和17列取出来
 
retrieved=sum(predict_value)
precision=sum(true_value & predict_value)/retrieved
recall=sum(predict_value & true_value)/sum(true_value)
F_measure=2*precision*recall/(precision+recall)#计算Recall,Precision和F-measure
 
summary(glm.fit)
cat("Nagelkerke R2=",R2,"\n")
print(precision)
print(recall)
print(F_measure)

搞不清楚这么简单的东西,为什么很多人都说不清楚。

这里再简单解释一下summary输出结果:

Call:
glm(formula = V16 ~ V7, family = binomial(link = "logit"), data = training)
 
Deviance Residuals:
    Min       1Q   Median       3Q      Max
-2.5212  -0.9990  -0.4249   1.1352   1.4978 
 
Coefficients:
             Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.744804   0.207488  -3.590 0.000331 ***
V7           0.005757   0.001362   4.226 2.38e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
 
(Dispersion parameter for binomial family taken to be 1)
 
    Null deviance: 307.76  on 221  degrees of freedom
Residual deviance: 277.85  on 220  degrees of freedom
AIC: 281.85
 
Number of Fisher Scoring iterations: 5

其实大家主要看Coefficient这里就可以了,其中Estimate表示最终预测方程里V7的系数,Pr就是p-value,从这两处看预测效果还可以接受。

时间: 2024-08-01 10:46:37

最详细的基于R语言的Logistic Regression(Logistic回归)源码,包括拟合优度,Recall,Precision的计算的相关文章

分享《深度学习精要(基于R语言)》+PDF+源码+Joshua F.Wiley+高蓉

下载:https://pan.baidu.com/s/14UlxD5VJRY92UpP7Wr6Taw 更多最新的资料:http://blog.51cto.com/14087171 <深度学习精要(基于R语言)>高清中文版PDF+高清英文版PDF+源代码 高清中文版PDF,带目录和书签,能够复制粘贴:高清英文版PDF,带目录和书签,能够复制粘贴:中英文两版可以对比学习. 配套源代码: 经典书籍,讲解详细: 其中高清中文版如图 原文地址:http://blog.51cto.com/14087171

逻辑回归算法实现_基于R语言

逻辑回归(Logistic Regression)模型和线性回归非常相似,可以说就是在逻辑回归的基础上加上了一步逻辑转换,也就是因为这个转换,使逻辑回归模型非常适用于二分类问题的概率预测.本文主要详述逻辑回归模型的基础以及逻辑回归模型的R语言实现. 一.逻辑回归模型原理 首先要讲一下线性回归在预测分类事件中的缺点:线性回归模型的泛化能力很差,如果训练集存在噪点,会导致模型的结果特别差,不同样本建立起来的模型分割点不同:下图中根据年龄预测是否成年的分类问题,斜线就是根据训练集拟合出来的线性回归模型

中文分词实践(基于R语言)

背景:分析用户在世界杯期间讨论最多的话题. 思路:把用户关于世界杯的帖子拉下来,然后做中文分词+词频统计,最后将统计结果简单做个标签云,效果如下: 后续:中文分词是中文信息处理的基础,分词之后,其实还有特别多有趣的文本挖掘工作可以做,也是个知识发现的过程,以后有机会再学习下. ================================================== * 中文分词常用实现: 单机:R语言+Rwordseg分词包 (建议数据量<1G) 分布式:Hadoop+Smallse

在云平台上基于Go语言+Google图表API提供二维码生成应用

二维码能够说已经深深的融入了我们的生活其中.到处可见它的身影:但通常我们都是去扫二维码, 曾经我们分享给朋友一个网址直接把Url发过去,如今我们能够把自己的信息生成二维码再分享给他人. 这里就分享一下基于Go语言+Google图表API提供二维码生成功能的小应用,并演示怎样把它公布到云平台上, 让每一个人都能够通过网络訪问使用它. Google图表API Google在http://chart.apis.google.com 上提供了一个将表单数据自己主动转换为图表的服务. 只是,该服务非常难交

基于Windows Socket的安全通信(C++实现,附源码)

先了解一下Socket的相关函数原型 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 //加载套接字库 int PASCAL FAR WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData); //释放套接字库资源 int PASCAL FAR WSACleanup(void); //创建套接字 SOCKET PASCAL FAR socket (int af,int type,int pr

基于Linux平台下网络病毒Caem.c源码及解析

Came.c型病毒在这里主要修改了用户的密码,同时对用户的终端设备进行了监视.希望与大家共同交流 转载请注明出处:http://blog.csdn.net/u010484477     O(∩_∩)O谢谢 #define HOME "/" #define TIOCSCTTY 0x540E #define TIOCGWINSZ 0x5413 #define TIOCSWINSZ 0x5414 #define ECHAR 0x1d #define PORT 39617 #define BU

Spark技术内幕:Master基于ZooKeeper的High Availability(HA)源码实现

如果Spark的部署方式选择Standalone,一个采用Master/Slaves的典型架构,那么Master是有SPOF(单点故障,Single Point of Failure).Spark可以选用ZooKeeper来实现HA. ZooKeeper提供了一个Leader Election机制,利用这个机制可以保证虽然集群存在多个Master但是只有一个是Active的,其他的都是Standby,当Active的Master出现故障时,另外的一个Standby Master会被选举出来.由于

【开源下载】基于winform的xml菜单编辑器(c#源码)

xml编辑器源码 最近帮朋友做了一个档案管理系统,客户端能够把文件上传到服务器,也能够从服务器下载,支持多用户.通讯框架使用的networkcomms v3框架. 这个档案管理系统中用到了树形目录,使用人员需要随时调整左侧的目录,考虑到使用数据库的比较繁琐,就想到了一个方法,即可以在客户端编辑左侧的那个目录,保存成一个xml文件.修改完成后需要的话可以把这个xml文件上传到服务器,其他人员可以从服务器加载这个xml文件.虽然简单,但也比较好的满足了朋友的需求.今天刚好有时间,把左侧目录的编辑页面

基于R语言的数据分析和挖掘方法总结——均值检验

2.1 单组样本均值t检验(One-sample t-test) 2.1.1 方法简介 t检验,又称学生t(student t)检验,是由英国统计学家戈斯特(William Sealy Gosset, 1876-1937)所提出,student则是他的笔名.t检验是一种检验总体均值的统计方法,当数据中仅含单组样本且样本数较大时(通常样本个数≧30的样本可视为样本数较大),可用这种方法来检验总体均值是否大于.小于或等于某一特定数值.当数据中仅含单组样本但样本数较小时(通常样本个数<30的样本可视为