一、学习目标
- 基础认知:理解线性回归的定义、一元与多元回归的区别及典型应用场景;
- 技能掌握:熟练使用 sklearn 线性回归 API,掌握损失函数(MAE/MSE/RMSE)的应用,理解正规方程与梯度下降的原理;
- 实战能力:能独立完成数据预处理、模型训练、评估,并通过波士顿房价案例落地线性回归技术。
二、目录
- 第一章 线性回归简介
1.1 概念与直观案例
1.2 线性回归的分类
1.3 典型应用场景
- 第二章 线性回归 API 快速入门
2.1 一元回归案例:身高预测体重
2.2 API 核心步骤
2.3 完整代码实现
- 第三章 线性回归的核心原理
3.1 损失函数的作用
3.2 常见损失函数(LS/MSE/MAE)
3.3 数学基础:导数与偏导
3.4 数学基础:矩阵与向量
- 第四章 线性回归的求解方法
4.1 正规方程法(闭式解)
4.2 梯度下降算法(迭代解)
4.3 两种方法的对比
- 第五章 回归模型评估方法
5.1 评估指标定义与公式
5.2 评估 API 调用
5.3 指标选择原则
- 第六章 API 详解与波士顿房价实战
6.1 核心 API 参数与属性
6.2 波士顿房价预测完整流程
- 第七章 整体总结
第一章 线性回归简介
1.1 概念与直观案例
线性回归是用回归方程(线性函数)对自变量(特征)和因变量(目标值)的关系建模的分析方法,核心是找到最优线性函数,使预测值与真实值的误差最小。
案例:根据身高预测体重
已知 5 组身高 - 体重数据,预测身高 176 对应的体重:
| 编号 | 身高(X,cm) | 体重(Y,kg) |
| 1 | 160 | 56.3 |
| 2 | 166 | 60.6 |
| 3 | 172 | 65.1 |
| 4 | 174 | 68.5 |
| 5 | 180 | 75 |
| 6 | 176 | ? |
思路:从已知数据中拟合线性关系 (k = 斜率,b = 截距),再代入 X=176 预测 Y。
1.2 线性回归的分类
根据自变量(特征)的数量,线性回归分为两类:
| 类型 | 定义 | 公式 | 案例场景 |
| 一元线性回归 | 目标值仅与 1 个特征相关 | | 身高→体重、温度→冰销量 |
| 多元线性回归 | 目标值与多个特征相关 | | 面积 + 位置 + 楼层→房价、GDP + 人口→消费额 |
矩阵表示统一:无论一元 / 多元,均可表示为 \( h(w) = w^T X + b \),其中:
(权重向量),
(特征向量);
- 若将
融入权重(新增特征
),则公式简化为
(
)
1.3 典型应用场景
线性回归是机器学习中最基础的预测模型,适用于目标值为连续型数据的场景,例如:
- 物理领域:钢轨伸缩长度与温度的关系建模;
- 环境领域:昆虫鸣叫次数与气温 / 湿度的关联预测;
- 经济领域:国内 GDP 与双十一销售额的趋势分析;
- 生活领域:房屋面积、地段、房龄与房价的预测。
第二章 线性回归 API 快速入门
2.1 一元线性回归案例:身高预测体重
需求:基于 5 组身高 - 体重数据,预测身高 176cm 对应的体重。
核心工具:sklearn.linear_model.LinearRegression(基于正规方程实现,适合小数据集)。
2.2 API 使用步骤
线性回归 API 遵循 “导包→备数据→实例化→训练→预测” 的固定流程:
- 导包:导入线性回归模型类;
- 备数据:特征(X)需为二维数组(),目标值(y)为一维数组;
- 实例化:创建模型对象,默认计算偏置(fit_intercept=True);
- 训练:调用 fit(X, y) 拟合数据,学习线性关系;
- 预测:调用 predict(X_test) 生成预测结果;
- 查参数:通过 coef_(权重 / 斜率)和 intercept_(偏置 / 截距)查看模型学到的线性关系。
2.3 完整代码实现
# 1. 导包
from sklearn.linear_model import LinearRegression
# 2. 定义预测函数
def predict_weight_by_height():
# 准备数据:X为身高(二维数组),y为体重(一维数组)
X = [[160], [166], [172], [174], [180]] # 5个样本,1个特征
y = [56.3, 60.6, 65.1, 68.5, 75] # 对应5个样本的目标值
# 3. 实例化模型
estimator = LinearRegression() # 默认计算偏置(fit_intercept=True)
# 4. 训练模型:学习身高与体重的线性关系
estimator.fit(X, y)
# 查看模型参数(线性方程 Y = kX + b 中的 k 和 b)
print("斜率(k):", estimator.coef_[0]) # coef_是数组,取第0个元素(仅1个特征)
print("截距(b):", estimator.intercept_) # 偏置项
# 5. 预测身高176cm对应的体重
X_test = [[176]] # 预测数据需与训练数据格式一致(二维数组)
y_pred = estimator.predict(X_test)
print(f"身高176cm对应的预测体重:{y_pred[0]:.2f}kg")
# 执行函数
if __name__ == "__main__":
predict_weight_by_height()
运行结果示例:
斜率(k):0.875
截距(b):-83.7
身高176cm对应的预测体重:60.30kg
第三章 线性回归的核心原理
3.1 为什么需要损失函数?
线性回归的目标是 “找到最优的 w 和 b,使预测值与真实值的误差最小”。但 “误差最小” 需要量化标准—— 损失函数就是这个标准,它衡量模型预测结果与真实结果的 “差距”,是模型优化的 “指南针”。
3.2 常见损失函数
| 损失函数类型 | 定义与公式 | 特点与适用场景 |
| 最小二乘法(LS) | 误差平方和: | 直观反映总误差,易求导,适用于无异常值场景 |
| 均方误差(MSE) | 误差平方的平均值: | 消除样本数量影响,放大异常值误差,常用作训练损失 |
| 平均绝对误差(MAE) | 误差绝对值的平均值: | 对异常值鲁棒(不放大误差),适用于异常值较多的场景 |
注:是第 i 个样本的预测值,
是第 i 个样本的真实值,m 是样本总数。
3.3 数学基础:导数与偏导
3.3.1 导数的定义与作用
- 定义:描述函数在某一点的瞬时变化率(几何意义:函数在该点的切线斜率);
- 核心作用:求函数极值 —— 当导数为 0 时,函数可能达到极大值或极小值(线性回归需找损失函数的极小值)。
3.3.2 偏导的定义(多元函数)
- 定义:对多元函数中的某一个变量求导,其他变量固定不变;
- 例:对
求偏导:
-
- 对
偏导:
(固定
);
- 对
-
- 对
偏导:
(固定
)。
- 对
3.3.3 复合函数求导(关键)
- 规则:外函数求导 × 内函数求导;
- 例:求
的导数:
-
- 外函数:
,
,外导:
;
- 外函数:
-
- 内函数
,内导:
;
- 内函数
-
- 总导数:
。
- 总导数:
3.4 数学基础:矩阵与向量
3.4.1 核心概念(机器学习常用)
| 类型 | 定义 | 示例 |
| 标量(scalar) | 单个数值(无方向) | 身高 176cm、体重 60kg |
| 向量(vector) | 一维有序数组(列向量为主) | 成绩向量: |
| 矩阵(matrix) | 二维数组(m 行 ×n 列) | 2 人 3 科成绩: |
| 张量(tensor) | 多维数组(矩阵的推广) | 3 个 2×3 矩阵: |
3.4.2 核心运算规则
- 矩阵乘法:
-
- 条件:左矩阵列数 = 右矩阵行数(如
,
,则
);
- 条件:左矩阵列数 = 右矩阵行数(如
-
- 计算:左矩阵行 × 右矩阵列,元素相乘求和;
-
- 例:
,
,则
。
- 例:
- 矩阵转置:
-
- 规则:行变列、列变行(记为
);
- 规则:行变列、列变行(记为
-
- 例:
,
。
- 例:
- 单位矩阵:
-
- 定义:主对角线为 1,其余为 0 的方阵(记为 I);
-
- 性质:
(如
)。
- 性质:
第四章 线性回归的求解方法
4.1 正规方程法(闭式解)
4.1.1 核心公式
使 MSE 损失函数最小的权重 \( w \) 满足:
:特征矩阵(
,n 为特征数,新增
融入偏置);
:目标值向量(
);
:
的逆矩阵(需保证可逆)。
4.1.2 优缺点
| 优点 | 缺点 |
| 无需选择学习率,操作简单 | 特征数 n 较大(如 n>10000)时,计算 |
| 无需迭代,一次求解 | 若 |
| 无需特征标准化 | 对异常值敏感 |
4.2 梯度下降算法(迭代解)
4.2.1 核心思想
类比 “下山”:从初始位置出发,沿梯度负方向(损失函数下降最快的方向)逐步移动,直到损失函数收敛到极小值。
4.2.2 核心公式(权重更新)
:当前权重,
:更新后权重;
:学习率(步长,推荐 0.001~0.01),控制每步移动距离;
:损失函数
对 w 的梯度(多元函数时为偏导向量)。
4.2.3 算法分类
| 类型 | 特点 | 适用场景 |
| 全梯度下降(FGD) | 用全部样本计算梯度,稳定但训练慢 | 小数据集 |
| 随机梯度下降(SGD) | 用单个样本计算梯度,速度快但震荡大,易陷局部最优 | 大数据集、需快速迭代场景 |
| 小批量梯度下降(Mini-Batch) | 用小批量样本(如 32/64/128 个)计算梯度,兼顾速度与稳定性 | 绝大多数工业场景(主流选择) |
4.2.4 学习率的影响
- 学习率太小:下降慢,迭代次数多;
- 学习率太大:易越过极小值,导致震荡甚至梯度爆炸(损失函数发散)。
4.3 两种方法对比
| 对比维度 | 正规方程法 | 梯度下降法 |
| 求解方式 | 闭式解(一次计算) | 迭代解(多次更新) |
| 学习率依赖 | 无 | 有(需调参) |
| 特征数适应性 | 适合 n 小(n<10000) | 适合 n 大(如 n>10000、深度学习) |
| 异常值敏感性 | 敏感 | 较鲁棒(迭代中逐步调整) |
| 特征标准化 | 无需 | 需(避免不同量纲影响梯度方向) |
第五章 回归模型评估方法
5.1 评估指标定义与公式
| 指标 | 公式 | 含义与特点 |
| MAE(平均绝对误差) | | 反映 “真实平均误差”,对异常值鲁棒 |
| MSE(均方误差) | | 放大异常值误差,无实际物理意义 |
| RMSE(均方根误差) |
| 与目标值同量纲,直观反映误差大小 |
注:为真实值,
为预测值,m 为测试集样本数。
5.2 API 调用(sklearn.metrics)
from sklearn.metrics import mean_absolute_error, mean_squared_error
import numpy as np
# 示例:真实值与预测值
y_true = [75, 68.5, 65.1] # 真实体重
y_pred = [74.2, 69.1, 64.8]# 预测体重
# 计算指标
mae = mean_absolute_error(y_true, y_pred)
mse = mean_squared_error(y_true, y_pred)
rmse = np.sqrt(mse) # RMSE需手动计算(sklearn无直接API)
print(f"MAE: {mae:.2f}")
print(f"MSE: {mse:.2f}")
print(f"RMSE: {rmse:.2f}")
5.3 指标对比与选择
| 指标 | 优点 | 缺点 | 适用场景 |
| MAE | 对异常值鲁棒,计算简单 | 无法区分大误差的影响 | 数据含较多异常值(如房价数据) |
| MSE | 对大误差敏感(优化重点) | 无物理意义,受量纲平方影响 | 模型训练损失(优化目标) |
| RMSE | 与目标值同量纲,直观 | 对异常值敏感 | 最终评估报告(如 “平均误差 ±2kg”) |
第六章 线性回归 API 详解与实战
6.1 核心 API 参数与属性
sklearn 提供两种线性回归 API,分别对应正规方程和梯度下降:
6.1.1 正规方程 API:LinearRegression
from sklearn.linear_model import LinearRegression
# 实例化参数
estimator = LinearRegression(
fit_intercept=True, # 是否计算偏置(默认True,建议保留)
copy_X=True, # 是否复制特征矩阵(默认True,避免修改原数据)
n_jobs=None # 并行计算数(默认None,仅1个CPU核心)
)
# 核心属性(训练后可用)
estimator.coef_ # 权重向量(shape=(n_features,))
estimator.intercept_ # 偏置项(标量)
6.1.2 梯度下降 API:SGDRegressor
from sklearn.linear_model import SGDRegressor
# 实例化参数
estimator = SGDRegressor(
loss="squared_loss", # 损失函数(默认"squared_loss"=MSE,适合线性回归)
fit_intercept=True, # 是否计算偏置(默认True)
learning_rate="invscaling", # 学习率策略(默认"invscaling"=随迭代减小)
eta0=0.01, # 初始学习率(默认0.01,需配合learning_rate调整)
max_iter=1000, # 最大迭代次数(默认1000)
tol=1e-3 # 收敛阈值(损失下降小于tol则停止,默认1e-3)
)
# 核心属性(训练后可用)
estimator.coef_ # 权重向量
estimator.intercept_ # 偏置项
6.2 波士顿房价预测完整流程
6.2.1 案例背景
- 数据来源:sklearn 内置数据集,包含 506 个波士顿房屋样本,13 个特征(如犯罪率、平均房间数、距离市中心距离等),目标值为房屋均价(单位:千美元)。
- 核心任务:用线性回归模型根据 13 个特征预测房屋均价。
6.2.2 完整代码(含正规方程与梯度下降)
# 1. 导入所需库
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression, SGDRegressor
from sklearn.metrics import mean_squared_error
import numpy as np
# 2. 加载并预处理数据
def load_and_preprocess_data():
# 加载数据
boston = load_boston()
X = boston.data # 特征矩阵(506, 13)
y = boston.target # 目标值(506,)
# 划分训练集与测试集(8:2)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=22 # random_state固定划分结果
)
# 特征标准化(梯度下降必需,消除量纲影响)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train) # 训练集:拟合+转换
X_test_scaled = scaler.transform(X_test) # 测试集:仅用训练集参数转换
return X_train_scaled, X_test_scaled, y_train, y_test, scaler
# 3. 正规方程法建模
def linear_reg_normal():
X_train, X_test, y_train, y_test, _ = load_and_preprocess_data()
# 实例化并训练模型
estimator = LinearRegression()
estimator.fit(X_train, y_train)
# 预测与评估
y_pred = estimator.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
# 输出结果
print("="*50)
print("【正规方程法结果】")
print(f"模型权重(前5个特征):{estimator.coef_[:5]}") # 仅展示前5个特征的权重
print(f"模型偏置:{estimator.intercept_:.2f}")
print(f"测试集 MSE:{mse:.2f}")
print(f"测试集 RMSE:{rmse:.2f}")
print("="*50)
# 4. 梯度下降法建模
def linear_reg_sgd():
X_train, X_test, y_train, y_test, _ = load_and_preprocess_data()
# 实例化并训练模型
estimator = SGDRegressor(
loss="squared_loss",
learning_rate="invscaling",
eta0=0.01,
max_iter=1000,
tol=1e-3,
random_state=22
)
estimator.fit(X_train, y_train)
# 预测与评估
y_pred = estimator.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
# 输出结果
print("\n" + "="*50)
print("【梯度下降法结果】")
print(f"模型权重(前5个特征):{estimator.coef_[:5]}")
print(f"模型偏置:{estimator.intercept_[0]:.2f}") # SGDRegressor.intercept_是数组
print(f"测试集 MSE:{mse:.2f}")
print(f"测试集 RMSE:{rmse:.2f}")
print("="*50)
# 5. 执行建模
if __name__ == "__main__":
linear_reg_normal()
linear_reg_sgd()
6.2.3 结果分析
- 两种方法的 RMSE 接近(约 4.5~5.0),说明模型效果一致;
- 正规方程法无需标准化,但梯度下降法必需(否则因特征量纲差异导致梯度方向异常);
- 当特征数增加(如超过 1000)时,梯度下降法的速度优势会更明显。
第七章 整体总结
- 线性回归核心:用线性函数 \( h(w) = w^T X + b \) 拟合特征与连续目标值的关系,通过最小化损失函数找到最优权重;
- API 选择:小数据集用 LinearRegression(正规方程),大数据集用 SGDRegressor(梯度下降);
- 关键步骤:数据预处理(尤其是标准化,梯度下降必需)→ 模型训练 → 指标评估(优先 RMSE/MAE);
- 原理重点:损失函数是优化目标,导数 / 偏导是求极值的工具,矩阵是高维数据的表示方式;
- 实战技巧:学习率需调参(从 0.001 开始尝试),评估指标需结合业务场景选择(异常值多用电 MAE,需直观性用 RMSE)。
1367

被折叠的 条评论
为什么被折叠?



