【数据分析】线性回归与逻辑回归(R语言实现)
文章来源:公众号-智能化IT系统。
回归模型有多种,一般在数据分析中用的比较常用的有线性回归和逻辑回归。其描述的是一组因变量和自变量之间的关系,通过特定的方程来模拟。这么做的目的也是为了预测,但有时也不是全部为了预测,只是为了解释一种现象,因果关系。
还是按照老风格,不说空泛的概念,以实际的案例出发。
还是先前的案例,购房信息,我们这次精简以下,这8位购房者我们只关注薪水和年龄这两个因素,信息如下:
| 用户ID | 年龄 | 收入 | 是否买房 |
| 1 | 27 | 15W | 否 |
| 2 | 47 | 30W | 是 |
| 3 | 32 | 12W | 否 |
| 4 | 24 | 45W | 是 |
| 5 | 45 | 30W | 否 |
| 6 | 56 | 32W | 是 |
| 7 | 31 | 15W | 否 |
| 8 | 23 | 30W | 否 |
我们用这个案例说明我们提到的线性回归模型和逻辑回归模型。
线性回归
首先我们看线性回归模型。如果我们想试图看下收入和年龄是否有什么直接的关系,这里,我们把收入看成自变量,年龄是因变量,那么线性模型的关系图自然是直线,按照方程,我们可以得出:
y(收入)=a + bx(年龄)
这里,b是回归系数,a是回归常数。但是俗话说,理想很丰满,现实很骨干,偏差一定存在,所以实际上还有残差e存在。所以这个方程更精确的应该是:
y(收入)=a + bx(年龄) + e
现在我们来计算具体的回归系数和回归常数。具体计算公式如下:
b = ∑(y - Y)(x - X)/∑(x - X)(x - X)
a = Y - bX
这里,大写的X和Y代表平均值,我们先计算除了回归系数,然后在通过平均值计算出回归常数。
我们先算出Y值为26.125,X值为35.625。然后我们来计算回归系数,针对每一数据,得到如下:
| 用户ID | x - X | y - Y | (y - Y)(x - X) | (x - X)(x - X) |
| 1 | -8.625 | -11.125 | 95.953125 | 74.390625 |
| 2 | 11.375 | 3.875 | 44.078125 | 129.390625 |
| 3 | -3.625 | -14.125 | 51.203125 | 13.140625 |
| 4 | -11.625 | 18.875 | -219.421875 | 135.140625 |
| 5 | 9.375 | 3.875 | 36.328125 | 87.890625 |
| 6 | 20.375 | 5.875 | 119.703125 | 415.140625 |
| 7 | -4.625 | -11.125 | 51.453125 | 21.390625 |
| 8 | -12.625 | 3.875 | 48.921875 | 159.390625 |
然后我们来计算回归系数和回归常数
b = 0.1259
a = 21.6412
OK,现在方程已经出现了,就是:
y = 21.6412 + 0.1259x
那么是否完工了呢,我们可以根据任何的年龄来预测其薪水?答案肯定是不,我们要对这个公式进行评估,以决定是否可以用线性回归模型来预测。其中有一个方式是通过判定系数,做为一个标准来衡量方程的拟合程度。
判定系数涉及到三个概念:
理论值y1:按照公式来计算的值
观测值y2:实际的值
平均值y3:就是刚才计算得到的26.125
于是我们又计算了一大堆,得出如下:
| 用户ID | y3 | y2 | y1 |
| 1 | 26.125 | 15 | 24.2249 |
| 2 | 26.125 | 30 | 28.6309 |
| 3 | 26.125 | 12 | 25.3264 |
| 4 | 26.125 | 45 | 23.564 |
| 5 | 26.125 | 30 | 28.1903 |
| 6 | 26.125 | 32 | 30.6136 |
| 7 | 26.125 | 15 | 25.1061 |
| 8 | 26.125 | 30 | 23.3437 |
判定系数就是:∑(y1 - y3)(y1 - y3)/∑(y2 - y3)(y2 - y3)
判定系数要接近于1,则说明这个线性模型越准确,在这个案例中,完全没有达到,所以是不可行的。
线性模型R语言实现
如果我们自己写代码实现,还是比较费精力和时间,R语言中已经为您实现了回归模型的定制。
还是上述的案例,如下:
首先创建对应的数据框:
> year <- c(27,47,32,24,45,56,31,23)
> money <- c(15,30,12,45,30,32,15,30)
> buyhouse <- c(0,1,0,1,0,1,0,0)
> case <- data.frame(year,money,buyhouse)
> case
year money buyhouse
1 27 15 0
2 47 30 1
3 32 12 0
4 24 45 1
5 45 30 0
6 56 32 1
7 31 15 0
8 23 30 0
>
然后通过lm函数来评估:
> runs.mdl <- lm(
+ formula=money~year,data=case)
这里,formula是公式函数,指定了因变量和自变量,data表示需要评估的数据集。
然后我们可以看得到的回归系数和回归常数:
> coef(runs.mdl)
(Intercept) year
21.6412453 0.1258598
上面的Intercept是回归常数,0.1258598是回归系数。
同时我们可以用summary得到详细的分析:
> summary(runs.mdl)
Call:
lm(formula = money ~ year, data = case)
Residuals:
Min 1Q Median 3Q Max
-13.669 -10.165 2.569 3.849 20.338
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 21.6412 13.9636 1.550 0.172
year 0.1259 0.3734 0.337 0.748
Residual standard error: 12.02 on 6 degrees of freedom
Multiple R-squared: 0.01859, Adjusted R-squared: -0.145
F-statistic: 0.1136 on 1 and 6 DF, p-value: 0.7475
上面的Multiple R-squared: 0.01859就是判定系数,这里已经有了非常详细的评估。
逻辑回归
如上所说的是线性回归,逻辑回归可以理解为线性回归的衍生,只是因变量的范围固定在0和1之间。X和Y变量的曲线呈S型。当X逐渐减少时,Y也趋近于0。
同样,逻辑回归有一系列的计算法则,以及公式。和线性回归一样,其需要回归系数和回归参数,来评估因变量的取向。而在这里,因变量Y不再是一个值估计,而是概率,当Y等于1的概率。
这个公式如下:
P(Y=1│X=x)=exp(x'β)/(1+exp(x'β))
具体的算法原理我们不做详细讨论,还是以案例来说,我们评估根据年龄和薪水这两个变量,决定是否买房的概率,这是个二元逻辑回归。
在R语言中,我们可以坐享其成,用glm来统计
> runss.mdl <- glm(formula=buyhouse~year+money,data=case,family="binomial")
这里我们要指定family是binomial,以表明是逻辑回归。
然后我们查看具体的情况:
> summary(runss.mdl)
Call:
glm(formula = buyhouse ~ year + money, family = "binomial", data = case)
Deviance Residuals:
1 2 3 4 5 6
-2.100e-08 5.169e-05 -2.100e-08 8.346e-06 -5.019e-05 2.100e-08
7 8
-2.100e-08 -2.100e-08
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1889.94 1093171.03 -0.002 0.999
year 20.46 11911.42 0.002 0.999
money 31.62 18804.21 0.002 0.999
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 1.0585e+01 on 7 degrees of freedom
Residual deviance: 5.2599e-09 on 5 degrees of freedom
AIC: 6
Number of Fisher Scoring iterations: 25
然后我们可以做出图形,来评估最终的效果,R中的plot即可,或者通过anova来进行统计,此处省略。
公众号-智能化IT系统。每周都有技术文章推送,包括原创技术干货,以及技术工作的心得分享。扫描下方关注。
【数据分析】线性回归与逻辑回归(R语言实现)的更多相关文章
- Spark MLlib回归算法------线性回归、逻辑回归、SVM和ALS
Spark MLlib回归算法------线性回归.逻辑回归.SVM和ALS 1.线性回归: (1)模型的建立: 回归正则化方法(Lasso,Ridge和ElasticNet)在高维和数据集变量之间多 ...
- Matlab实现线性回归和逻辑回归: Linear Regression & Logistic Regression
原文:http://blog.csdn.net/abcjennifer/article/details/7732417 本文为Maching Learning 栏目补充内容,为上几章中所提到单参数线性 ...
- 【Coursera】线性回归和逻辑回归
一.线性回归 1.批量梯度下降法 每次对参数进行一次迭代时,都要扫描一遍输入全集 算法可以收敛到局部最优值 当迭代多次之后,每次迭代参数的改变越小 2.随机梯度下降法 对于一个输入样本,对参数进行一次 ...
- 机器学习_线性回归和逻辑回归_案例实战:Python实现逻辑回归与梯度下降策略_项目实战:使用逻辑回归判断信用卡欺诈检测
线性回归: 注:为偏置项,这一项的x的值假设为[1,1,1,1,1....] 注:为使似然函数越大,则需要最小二乘法函数越小越好 线性回归中为什么选用平方和作为误差函数?假设模型结果与测量值 误差满足 ...
- 线性回归、逻辑回归(LR)
线性回归 回归是一种极易理解的模型,就相当于y=f(x),表明自变量 x 和因变量 y 的关系.最常见问题有如 医生治病时的望.闻.问.切之后判定病人是否生了什么病,其中的望闻问切就是获得自变量x,即 ...
- Machine Learning 学习笔记 (1) —— 线性回归与逻辑回归
本系列文章允许转载,转载请保留全文! [请先阅读][说明&总目录]http://www.cnblogs.com/tbcaaa8/p/4415055.html 1. 梯度下降法 (Gradien ...
- 机器学习(三)—线性回归、逻辑回归、Softmax回归 的区别
1.什么是回归? 是一种监督学习方式,用于预测输入变量和输出变量之间的关系,等价于函数拟合,选择一条函数曲线使其更好的拟合已知数据且更好的预测未知数据. 2.线性回归 于一个一般的线性模型而言,其 ...
- 机器学习之感知器和线性回归、逻辑回归以及SVM的相互对比
线性回归是回归模型 感知器.逻辑回归以及SVM是分类模型 线性回归:f(x)=wx+b 感知器:f(x)=sign(wx+b)其中sign是个符号函数,若wx+b>=0取+1,若wx+b< ...
- 【小白学AI】线性回归与逻辑回归(似然参数估计)
文章转自[机器学习炼丹术] 线性回归解决的是回归问题,逻辑回归相当于是线性回归的基础上,来解决分类问题. 1 公式 线性回归(Linear Regression)是什么相比不用多说了.格式是这个样子的 ...
随机推荐
- Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)
一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 二.Tkinter 是什么 三.Tkinter 控件详细介绍 1. T ...
- MySQL 锁信息和事务
1 锁概念 1.1 什么是锁 锁是数据库系统区别于文件系统的一个关键特性.数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性.例如:操作缓冲池中的LRU列表,删除.添加.移动L ...
- 05 Tensorflow中变量的初始化
打开Python Shell,输入import tensorflow as tf,然后可以执行以下代码. 1.创建一个2*3的矩阵,并让所有元素的值为0.(类型为tf.float) a = tf.ze ...
- mysql字符串查找(统计客源)
如客源状态为1:2:3:5:6:9,其中6代表成交状态 如果要统计查询出有6这个状态的客源,可以用函数LOCATE(字符,搜索的字符串)来, 示例:统计每个分组下全部客源数total,成交客源数dea ...
- 痞子衡嵌入式:恩智浦LPC系列MCU开发那些事 - 索引
大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是恩智浦LPC系列微控制器相关知识. 恩智浦半导体最早于2003年便开始推出LPC系列MCU,但早期的产品LPC2000/3000系列属 ...
- 翻译:update语句(已提交到MariaDB官方手册)
本文为mariadb官方手册:UPDATE的译文. 原文:https://mariadb.com/kb/en/update/ 我提交到MariaDB官方手册的译文:https://mariadb.co ...
- [转]angular 禁止缓存
本文转自:https://www.cnblogs.com/jonney-wang/p/9797906.html angular 单页面开发,会存在和管理很多HTML和JS文件,缓存有时是个麻烦. 在开 ...
- Tomcat日志设定
1 Tomcat 日志概述 Tomcat 日志信息分 为 两 类 : 一.是运行中的日志,它主要 记录 运行的一些信息,尤其是一些异常 错误 日志信息 .二.是 访问 日志信息,它 记录 的 访 ...
- asp.net-基础-20180321
C#与.NET的关系 C#不是语言,.net是平台.
- 1. volatale 关键字 -内存可见性
package com.gf.demo01; /** * 一.volatile 关键字:但多个线程进行操作共享数据时,可以保证内存中数据可见性. * */ public class TestVolat ...