线性回归-简单线性回归
线性回归-简单线性回归
线性回归是一个解释性很强的模型,它可以告诉我们哪个因素对被预测变量影响最大,也可以给定因变量的不同组合来判断被预测量的值。在业务上,运营同学可能想知道增加流量、价格变动等对销量的影响,如果数据量足够支持模型训练,可以通过建立一个线性模型来形象描述。
线性模型大类上我们简单分为简单线性回归模型和多元线性回归模型等。当然如果数据违背了线性回归的一些基本假设,也可以用ridge regression和lasso regression。博主打算搬一个系列,后续都介绍一下。本文主要focus 在简单线性回归模型。
线性回归基本假设
y = β 0 + β 1 x 1 + ϵ y = \beta_0 + \beta_1x_1 + \epsilon y=β0+β1x1+ϵ
- 说到线性回归,顾名思义,因变量y和变量 x i x_i xi之间要符合线性关系
- 模型残差 ϵ \epsilon ϵ要符合normal distribution,下一篇文章介绍下如何判断normal distribution
- 模型残差 ϵ \epsilon ϵ的方差是齐次的,也就是残差不随x值变大而变化
- observation( x i x_i xi, y i y_i yi)之间是彼此独立的,最一般不符合这个假设的就是时序序列,下一篇文章介绍下如何判断是否是auto-regression
- 变量之间没有共线性,下一篇文章介绍下如何判断共线性和如何处理
Sklearn vs. statsmodels 线性回归library
import pandas as pd
import numpy as np
import seaborn as sns
from sklearn import linear_model as lm
import statsmodels.api as sm
from sklearn.datasets import fetch_california_housing
data_set = fetch_california_housing(as_frame=True)
data = data_set.frame
data.describe()
MedInc | HouseAge | AveRooms | AveBedrms | Population | AveOccup | Latitude | Longitude | MedHouseVal | |
---|---|---|---|---|---|---|---|---|---|
count | 20640.000000 | 20640.000000 | 20640.000000 | 20640.000000 | 20640.000000 | 20640.000000 | 20640.000000 | 20640.000000 | 20640.000000 |
mean | 3.870671 | 28.639486 | 5.429000 | 1.096675 | 1425.476744 | 3.070655 | 35.631861 | -119.569704 | 2.068558 |
std | 1.899822 | 12.585558 | 2.474173 | 0.473911 | 1132.462122 | 10.386050 | 2.135952 | 2.003532 | 1.153956 |
min | 0.499900 | 1.000000 | 0.846154 | 0.333333 | 3.000000 | 0.692308 | 32.540000 | -124.350000 | 0.149990 |
25% | 2.563400 | 18.000000 | 4.440716 | 1.006079 | 787.000000 | 2.429741 | 33.930000 | -121.800000 | 1.196000 |
50% | 3.534800 | 29.000000 | 5.229129 | 1.048780 | 1166.000000 | 2.818116 | 34.260000 | -118.490000 | 1.797000 |
75% | 4.743250 | 37.000000 | 6.052381 | 1.099526 | 1725.000000 | 3.282261 | 37.710000 | -118.010000 | 2.647250 |
max | 15.000100 | 52.000000 | 141.909091 | 34.066667 | 35682.000000 | 1243.333333 | 41.950000 | -114.310000 | 5.000010 |
我们这里用HouseAge做因变量,来预测MedHouseVal
sklearn library 来处理
x = data[['HouseAge']]
y= data['MedHouseVal']# fit the linear model
model = lm.LinearRegression()
results = model.fit(x,y)
# print the coefficientprint('截距是:{0} 系数是:{1}'.format(model.intercept_,model.coef_))
截距是:1.7911991658938475 系数是:[0.0096845]
from sklearn.metrics import r2_score
y_pred = results.predict(x)
print("R2是:{}".format(r2_score(y,y_pred)))
R2是:0.011156305266710742
statsmodels 来处理
X_ = sm.add_constant(x)
model = sm.OLS(y,X_).fit()
model.summary()
Dep. Variable: | MedHouseVal | R-squared: | 0.011 |
---|---|---|---|
Model: | OLS | Adj. R-squared: | 0.011 |
Method: | Least Squares | F-statistic: | 232.8 |
Date: | Sun, 12 Jun 2022 | Prob (F-statistic): | 2.76e-52 |
Time: | 14:36:59 | Log-Likelihood: | -32126. |
No. Observations: | 20640 | AIC: | 6.426e+04 |
Df Residuals: | 20638 | BIC: | 6.427e+04 |
Df Model: | 1 | ||
Covariance Type: | nonrobust |
coef | std err | t | P>|t| | [0.025 | 0.975] | |
---|---|---|---|---|---|---|
const | 1.7912 | 0.020 | 90.218 | 0.000 | 1.752 | 1.830 |
HouseAge | 0.0097 | 0.001 | 15.259 | 0.000 | 0.008 | 0.011 |
Omnibus: | 2269.585 | Durbin-Watson: | 0.325 |
---|---|---|---|
Prob(Omnibus): | 0.000 | Jarque-Bera (JB): | 3093.615 |
Skew: | 0.938 | Prob(JB): | 0.00 |
Kurtosis: | 3.281 | Cond. No. | 77.8 |
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
ols 的 summary里有几个很重要的metrics,这里说明一下
- R-squared:也就是R2,一般来衡量因变量的变化有多少可以被变量解释,这里是0.011,也就是说MedHouseVal的变化只有1%可以被HouseAge来解释,是很差的模型了。区间是0~1
- Prob (F-statistic):F test的原假设是模型的预测效果和只用constant来预测的效果一样。这里Prob<0.05,拒绝原假设,也就是说现有模型比常数预测是好的。
- coef:变量系数,HouseAge的系数是0.0097,也就是说HouseAge增加1个unit,MedHouseVal增加0.0097
- P>|t|:衡量变量是否和因变量真实相关,原假设是变量系数为0,当<0.05是拒绝原假设,也就是系数是有意义的
- Prob(Omnibus)和Prob(JB):都是衡量残差是否符合normal distribution.
statsmodel和sklearn 总结
通过比较可以看到,sklearn其实更适合做预测,statsmodel更适合做 explainary的分析
线性回归-简单线性回归相关推荐
- 线性回归——简单线性回归、多元线性回归
回归分析是用来评估变量之间关系的统计过程.用来解释自变量X与因变量Y的关系.即当自变量X发生改变时,因变量Y会如何发生改变. 线性回归是回归分析的一种,评估的自变量X与因变量Y之间是一种线性关系.当只 ...
- TensorFlow简单线性回归
TensorFlow简单线性回归 将针对波士顿房价数据集的房间数量(RM)采用简单线性回归,目标是预测在最后一列(MEDV)给出的房价. 波士顿房价数据集可从http://lib.stat.cmu.e ...
- R语言使用lmPerm包应用于线性模型的置换方法(置换检验、permutation tests)、使用lm模型构建简单线性回归模型、使用lmp函数生成置换检验回归分析模型
R语言使用lmPerm包应用于线性模型的置换方法(置换检验.permutation tests).使用lm模型构建简单线性回归模型.使用lmp函数生成置换检验回归分析模型(Permutation te ...
- 机器学习:线性回归简单有效,但是千万不要踩到雷区!
https://www.toutiao.com/a6673670287524889091/ 01 引言 人工智能和机器学习已经是时下火热的技术.各行各业的人都想着如何利用人工智能和机器学习使他们的工作 ...
- Python Train_机器学习--基于Python的简单线性回归
一.概念 线性回归(Linear regression)是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析. 这种函数是一个或多个称为回归系数的模型参数的线性 ...
- plor 回归的r方_简单线性回归模型
点击"蓝字"关注我们吧 1 导言 回归分析是一个古老的话题.一百多年前,英国的统计学家高尔顿(F. Galton,1822-1911)和他的学生皮尔逊(K. Pearson,185 ...
- 机器学习第2天:简单线性回归模型
文章目录 一.概念 1. 什么是回归 2. 什么是线性 3. 什么是线性回归 二.具体实现步骤 第1步:数据预处理 第2步:使用简单线性回归模型来训练训练集 第3步:预测结果 第4步:可视化 训练集结 ...
- ML之LiR:基于编程实现简单线性回归案例
ML之LiR:基于编程实现简单线性回归案例 目录 LiR算法思路配图 编程实现简单线性回归案例 LiR算法思路配图 1.LiR输出结果 编程实现简单线性回归案例 结果显示
- python建立回归模型_简单线性回归的Python建模方法
简单线性回归,就是两个随机变量存在一定大小的相关系数的前提下,结合散点图观察,采用最小二乘OLS方法,尝试建立一条回归直线,使得误差平方和SSE最小.OLS是一种参数方法,通过确定直线的斜率b和截距a ...
最新文章
- MySQL 慢查询日志分析及可视化结果
- javascript实现缩略图
- CEO 赠书 | 决策是一个技术活,如何做「对」的事?
- 【机器学习——决策树】——两种方法实现,含模型的保存和调用
- 微软向开发者推出区块链概念验证框架
- 利用自定义事件实现不同窗体间的通讯 -- C#篇
- mariadb.zip压缩包解压后使用绿色db配置方法
- 5月上海见-国际产学研专家集结第六届全球云计算大会中国站
- 天使之音——Declan Galbraith
- tomcat xml解析-digester
- C++实现二阶行列式的计算
- 一文曝光字节跳动薪资职级,资深开发的收入你意想不到~
- 字符串处理工具类,主要是针对内容txt对标点符号进行处理-java处理字符串符号工具类实现逻辑
- hadoop 爬虫_这些不用编程的爬虫工具,你一定要知道
- html5不用reload重置网页,refresh和reload
- 两对等位基因控制一对相对性状的规律(基因互作)
- ABP中的数据过滤器
- Python spider爬取高清电影
- AndroidQ(10.0) 手机锁屏炫酷充电动画————html方案
- 图片无法显示时,js实现 暂无图片效果
热门文章
- Flink教程(10)- Flink批流一体API(其它)
- html nav文字位置,HTML: nav 标签
- 高级计算机应用软件,商务软件高级应用微课教程(高等职业院校技能应用型教材)/计算机应用系列...
- Android技术社区
- deepin20系统选择手动安装盘_SD卡能干啥:在SD卡上安装Ubuntu双系统
- 医护网电子商务商城网站策划方案
- Unity基础(3)—— unity中的各种坐标系
- DAMA认证|数据治理和数字化的12项原则
- 网众无盘服务器WINDOWS,网众无盘windows任务站的工作原理
- 【半年总结】——2015.08