线性回归——简单线性回归、多元线性回归

article/2025/10/8 22:07:51

回归分析是用来评估变量之间关系的统计过程。用来解释自变量X与因变量Y的关系。即当自变量X发生改变时,因变量Y会如何发生改变。
线性回归是回归分析的一种,评估的自变量X与因变量Y之间是一种线性关系。当只有一个自变量时,称为简单线性回归,当具有多个自变量时,称为多元线性回归
线性关系的理解:

  • 画出来的图像是直的。
  • 每个自变量的最高次项为1。

拟合是指构建一种算法,使得该算法能够符合真实的数据。从机器学习角度讲,线性回归就是要构建一个线性函数,使得该函数与目标值之间的相符性最好。从空间的角度来看,就是要让函数的直线(面),尽可能靠近空间中所有的数据点(点到直线的平行于y轴的距离之和最短)。线性回归会输出一个连续值。

线性回归模型

简单线性回归

我们可以以房屋面积(x)与房价(y)为例,二者是线性关系,房屋价格正比于房屋面积,假设比例为w:
在这里插入图片描述
然而,这种线性方程一定是过原点的,即x为0时,y也一定为0。这可能并不符合现实中某些场景。为了能够让方程具有更广泛的适应性,就要再增加一个截距,设为b,则方程可以变为:
在这里插入图片描述
以上方程就是数据建模的模型,w与b就是模型的参数。
线性回归是用来解释自变量与因变量之间的关系,但这种关系并非严格的函数映射关系。

多元线性回归

现实中的数据可能是比较复杂的,自变量也可能不止一个,例如,影响房屋价格也很可能不止房屋面积一个因素,可能还有是否在地铁附近,房间数,层数,建筑年代等诸多因素。不过,这些因素对房价影响的权重是不同的,因此,我们可以使用多个权重来表示多个因素与房屋价格的关系:
在这里插入图片描述

  • x:影响因素,即特征。
  • w:每个x的影响力度。
  • n:特征的个数。
  • y^:房屋的预测价格。

在这里插入图片描述
这样,就可以表示为:
在这里插入图片描述
多元线性回归在空间中,可以表示为一个超平面,去拟合空间中的数据点。
我们的目的就是从现有的数据中,去学习w与b的值。一旦w与b的值确定,就能够确定拟合数据的线性方程,这样就可以对未知的数据x进行预测y(房价)。

损失函数与参数求解

损失函数

对于机器学习来讲,就是从已知数据去建立一个模型,使得该模型能够对未知数据进行预测。实际上,机器学习的过程就是确定模型参数的过程。
对于监督学习来说,我们可以通过建立损失函数来实现模型参数的求解,损失函数也称目标函数代价函数,简单来说就是关于误差的一个函数。损失函数用来衡量模型预测值与真实值之间的差异。机器学习的目标,就是要建立一个损失函数,使得该函数的值最小。
也就是说,损失函数是一个关于模型参数的函数(以模型参数w作为自变量的函数),自变量可能的取值组合通常是无限的,我们的目标,就是要在众多可能的组合中,找到一组最合适的自变量组合,使得损失函数的值最小。
在线性回归中,我们使用平方损失函数(最小二乘法),定义如下:
在这里插入图片描述

简单线性回归程序

我们以鸢尾花数据集中花瓣长度与花瓣宽度为例,通过程序实现简单线性回归。

import numpy as np
#用于线性回归的类
from sklearn.linear_model import LinearRegression
#用来切分训练集与测试集
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
#设置输出精度。默认为8
np.set_printoptions(precision=2)iris = load_iris()
#获取花瓣长度作为x,花瓣宽度作为y。
x, y = iris.data[:,2].reshape(-1,1), iris.data[:,3]lr = LinearRegression()
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=0)
#使用训练集数据,训练模型。
lr.fit(x_train, y_train)
print('权重:', lr.coef_)
print('截距:', lr.intercept_)
y_hat = lr.predict(x_test)
print('实际值:', y_test[:5])
print('预测值:', y_test[:5])

在这里插入图片描述

import matplotlib.pyplot as pltplt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.size'] = 15plt.figure(figsize=(10,6))
plt.scatter(x_train, y_train, c='orange', label='训练集')
plt.scatter(x_test, y_test, c='g', marker='D', label='测试集')
plt.plot(x, lr.predict(x), 'r-')
plt.legend()
plt.xlabel('花瓣长度')
plt.ylabel('花瓣宽度')

在这里插入图片描述

plt.figure(figsize=(15,6))
plt.plot(y_test, label='真实值', color='r', marker='o')
plt.plot(y_hat, c='g', marker='o', ls='--', label='预测值')
plt.legend()

在这里插入图片描述

回归模型预测

对于回归模型,我们可以采用如下指标进行衡量。

  • MSE
  • RMSE
  • MAE
  • R2

MSE

MSE(Mean Squared Error),平均平方差,为所有样本数据误差(真实值与预测值之差)的平方和,然后取均值。
在这里插入图片描述

RMSE

RMSE(Root Mean Squared Error),平均平方误差的平方根,即在MSE的基础上,取平方根。
在这里插入图片描述

MAE

MAE(Mean Absolute Error),平均绝对值误差,为所有样本数据误差的绝对值和。
在这里插入图片描述

R2

R2为决定系数,用来表示模型拟合性的分值,值越高表示模型拟合性越好,在训练集中,R2的取值范围为[0,1]。在R2的取值范围为[-∞,1]。
R2的计算公式为1减去RSS与TSS的商。其中,TSS(Total Sum of Squares)为所有样本数据与均值的差异,是方差的m倍。而RSS(Residual sum of Squares)为所有样本数据误差的平方和,是MSE的m倍。
在这里插入图片描述
在这里插入图片描述
从公式定义可知,最理想情况,所有的样本数据的预测值与真实值相同,即RSS为0,此时R2为1。

from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_scoreprint('均方误差(MSE):',mean_squared_error(y_test,y_hat))
print('根均方误差(RMSE):',np.sqrt(mean_squared_error(y_test,y_hat)))
print('平均绝对值误差(MAE):',mean_absolute_error(y_test,y_hat))
print('训练集R^2:',r2_score(y_train,lr.predict(X_train)))
print('测试集R^2:',r2_score(y_test,y_hat))
#lr.score其实求解的就是R^2的值,但需要注意,r2_score方法与lr.score方法传递参数的内容是不同的。
print('训练集R^2:',lr.score(X_train,y_train))
print('测试集R^2:',lr.score(X_test,y_test))

在这里插入图片描述

多元线性回归程序

我们可以以波士顿房价为例来做程序演示

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
import pandas as pdboston = load_boston()
x, y = boston.data, boston.target
df = pd.DataFrame(np.concatenate([x, y.reshape(-1,1)], axis=1),columns = boston.feature_names.tolist()+['MEDV'])
df.head()

在这里插入图片描述

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=0)
lr = LinearRegression()
lr.fit(x_train, y_train)
y_hat = lr.predict(x_test)
print('权重:',lr.coef_)
print('截距:',lr.intercept_)
print('实际值:',y_test[:10])
print('测试值:',y_hat[:10])
print('训练值R^2:',lr.score(X_train, y_train))
print('测试值R^2:',lr.score(X_test, y_test))

在这里插入图片描述


http://chatgpt.dhexx.cn/article/MfidvbfK.shtml

相关文章

[学习笔记]多元线性回归分析——理解篇

回归分析是数据分析中最基础最重要的分析工具,绝大多数的数据分析问题,都可以使用回归的思想来解决。回归分析的任务就是,通过研究自变量x和因变量y的相关关系,尝试去解释y的形成机制,进而达到通过x去预测y的目的。 常…

用 Python 进行多元线性回归分析(附代码)

很多人在做数据分析时会经常用到一元线性回归,这是描述两个变量间统计关系的最简单的回归模型。但现实问题中,我们往往会碰到多个变量间的线性关系的问题,这时就要用到多元线性回归,多元线性回归是一元回归的一种推广,…

【数学建模】-多元线性回归分析

文章目录 回归的思想回归分析:研究X和Y之间相关性的分析。相关性因变量Y自变量X 回归分析的使命回归分析的分类数据的分类一元线性回归对于线性的理解回归系数的解释内生性的探究内生性的蒙特卡罗模拟核心解释变量和控制变量回归系数的解释什么时候取对数&#xff1…

多元回归分析

建模复习 目录 前言 一、回归的思想 1,介绍 2,回归分析的分类 3,数据类型 二、一元线性回归 1,一元线性函数拟合 2,一元线性回归模型 3,回归系数 1,回归系数的解释 2,内生性 3&…

VC2015运行库安装失败

VC2015安装失败,0x80240017-未指定的错误。 32位操作系统 64位操作系统 依次安装即可。 网盘链接:https://pan.baidu.com/s/1FGSAbpPuxTwszrQGMblPRg 提取码:z6ah 如遇到缺少什么.dll,可以通过增加某dll至环境变量中。

VC运行库修复安装一键安装

VC.RedistInstaller1.6.rar: http://u1.share.orcy.net.cn/file/12559096-413098201 如果上述安装不成功可尝试下载: Visual C AIO v2019.05.21(自动强制安装谨慎双击).zip: http://u1.share.orcy.net.cn/file/12559096-413098413 ------…

phpstudy没有安装VC11、VC14运行库

文章目录 出现问题解决方案安装步骤安装VC11安装VC14验证结果出现问题 phpstudy2018–>切换版本php-5.5.36时—>提示错误 解决方案

Windows 技术篇-通过注册表查找vc运行库所在位置实战演示,通过ProductCode查看vc++运行库安装位置

vc 运行库各个版本的位置安装位置不尽相同,而且根据安装方式不同也有一定区别,总结了一套自己的方法,我们自己来探索: 我用 vc2015 举例,2015 有很多版本,每个版本对应的产品代码是不一样的,我…

vc2005运行库彻底卸载_VC运行库安装卸载工具-Visual C ++ AIO(VC运行库安装卸载工具)下载 v2019.05.21官方版--pc6下载站...

VisualCAIOVC运行库安装卸载工具包含了所有VisualC最新版,可以通过命令行静默安装,可以卸载所有已安装版本及更新为最新版,总之这是一个不错的VisualC运行库安装卸载程序。。 相关软件软件大小版本说明下载地址 Visual C AIO(VC运行库安装卸…

c语言 运行库 下载,Visual C++运行库合集

Visual C++运行库合集是基于Windows操作系统打造的可视化集成开发环境,能够为用户提供C、标准C++、ATL、MFC、OpenMP以及MSDIA等类库的运行支持,助广大用户能够更好在自己的电脑上运行VisualC++ 开发的应用程序。 Visual C++运行库具有集成开发环境,可提供编辑C语言,C++以及…

win10自带vc运行库吗?

运行库是系统中非常重要的组件,像一些绿化版的软件如果电脑没有运行库就无法运行,但是也不一定就要安装VC运行库一般而言,将相关的.dll文件复制出来,放在相关程序所在目录中就可以了。比如小编从网上下载了一款破解版的QQ&#xf…

phpStudy启动失败提示:缺少VC9运行库

镜像是官方2008 64位中文版 按照提示安装了VC9以后 软件依旧无法运行阿帕奇,提示缺少VC9运行库这是因为:64位系统除了要装64位的运行库也要装32位的运行库32位的VC9运行库下载:http://www.microsoft.com/zh-CN/download/details.aspx?id5582…

php程序检测不到vc9,XAMPP2016中文精简版启动失败 缺少运行库解决办法

[摘要] XAMPP是一款强大的建站集成软件包,但XAMPP2016 中文精简版在启动的时候会出现“缺少运行库”“程序检测不到VC9运行库”等问题,其实只需要正确安装vc9库就能解决问题了。 XAMPP是一款强大的建站集成软件包,对于经常折腾WordPress的博主…

请自行检查是否安装VC9运行库??

phpStudy是一款PHP调试环境的程序集成包,该程序包集成最新的ApachePHPMySQLphpMyAdminZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。 1、程序自带FTP服务器,支持多用户,无需…

phpStudy启动失败时的解决方法 提示缺vc9运行库

php5.3、5.4和apache都是用vc9编译,电脑必须安装vc9运行库才能运行。 php5.5、5.6是vc11编译,如用php5.5、5.6必须安装vc11运行库。 php7.0、7.1是vc14编译,如用php7.0、7.1必须安装vc14运行库。 vc9和vc11运行库下载:http://www.…

django2.0调用银联支付接口实现银联支付

准备工作: 1.银联技术开放平台注册:https://open.unionpay.com/tjweb/acproduct/list?apiservId448 2.点击网关支付 --> 我要测试 (按照提示下载密钥) 3.安装需要的模块 pip install pyOpenSSL 代码实现: 目录结…

小程序调银联支付接口

这几天接了一个需求,将之前的项目支付接口改成银联的支付接口,简单说一下,对于没有接触过支付的小伙伴可能会有那么一丢丢启发… 环境:微信小程序银联支付 文档:公司提供的开发文档银联官方文档 框架:Dub…

【java支付一 】java整合银联支付

1.注册银联账号后进入测试地址 传送门 2.下载源码 银联源码地址 3.根据需求(这里我们肯定使用JAVA)选择不同的开发包,导入到项目中 4.修改 Java Version SDK (通用版)\ACPSample_B2C\src 文件中acp_sdk.propertites 证书以及配置回调的地址…

银联网关支付demo

对接银联支付接口,通过一个例子向商家支付金额。 1.首先在银联开放平台下载支付Demo,点击链接 或者直接拿我修改好的demo,链接: https://pan.baidu.com/s/1FywgOf5j_EYj5NQYHPeGqg 提取码: d2hp 建议拿我的现成版demo(修改了一些问题),解压后按照下面…

银联支付流程

本文的前提是你已经申请好了银联的相关资料,即将进入集成阶段或者遇到坑了(没错。我踩了 吐槽下 这东西真是渣),不bb了,直接开始吧 照着文档把相关的so jar data.bin文件拷贝到相应的文件夹,权限&#xff…