线性回归模型详解(Linear Regression)

目录

线性与非线性

线性回归

多重共线性

常用的回归模型评估指标

算法优缺点

算法实现


回归分析的主要算法包括:

  1. 线性回归(Linear Regression)
  2. 逻辑回归(Logistic regressions)
  3. 多项式回归(Polynomial Regression)
  4. 逐步回归(Step Regression)
  5. 岭回归(Ridge Regression)
  6. 套索回归(Lasso Regression)
  7. 弹性网回归(ElasticNet)

 

线性与非线性

  • 线性:两个变量之间的关系一次函数关系的——图象是直线,叫做线性。

    注意:线性是指广义的线性,也就是数据与数据之间的关系。

  • 非线性:两个变量之间的关系不是一次函数关系的——图象不是直线,叫做非线性。

那到底什么时候可以使用线性回归呢?统计学家安斯库姆给出了四个数据集,被称为安斯库姆四重奏。

从这四个数据集的分布可以看出,并不是所有的数据集都可以用一元线性回归来建模。现实世界中的问题往往更复杂,变量几乎不可能非常理想化地符合线性模型的要求。因此使用线性回归,需要遵守下面几个假设:

  • 线性回归是一个回归问题。
  • 要预测的变量 y 与自变量 x 的关系是线性的(图2 是一个非线性)。
  • 各项误差服从正太分布,均值为0,与 x 同方差(图4 误差不是正太分布)。
  • 变量 x 的分布要有变异性。
  • 多元线性回归中不同特征之间应该相互独立,避免线性相关。

参考:

回归问题与分类问题

与回归相对的是分类问题(classification),分类问题要预测的变量y输出集合是有限的,预测值只能是有限集合内的一个。当要预测的变量y输出集合是无限且连续,我们称之为回归。比如,天气预报预测明天是否下雨,是一个二分类问题;预测明天的降雨量多少,就是一个回归问题。

变量之间是线性关系

线性通常是指变量之间保持等比例的关系,从图形上来看,变量之间的形状为直线,斜率是常数。这是一个非常强的假设,数据点的分布呈现复杂的曲线,则不能使用线性回归来建模。可以看出,四重奏右上角的数据就不太适合用线性回归的方式进行建模。

误差服从均值为零的正太分布

前面最小二乘法求解过程已经提到了误差的概念,误差可以表示为误差 = 实际值 - 预测值

可以这样理解这个假设:线性回归允许预测值与真实值之间存在误差,随着数据量的增多,这些数据的误差平均值为0;从图形上来看,各个真实值可能在直线上方,也可能在直线下方,当数据足够多时,各个数据上上下下相互抵消。如果误差不服从均值为零的正太分布,那么很有可能是出现了一些异常值,数据的分布很可能是安斯库姆四重奏右下角的情况。

这也是一个非常强的假设,如果要使用线性回归模型,那么必须假设数据的误差均值为零的正太分布。

变量 x 的分布要有变异性

线性回归对变量 x也有要求,要有一定变化,不能像安斯库姆四重奏右下角的数据那样,绝大多数数据都分布在一条竖线上。

多元线性回归不同特征之间相互独立

如果不同特征不是相互独立,那么可能导致特征间产生共线性,进而导致模型不准确。举一个比较极端的例子,预测房价时使用多个特征:房间数量房间数量*2-房间数量等,特征之间是线性相关的,如果模型只有这些特征,缺少其他有效特征,虽然可以训练出一个模型,但是模型不准确,预测性差。

 

线性回归

参考链接:https://zhuanlan.zhihu.com/p/71725190

 

多重共线性

在多元线性回归模型经典假设中,其重要假定之一是回归模型的解释变量之间不存在线性关系,也就是说,解释变量X1,X2,……,Xk中的任何一个都不能是其他解释变量的线性组合。如果违背这一假定,即线性回归模型中某一个解释变量与其他解释变量间存在线性关系,就称线性回归模型中存在多重共线性。严重的多重共线性可能会产生问题,因为它可以增大回归系数的方差,使它们变得不稳定。以下是不稳定系数导致的一些后果:

  • 即使预测变量和响应之间存在显著关系,系数也可能看起来并不显著。
  • 高度相关的预测变量的系数在样本之间差异很大。
  • 从模型中去除任何高度相关的项都将大幅影响其他高度相关项的估计系数。高度相关项的系数甚至会包含错误的符号。

共线性出现的原因

多重共线性问题就是指一个解释变量的变化引起另一个解释变量地变化。

原本自变量应该是各自独立的,根据回归分析结果,能得知哪些因素对因变量Y有显著影响,哪些没有影响。如果各个自变量x之间有很强的线性关系,就无法固定其他变量,也就找不到x和y之间真实的关系了。除此以外,多重共线性的原因还可能包括:

  • 数据不足。在某些情况下,收集更多数据可以解决共线性问题。
  • 错误地使用虚拟变量。(比如,同时将男、女两个虚拟变量都放入模型,此时必定出现共线性,称为完全共线性)

共线性的判别指标

有多种方法可以检测多重共线性,较常使用的是回归分析中的VIF值,VIF值越大,多重共线性越严重。一般认为VIF大于10时(严格是5),代表模型存在严重的共线性问题。有时候也会以容差值作为标准,容差值=1/VIF,所以容差值大于0.1则说明没有共线性(严格是大于0.2),VIF和容差值有逻辑对应关系,两个指标任选其一即可。

除此之外,直接对自变量进行相关分析,查看相关系数和显著性也是一种判断方法。如果一个自变量和其他自变量之间的相关系数显著,则代表可能存在多重共线性问题。

如存在严重的多重共线性问题,可以考虑使用以下几种方法处理:

(1)手动移除出共线性的变量

先做下相关分析,如果发现某两个自变量X(解释变量)的相关系数值大于0.7,则移除掉一个自变量(解释变量),然后再做回归分析。此方法是最直接的方法,但有的时候我们不希望把某个自变量从模型中剔除,这样就要考虑使用其他方法。

(2)逐步回归法

让系统自动进行自变量的选择剔除,使用逐步回归将共线性的自变量自动剔除出去。此种解决办法有个问题是,可能算法会剔除掉本不想剔除的自变量,如果有此类情况产生,此时最好是使用岭回归进行分析。

(3)增加样本容量

增加样本容量是解释共线性问题的一种办法,但在实际操作中可能并不太适合,原因是样本量的收集需要成本时间等。

(4)岭回归

上述第1和第2种解决办法在实际研究中使用较多,但问题在于,如果实际研究中并不想剔除掉某些自变量,某些自变量很重要,不能剔除。此时可能只有岭回归最为适合了。岭回归是当前解决共线性问题最有效的解释办法。

 

常用的回归模型评估指标

  • 解释方差( Explained variance score)
  • 绝对平均误差(Mean absolute error)
  • 均方误差(Mean squared error)
  • 决定系数(R² score)

 

算法优缺点

  优点:

    (1)思想简单,实现容易。建模迅速,对于小数据量、简单的关系很有效;

    (2)是许多强大的非线性模型的基础。

    (3)线性回归模型十分容易理解,结果具有很好的可解释性,有利于决策分析。

    (4)蕴含机器学习中的很多重要思想。

    (5)能解决回归问题。

  缺点:

    (1)对于非线性数据或者数据特征间具有相关性多项式回归难以建模.

    (2)难以很好地表达高度复杂的数据。

 

算法实现

简单的线性回归算法

import numpy as np
import matplotlib.pyplot as pltx=np.array([1,2,3,4,5],dtype=np.float)
y=np.array([1,3.0,2,3,5])
plt.scatter(x,y)x_mean=np.mean(x)
y_mean=np.mean(y)
num=0.0
d=0.0
for x_i,y_i in zip(x,y):num+=(x_i-x_mean)*(y_i-y_mean)d+=(x_i-x_mean)**2a=num/db=y_mean-a*x_mean
y_hat=a*x+bplt.figure(2)
plt.scatter(x,y)
plt.plot(x,y_hat,c='r')
x_predict=4.8
y_predict=a*x_predict+b
print(y_predict)
plt.scatter(x_predict,y_predict,c='b',marker='+')

基于sklearn的简单线性回归

import numpy as np 
import matplotlib.pyplot as plt  
from sklearn.linear_model import LinearRegression  # 线性回归# 样本数据集,第一列为x,第二列为y,在x和y之间建立回归模型
data=[[0.067732,3.176513],[0.427810,3.816464],[0.995731,4.550095],[0.738336,4.256571],[0.981083,4.560815],[0.526171,3.929515],[0.378887,3.526170],[0.033859,3.156393],[0.132791,3.110301],[0.138306,3.149813],[0.247809,3.476346],[0.648270,4.119688],[0.731209,4.282233],[0.236833,3.486582],[0.969788,4.655492],[0.607492,3.965162],[0.358622,3.514900],[0.147846,3.125947],[0.637820,4.094115],[0.230372,3.476039],[0.070237,3.210610],[0.067154,3.190612],[0.925577,4.631504],[0.717733,4.295890],[0.015371,3.085028],[0.335070,3.448080],[0.040486,3.167440],[0.212575,3.364266],[0.617218,3.993482],[0.541196,3.891471]
]#生成X和y矩阵
dataMat = np.array(data)
X = dataMat[:,0:1]   # 变量x
y = dataMat[:,1]   #变量y# ========线性回归========
model = LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
model.fit(X, y)   # 线性回归建模
print('系数矩阵:\n',model.coef_)
print('线性回归模型:\n',model)
# 使用模型预测
predicted = model.predict(X)plt.scatter(X, y, marker='x')
plt.plot(X, predicted,c='r')plt.xlabel("x")
plt.ylabel("y")

 

  系数矩阵:
     [ 1.6314263]
    线性回归模型:
     LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28226.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据线性回归分析

目录 一、利用WPS进行线性回归分析 二、利用jupyter编程(不借助第三方库) 对数据进行线性回归分析 1、将数据文件上传(方便后续打开数据文件) 2、添加代码 ​编辑 3 、输出200组数据 4、输出2000组数据 5、利用pandas打开ex…

用ggplot2进行直线回归并添加回归方程和方差分析表

library(ggplot2) #加载ggplot2包 library(dplyr) #加载dplyr包 library(ggpmisc) #加载ggpmisc包mpg %>% ggplot(aes(x displ, y hwy)) geom_point(aes(color drv)) #以drv为分组设置点的颜色geom_smooth(method lm, formula y ~ x) #绘制回归直线stat_poly_eq(aes…

多元线性回归分析(Stata)

目录 一、回归分析的介绍与分类 二、多元线性回归模型的条件 1. 线性理解与内生性问题研究 2. 异方差问题 3. 多重共线性问题 一、回归分析的介绍与分类 回归分析的任务是:通过研究自变量X和因变量Y的关系,尝试去解释Y的形成机制,进而达…

一文轻松看懂线性回归分析的交互作用!

作者:丁点helper 来源:丁点帮你 前几天的文章,我们聚焦在回归分析,今天来看看在回归分析中常常要研究的一类难点问题——交互作用的探究。 交互(interaction),字面上不太好理解,但…

多元线性回归模型及stata实现:总论

多元线性回归模型及stata实现:总论 一、模型 Yβ0β1X1β2X2⋯βnXne Y: Dependent variable(因变量、应变量、反应变量、响应变量、被解释变量等)X1、X2⋯Xn:Independent variable(自变量、解释变量、控制变量&…

Linux 系统使用 git 提交代码-- git 的安装及使用(简明教学指南)

序 2023/02/09 晚 鉴于本篇文章收藏量比较多,那就给大家分享点在实际工作中使用频率最高的工作流命令吧。 场景如下(多人共同开发一个项目):我叫小明,参与了一个名为 chatGPT 的项目,这个 AI 最近很火,就以此作为例…

慕课前端售1299元的面试题【第二阶段】汇总 day05

上一篇链接 如果有看不懂的,别硬看,直接chatgpt,让它回答。 - 我的博客需要缩宽页面观看,图片无法均放,很抱歉。 1. 请说明 Ajax Fetch Axios 三者的区别? 1. 用 XMLHttpRequest 实现 Ajax function aja…

Javaweb复习之HTTPTomcatServelet

1.Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网,也称为万维网(www),能够通过浏览器访问的网站。 JavaWeb就是用Java技术来解决相关web互联网领域的技术栈 1.2 JavaWeb技术栈 B/S 架构:Browser/Server,浏览器/服务器 架构模…

DDD领域驱动设计实战-DDD微服务代码结构

更多内容关注微信公众号:fullstack888 DDD并没有给出标准的代码模型,不同的人可能会有不同理解。按DDD分层架构的分层职责定义,在代码模型里分别为用户接口层、应用层、领域层和基础层,建立了 interfaces、application、domain 和…

windows10环境下安装docker、Ubuntu、gitlab、wsl2

一、概述 By星年 文章参考 常用命令参考:(为了方便复制命令都做了换行处理,可直接双击复制。) 进docker terminal: docker exec -it gitlab /bin/bash 查看容器列表: docker ps -a 查看镜像列表: docker images git…

AIGC的发展史:从模仿到创造,AI的创造性探索

在 AI时代,人工智能不再是简单的机器,而是一个具有无限创造力的创造者。AIGC的诞生是人工智能从模仿到创造的一种进步,也是对人类创造力的一种新探索。 而这种由AI生成的内容究竟是如何发展而来的呢?在本文中,我们将探…

如何解决微信支付回调:支付成功及支付失败都不进行任何操作(支付坑)

这几天都在用微信支付这块功能,不得不吐槽一下微信支付的小坑 关于微信提供JSAPI文档,本来想着他们写的开发文档,肯定是没有任何问题。 结果在开发测试中,支付完成后或者支付失败都没任何效果。 我已经在JS里面做了跳转&#xff0…

android微信支付返回-1,支付失败总结!

解决办法1:看看二次生成sign的参数顺序是否跟我发的一致!很坑爹,必须一样才行! 解决办法2:请求得到prepayid参数的url必须是图中的Url

微信支付下载对账单400Bad Request问题解决方式

今天在做项目时, 需要用到微信支付的对账接口, 看了好多人的反馈, 加上自己的测试, 在用API V3生成了Sign后,对download_url进行Get请求访问时, 依然会出现问题, 就是Nginx报错400 Bad Request 看了好多人的文章, 基本上都是用的调用sdk生成的httpClient再次进行调用, 如下图 …

微信支付异常(“应答的微信支付签名验证失败“)记录

原因是: 配置错了“微信支付平台证书”; 如何解决: 1.下载 微信支付平台证书下载工具(Certificate Downloader)https://github.com/wechatpay-apiv3/CertificateDownloader 得到 CertificateDownloader-1.1.jar 2.执行命令 java -jar Cer…

postman-模拟上传图片

一、Chrome打开layui : 图片上传 右键打开检查,选择network,上传图片查看到: 二、postman测试 打开postman先设置post,并将url填好 : https://httpbin.org/post 选择form-data:添加key/value : key为与后台约定字段(一…

【苹果群发iMessage推送位置推】软件安装将会按照 Developer Program License Agreement

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

风辞远的科技茶屋:可怖的AI

大家好,我是脑极体的风辞远。一直以来我们都在写大块文章,很少有机会跟大家聊天。时间长了,总觉得这种方式有一点冷漠感,不够轻松,加上往往每篇文章只聚焦一个话题,而我们产能有限,就会有很多值…

千万别再乱点黄色APP了!

上一篇:文心一言员工跳槽工资翻倍,猎头:百万年薪很正常 网络诈骗千千万,涉黄APP占一半。 小伙来自山东菏泽,失手在手机上下载了非法的涉黄APP,当他准备观看视频时发现,需要充值成为会员或完成任…

如何分析系统平均负载过高?

文章目录 前言uptime命令平均负载平均负载到底是多少才合理平均负载和CPU的关系CPU与进程1比1,CPU使用率高导致负载变高I/O高,导致负载高进程数超过CPU数,导致负载高 前言 我相信你应该用过uptime命令查询系统负载的情况,或者在各…