全网最快入门———R语言机器学习实战篇7《logistic回归》

简介: R 语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析、绘图、数据挖掘。 机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

R 语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析、绘图、数据挖掘。 机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

这节课讲logistic回归

项目实操——logistic回归

当通过一系列连续型或类别型预测变量来预测而执行结果变量时,logistic回归时一个非常有用的工具。

导入数据集

这里我们以affair包中的数据为例来阐述logistics回归的过程:

先导入数据集,再使用summary()函数做一个简单的统计,之后使用table()函数统计一下出轨的频数,prop.table()函数统计一下频率:

data(Affairs,package="AER")
summary(Affairs)
table(Affairs$affairs)
>prop.table(table(Affairs$affairs))

性别的频数:

prop.table(table(Affairs$gender))


Logistic回归需要结果是二值型的,所以我们将其转为二值型的结果,定义一个ynaffairs(年度出轨次数):

Affairs$ynaffairs[Affairs$affairs>0] <-1>Affairs$ynaffairs[Affairs$affairs==0] <-0


可以用过head()函数查看字段是否添加成功


接下来将这个变量转化为因子:

Affairs$ynaffairs<-factor(Affairs$ynaffairs,levels=c(0,1),labels=c("NO","Yes"))

现在ynaffairs就属于二值型的变量,可以进行logistic回归分析了(这一步去其实是把离散值转化为二项分布)

筛选变量

使用glm()函数进行logistic回归分析(这个数据集的变量比较多,先使用attach()函数将数据集写入内存,使用R的自动补齐功能):

fit<-glm(ynaffairs~gender+age+yearsmarried+children+religiousness+education+occupation+rating,data=Affairs,family=binomial(link=logit))
summary(fit)

根据回归结果,将不显著的变量去除,重新拟合一次:

>fit1<-glm(ynaffairs~age+yearsmarried+religiousness+rating,data=Affairs,family=binomial(link=logit))

由于两个回归结果是嵌套关系,可以使用anova对两者进行方差分析,对于广义线性回归,可以使用卡方检验(名词解释:https://cloud.tencent.com/developer/news/376546):

anova(fit,fit1,test="Chisq")

卡方检验结果值并不显著

证明两次结果差别不大,证明两次拟合的结果一样好,说明性别、教育程度等不显著变量不会显著的提高方程的预测精度。

在logistic回归中,响应变量是y=1的对数优势比,回归系数的含义是,当其他预测变量不变时,一单位预测变量的变化可能引起的响应变量对数优势比的变化,对回归系数取指数,就能回归正常的数值。

预测拟合结果

可以使用predict()函数根据拟合模型的结果(如此处的fit1)对新数据进行验证,首先创建一个包含你感兴趣的预测变量值的虚拟数据集,testdata,这里为了方便,我们都取数据的平均值。

testdata<-data.frame(rating=c(1,2,3,4,5),age=mean(Affairs$age),yearsmarried=mean(Affairs$yearsmarried),religiousness=mean(Affairs$religiousness))
>head(testdata)
testdata$prob<-predict(fit1,newdata=testdata,type="response")
testdata


下面我们再看看年龄的影响,重新生成一个测试数据:

testdata<-data.frame(rating=mean(Affairs$rating),age=seq(17,57,10),yearsmarried=mean(Affairs$yearsmarried),religiousness=mean(Affairs$religiousness))

#这里seq(17,57,10)的意思是,17岁到57岁,以10为间隔生成年龄数,相当于一个以10为差值的年龄等差数列。


testdata$prob<-predict(fit1,newdata=testdata,type="response")
testdata

结果显示,当其他变量的增长,婚外情的概率将从0.31降到0.10,利用这种方法可以研究每一个预测变量对结果概率的影响

相关文章
|
4月前
|
机器学习/深度学习 存储 运维
机器学习异常检测实战:用Isolation Forest快速构建无标签异常检测系统
本研究通过实验演示了异常标记如何逐步完善异常检测方案和主要分类模型在欺诈检测中的应用。实验结果表明,Isolation Forest作为一个强大的异常检测模型,无需显式建模正常模式即可有效工作,在处理未见风险事件方面具有显著优势。
278 46
|
7月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
7月前
|
机器学习/深度学习 人工智能 Java
Java机器学习实战:基于DJL框架的手写数字识别全解析
在人工智能蓬勃发展的今天,Python凭借丰富的生态库(如TensorFlow、PyTorch)成为AI开发的首选语言。但Java作为企业级应用的基石,其在生产环境部署、性能优化和工程化方面的优势不容忽视。DJL(Deep Java Library)的出现完美填补了Java在深度学习领域的空白,它提供了一套统一的API,允许开发者无缝对接主流深度学习框架,将AI模型高效部署到Java生态中。本文将通过手写数字识别的完整流程,深入解析DJL框架的核心机制与应用实践。
377 3
|
7月前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
8月前
|
数据可视化 API 开发者
R1类模型推理能力评测手把手实战
R1类模型推理能力评测手把手实战
205 2
|
8月前
|
人工智能 自然语言处理 网络安全
基于阿里云 Milvus + DeepSeek + PAI LangStudio 的低成本高精度 RAG 实战
阿里云向量检索服务Milvus版是一款全托管向量检索引擎,并确保与开源Milvus的完全兼容性,支持无缝迁移。它在开源版本的基础上增强了可扩展性,能提供大规模AI向量数据的相似性检索服务。凭借其开箱即用的特性、灵活的扩展能力和全链路监控告警,Milvus云服务成为多样化AI应用场景的理想选择,包括多模态搜索、检索增强生成(RAG)、搜索推荐、内容风险识别等。您还可以利用开源的Attu工具进行可视化操作,进一步促进应用的快速开发和部署。
|
8月前
|
数据可视化 API 开发者
R1类模型推理能力评测手把手实战
随着DeepSeek-R1模型的广泛应用,越来越多的开发者开始尝试复现类似的模型,以提升其推理能力。
613 2
|
8月前
|
数据可视化 API 开发者
R1类模型推理能力评测手把手实战
随着DeepSeek-R1模型的广泛应用,越来越多的开发者开始尝试复现类似的模型,以提升其推理能力。
508 3
|
11月前
|
机器学习/深度学习 人工智能 TensorFlow
基于TensorFlow的深度学习模型训练与优化实战
基于TensorFlow的深度学习模型训练与优化实战
474 3
|
11月前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
359 0

热门文章

最新文章