全网最快入门———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,利用这种方法可以研究每一个预测变量对结果概率的影响

相关文章
|
2月前
|
机器学习/深度学习 数据采集 算法
量子机器学习入门:三种数据编码方法对比与应用
在量子机器学习中,数据编码方式决定了量子模型如何理解和处理信息。本文详解角度编码、振幅编码与基础编码三种方法,分析其原理、实现及适用场景,帮助读者选择最适合的编码策略,提升量子模型性能。
234 8
|
11月前
|
机器学习/深度学习 传感器 运维
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
本文探讨了时间序列分析中数据缺失的问题,并通过实际案例展示了如何利用机器学习技术进行缺失值补充。文章构建了一个模拟的能源生产数据集,采用线性回归和决策树回归两种方法进行缺失值补充,并从统计特征、自相关性、趋势和季节性等多个维度进行了详细评估。结果显示,决策树方法在处理复杂非线性模式和保持数据局部特征方面表现更佳,而线性回归方法则适用于简单的线性趋势数据。文章最后总结了两种方法的优劣,并给出了实际应用建议。
651 7
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
|
12月前
|
机器学习/深度学习 数据采集
机器学习入门——使用Scikit-Learn构建分类器
机器学习入门——使用Scikit-Learn构建分类器
|
机器学习/深度学习 人工智能 自然语言处理
探索AI的奥秘:机器学习入门指南
【10月更文挑战第30天】本篇文章是一份初学者友好的机器学习入门指南,旨在帮助读者理解并开始实践机器学习。我们将介绍机器学习的基本概念,包括监督学习、无监督学习和强化学习等。我们还将提供一些实用的代码示例,以帮助读者更好地理解和应用这些概念。无论你是编程新手,还是有一定经验的开发者,这篇文章都将为你提供一个清晰的机器学习入门路径。
247 2
|
机器学习/深度学习 数据采集 人工智能
R语言是一种强大的编程语言,广泛应用于统计分析、数据可视化、机器学习等领域
R语言是一种广泛应用于统计分析、数据可视化及机器学习的强大编程语言。本文为初学者提供了一份使用R语言进行机器学习的入门指南,涵盖R语言简介、安装配置、基本操作、常用机器学习库介绍及实例演示,帮助读者快速掌握R语言在机器学习领域的应用。
689 3
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
128 1
|
机器学习/深度学习 并行计算 数据挖掘
R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域
【10月更文挑战第21天】R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域。本文将介绍R语言中的一些高级编程技巧,包括函数式编程、向量化运算、字符串处理、循环和条件语句、异常处理和性能优化等方面,以帮助读者更好地掌握R语言的编程技巧,提高数据分析的效率。
309 2
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
141 1
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
426 0
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
178 0