【机器学习】线性回归学习笔记:从理论到Python实战
文章目录
前言
本文是机器学习线性回归的学习笔记,涵盖以下核心内容:
- 线性回归基础:变量关系与定义
- 一元线性回归:公式 Y = β 0 + β 1 X + ϵ Y = \beta_0 + \beta_1 X + \epsilon Y=β0+β1X+ϵ 与参数解释
- 多元线性回归:多变量扩展与矩阵表示
- 误差项分析:重要性、独立同分布与高斯分布
- Python实战:使用 Scikit-learn 完成从数据到预测的全流程
1.什么是线性回归?
1.1 定义
线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
线性回归是用来做回归任务的,不能做分类任务。(分类交给逻辑回归)
相关关系:包含因果关系和平行关系
因果关系:回归分析【原因引起结果,需要明确自变量和因变量】
平行关系:相关分析【无因果关系,不区分自变量和因变量】
1.2 案例理解:从实际问题到线性回归模型
根据工资预测贷款额度
假设银行收集了部分客户的工资与获批贷款额度数据:
| 工资(元) | 贷款额度(元) |
|---|---|
| 4000 | 10000 |
| 8000 | 12000 |
| 5000 | 8000 |
| 3000 | 10000 |
| 6000 | 15000 |
| 7000 | ? |
问题:
- 自变量(Independent Variable):工资。这是我们已知的、用来进行预测的特征。
- 因变量(Dependent Variable):贷款额度。这是我们想要预测的目标。
- 核心问题:工资到底对贷款额度产生多大的影响?如何建立一个公平、可量化的规则,根据新的工资水平(例如7000元)来预测其可能的贷款额度?
线性回归如何介入?
这正是线性回归要解决的核心问题。它试图找到一个最佳的线性方程(一条直线)来描述工资(X)和贷款额度(Y)之间的关系。这个方程可以表示为:
Y ^ = b 0 + b 1 X \hat{Y} = b_0 + b_1 X Y^=b0+b1X
其中:
- Y ^ \hat{Y} Y^ 是根据模型预测的贷款额度。
- b 0 b_0 b0 是截距(当工资为0时的基础贷款额度,在实际业务中可能有特定含义)。
- b 1 b_1 b1 是回归系数,它量化了“工资的影响”,即工资每增加1元,贷款额度平均增加 b 1 b_1 b1 元。
通过历史数据(表格前5行),线性回归算法可以“学习”出最优的 b 0 b_0 b0 和 b 1 b_1 b1。然后,我们就可以用这个学到的模型去预测新客户(工资7000元)的贷款额度。
总结:这个案例直观展示了线性回归的建模思想——从观测到的数据(工资与贷款额度)中,寻找一个线性规律,从而对未知情况进行预测。
2.一元线性回归模型
模型公式
一元线性回归模型用于描述一个自变量(X)与一个因变量(Y)之间的线性关系。其基本公式如下:
总体回归模型:
Y
=
β
0
+
β
1
X
+
ϵ
Y = \beta_0 + \beta_1 X + \epsilon
Y=β0+β1X+ϵ
样本回归方程(估计的模型):
Y
^
=
b
0
+
b
1
X
\hat{Y} = b_0 + b_1 X
Y^=b0+b1X
其中:
- Y Y Y:因变量(实际观测值)。
- X X X:自变量。
- Y ^ \hat{Y} Y^:因变量的预测值。
- β 0 \beta_0 β0(总体) / b 0 b_0 b0(样本):截距(Intercept)。表示当 X = 0 X = 0 X=0 时 Y Y Y 的期望值。
- β 1 \beta_1 β1(总体) / b 1 b_1 b1(样本):斜率(Slope)或回归系数。表示 X X X 每变动一个单位, Y Y Y 平均变动的量。
- ϵ \epsilon ϵ:随机误差项,除线性因素外的随机因素所产生的误差。代表模型无法解释的随机波动(假设其均值为0,方差恒定)。
3.多元线性回归模型
多元线性回归模型是一元线性回归的扩展,用于描述多个自变量( X 1 , X 2 , . . . , X p X_1, X_2, ..., X_p X1,X2,...,Xp)与一个因变量( Y Y Y)之间的线性关系。
3.1 模型公式
总体回归模型:
Y
=
β
0
+
β
1
X
1
+
β
2
X
2
+
.
.
.
+
β
p
X
p
+
ϵ
Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + ... + \beta_p X_p + \epsilon
Y=β0+β1X1+β2X2+...+βpXp+ϵ
样本回归方程(估计的模型):
Y
^
=
b
0
+
b
1
X
1
+
b
2
X
2
+
.
.
.
+
b
p
X
p
\hat{Y} = b_0 + b_1 X_1 + b_2 X_2 + ... + b_p X_p
Y^=b0+b1X1+b2X2+...+bpXp
其中:
- Y Y Y:因变量(实际观测值)。
- X 1 , X 2 , . . . , X p X_1, X_2, ..., X_p X1,X2,...,Xp: p p p 个自变量。
- Y ^ \hat{Y} Y^:因变量的预测值。
- β 0 \beta_0 β0(总体) / b 0 b_0 b0(样本):截距。表示当所有自变量为 0 时 Y Y Y 的期望值。
- β 1 , β 2 , . . . , β p \beta_1, \beta_2, ..., \beta_p β1,β2,...,βp(总体) / b 1 , b 2 , . . . , b p b_1, b_2, ..., b_p b1,b2,...,bp(样本):各自变量的偏回归系数。表示在控制其他自变量不变的情况下,该自变量 X j X_j Xj 每变动一个单位, Y Y Y 平均变动的量。
- ϵ \epsilon ϵ:随机误差项,假设其均值为 0,方差恒定,且与自变量无关。
3.2 矩阵表示
为了便于计算和理论推导,多元线性回归常使用矩阵表示:
总体模型:
Y
=
X
β
+
ϵ
\mathbf{Y} = \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\epsilon}
Y=Xβ+ϵ
样本估计:
Y
^
=
X
b
\hat{\mathbf{Y}} = \mathbf{X}\mathbf{b}
Y^=Xb
其中:
- Y \mathbf{Y} Y: n × 1 n \times 1 n×1 的因变量观测值向量。
- X \mathbf{X} X: n × ( p + 1 ) n \times (p+1) n×(p+1) 的设计矩阵(第一列常为 1,对应截距)。
- β \boldsymbol{\beta} β: ( p + 1 ) × 1 (p+1) \times 1 (p+1)×1 的总体参数向量。
- b \mathbf{b} b: ( p + 1 ) × 1 (p+1) \times 1 (p+1)×1 的样本估计参数向量。
- ϵ \boldsymbol{\epsilon} ϵ: n × 1 n \times 1 n×1 的随机误差向量。
3.3 Python实战案例:体重、年龄与血压收缩压的关系
下面通过一个具体的Python示例,演示如何使用多元线性回归模型分析体重、年龄与血压收缩压之间的关系。
数据准备与导入
首先导入必要的库并加载数据:
import pandas as pd
from sklearn.linear_model import LinearRegression
# 导入数据
data = pd.read_csv("多元线性回归.csv", encoding="gbk", engine='python')
代码解释:
pandas:用于数据处理和分析sklearn.linear_model.LinearRegression:Scikit-learn中的线性回归模型- 数据文件使用GBK编码,
engine='python'确保兼容性
数据探索与相关性分析
在建立模型前,先分析变量间的相关性:
# 打印相关系数矩阵
corr = data[["体重", "年龄", "血压收缩"]].corr()
print("相关系数矩阵:")
print(corr)
代码解释:
corr()方法计算皮尔逊相关系数- 相关系数范围:-1到1,绝对值越大表示相关性越强
- 正值表示正相关,负值表示负相关
模型建立与训练
建立多元线性回归模型并训练:
# 第二步,估计模型参数,建立回归模型
lr_model = LinearRegression()
# 准备自变量和因变量
x = data[['体重', '年龄']] # 自变量:体重、年龄
y = data[['血压收缩']] # 因变量:血压收缩压
# 训练模型
lr_model.fit(x, y)
代码解释:
LinearRegression():创建线性回归模型实例x:包含两个自变量的DataFrame(体重、年龄)y:因变量DataFrame(血压收缩压)fit(x, y):使用最小二乘法估计模型参数
模型评估与检验
评估模型的拟合效果:
# 对回归模型进行检验
score = lr_model.score(x, y) # 表示模型对训练数据的拟合程度
print(f"模型R²分数:{score}")
代码解释:
score():计算决定系数R²- R²取值范围:0到1,越接近1表示模型拟合越好
- R² = 1 - (残差平方和 / 总平方和)
模型参数解读
查看训练得到的模型参数:
# 获取模型参数
print(f"截距 (b0):{lr_model.intercept_[0]:.4f}")
print(f"体重系数 (b1):{lr_model.coef_[0][0]:.4f}")
print(f"年龄系数 (b2):{lr_model.coef_[0][1]:.4f}")
# 构建回归方程
print(f"\n回归方程:血压收缩压 = {lr_model.intercept_[0]:.4f} + {lr_model.coef_[0][0]:.4f} × 体重 + {lr_model.coef_[0][1]:.4f} × 年龄")
代码解释:
intercept_:截距项(b₀)coef_:回归系数数组(b₁, b₂, …)- 系数正负表示自变量与因变量的关系方向
- 系数大小表示自变量对因变量的影响程度
模型预测与应用
使用训练好的模型进行预测:
# 使用模型进行预测
predictions = lr_model.predict(x)
print("\n前5个样本的预测值:")
print(predictions[:5])
# 也可以预测新数据
new_data = pd.DataFrame({
'体重': [65, 70, 75],
'年龄': [40, 45, 50]
})
new_predictions = lr_model.predict(new_data)
print("\n新数据的预测结果:")
print(new_predictions)
案例总结
通过这个案例,我们可以看到:
- 数据准备:正确导入和处理数据是建模的基础
- 相关性分析:了解变量间关系有助于模型解释
- 模型训练:使用
fit()方法估计参数 - 模型评估:R²分数衡量模型拟合优度
- 参数解释:系数反映了各自变量对因变量的影响
- 预测应用:训练好的模型可用于新数据预测
4.误差项分析
4.1 误差项可以省略吗?
答:误差项不可省略,误差是必然产生的。
并且由于产生了误差项,我们便可以基于误差的特点来进行对线性回归的参数估计的。
4.2 误差项有什么特点?
答: 独立同分布。
独立:每个样本点都是独立的;
例:贷款,每个人与每个人之间是没有联系的,贷多少钱完全基于你的工资。
同分布:同分布就是我的这套估计体系是我人民银行的估计体系,每个人都是服从我的分布体系,不会使用别人的估计体系,也就是说每个样本点都处于同一个分布函数下。
4.3 误差项满足高斯分布
高斯分布:又称正态分布,概率密度函数为:
f ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 f(x) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}} f(x)=2πσ1e−2σ2(x−μ)2
其中:
- x x x:随机变量的取值。
- μ \mu μ:分布的均值(Mean),决定分布的中心位置。
- σ \sigma σ:分布的标准差(Standard Deviation),决定分布的宽度(离散程度)。
该函数描述了随机变量 X X X 取值为 x x x 时的概率密度。曲线呈“钟形”,关于均值 μ \mu μ 对称。
特点:
1.期望为0
2. 方差相同,为
σ
2
\sigma^2
σ2
误差满足高斯分布的原因:
1、数据样本 偏离线性回归模型不会太远。
2、大部分都是在偏离一点点。
3、极少数的样本点会偏离比较远。
高斯分布图示例

总结
本文系统介绍了线性回归的核心内容:
-
线性回归基础:明确了变量间的相关关系。
-
一元线性回归:掌握 Y = β 0 + β 1 X + ϵ Y = \beta_0 + \beta_1 X + \epsilon Y=β0+β1X+ϵ 的基本公式,理解截距、斜率和误差项的含义。
-
多元线性回归:扩展至多个自变量,掌握矩阵表示形式,理解偏回归系数的解释。
-
误差项分析:认识到误差项不可省略,具有独立同分布特性,且通常服从高斯分布。
-
Python实战:通过体重、年龄与血压收缩压的案例,完整演示了从数据导入、相关性分析、模型训练、评估到预测应用的完整流程。
更多推荐
所有评论(0)