
一、什么是线性回归
1.1 案例引入:体重预测血压
假设我们有这样一组数据:体重越重,血压收缩值往往越高。如果来了一个体重 88kg 的人,你能预测他的血压吗?
| 体重 | 76 | 85 | 91 | 82 | 95 |
|---|---|---|---|---|---|
| 收缩压 | 120 | 124 | 141 | 126 | 155 |
线性回归要做的,就是把这个趋势用一条"最优直线"画出来。
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
weight = [76, 85, 91, 82, 95]
sbp = [120, 124, 141, 126, 155]
plt.figure(figsize=(8, 5))
plt.scatter(weight, sbp, color='steelblue', s=80, alpha=0.8)
plt.title('体重与收缩压关系散点图', fontsize=14, pad=15)
plt.xlabel('体重', fontsize=12)
plt.ylabel('收缩压', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.5)
plt.show()
1.2 线性回归的定义
线性回归是利用线性函数对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式,用于预测连续值,是一种监督学习算法。
1.3 一元 vs 多元
| 类型 | 公式 | 特征数 | 场景 |
|---|---|---|---|
| 一元线性回归 | y = wx + b | 1 个 | 体重预测血压 |
| 多元线性回归 | y = w1x1 + w2x2 + ... + wnxn + b | 多个 | 广告投入预测销售额 |
核心要点:权重
w越大,说明该特征对预测值影响越大。线性回归的本质就是从数据中学习权重系数。

1.4 为什么选择线性回归
- 模型简单:结构清晰、数学推导成熟、易理解与实现
- 可解释性强:权重大小可直接反映特征对目标的影响程度
- 适用广泛:可作为各类预测任务的基础模型,速度快、资源消耗低
- 数学可解:支持正规方程、梯度下降两种高效求解方式
1.5 应用场景
| 场景 | 输入特征 | 预测目标 |
|---|---|---|
| GDP 预测 | 投资、消费、出口 | GDP 增长率 |
| 广告效果评估 | 各渠道广告投入 | 销售额 |
| 药物剂量研究 | 药物剂量 | 血压/血糖指标 |
| 气候变化建模 | 工业排放量、森林覆盖率 | 全球气温变化 |
二、线性回归 API 实操
2.1 快速上手:体重预测血压
from sklearn.linear_model import LinearRegression
import numpy as np
# 1. 准备数据
x_train = np.array([[76], [85], [91], [82], [95]]) # 特征:体重
y_train = np.array([120, 124, 141, 126, 155]) # 标签:收缩压
x_test = np.array([[88]]) # 预测:体重88kg
# 2. 创建模型
model = LinearRegression()
# 3. 训练
model.fit(x_train, y_train)
# 4. 查看参数
print(f'权重(斜率w): {model.coef_[0]:.4f}')
print(f'偏置(截距b): {model.intercept_:.4f}')
# 5. 预测
y_pre = model.predict(x_test)
print(f'体重88kg 对应的血压收缩预测值: {y_pre[0]:.2f} mmHg')
# 6. 评估
score = model.score(x_train, y_train)
print(f'决定系数 R2: {score:.4f}')
输出结果:
权重(斜率w): 1.8187
偏置(截距b): -22.8420
体重88kg 对应的血压收缩预测值: 137.01 mmHg
决定系数 R2: 0.8756
三、损失函数详解
3.1 为什么需要损失函数
模型训练时,线性回归算法如何选择最优的权重和截距?答案是设置一个评判标准——损失函数。
- 误差:预测值 - 真实值
- 损失函数:衡量每个样本预测值与真实值之间差异的函数
口诀:误差平方加一起,整体最小求最优。
3.2 三个核心评估指标
| 指标 | 全称 | 公式 | 特点 |
|---|---|---|---|
| MAE | 平均绝对误差 | mean(丨y-y_pred丨) | 直观易懂,对异常值不敏感 |
| MSE | 均方误差 | mean((y - y_pred)^2) | 放大异常值影响,数学可导 |
| RMSE | 均方根误差 | sqrt(MSE) | 量纲与原始数据一致 |
from sklearn.metrics import mean_absolute_error, mean_squared_error
import math
# MAE
mae = mean_absolute_error(y_test, y_predict)
# MSE
mse = mean_squared_error(y_test, y_predict)
# RMSE(sklearn 未直接提供,手算)
rmse = math.sqrt(mse)
思考题:为什么 sklearn 没有直接提供 RMSE 的 API?因为 RMSE 只是 MSE 开根号,一行代码即可实现,保持 API 精简。
3.3 损失函数公式推导
以体重预测血压为例,假设 y = kx + b,对 5 个样本计算误差平方和:
平方和 = (76k + b - 120)^2 + (85k + b - 124)^2 + (91k + b - 141)^2
+ (82k + b - 126)^2 + (95k + b - 155)^2
为简化演示,假设 b = 120(实际需同时优化 w 和 b):
L(k) = 37031k^2 - 15416k + 2358
对损失函数求导数,令导数为 0,即可求出最优 k 值。
损失函数是开口向上的抛物线,什么时候值最小?斜率为 0 时。如何算斜率?必须求导!

3.4 手动实现正规方程求解
import math
from sklearn.metrics import mean_squared_error, mean_absolute_error
x = [76, 85, 91, 82, 95]
y_true = [120, 124, 141, 126, 155]
n = len(x)
# 正规方程公式
sum_x = sum(x)
sum_y = sum(y_true)
sum_xx = sum([xi**2 for xi in x])
sum_xy = sum([xi*yi for xi, yi in zip(x, y_true)])
k = (n * sum_xy - sum_x * sum_y) / (n * sum_xx - sum_x ** 2)
b = (sum_y - k * sum_x) / n
print(f"拟合直线:y = {k:.4f}x + {b:.4f}")
y_pred = [k * xi + b for xi in x]
print("真实值:", y_true)
print("预测值:", [round(v, 2) for v in y_pred])
mse_manual = sum([(yt - yp)**2 for yt, yp in zip(y_true, y_pred)]) / n
mae_manual = sum([abs(yt - yp) for yt, yp in zip(y_true, y_pred)]) / n
rmse_manual = math.sqrt(mse_manual)
print(f"MSE = {mse_manual:.4f}")
print(f"MAE = {mae_manual:.4f}")
print(f"RMSE = {rmse_manual:.4f}")
输出结果:
拟合直线:y = 1.8187x + -22.8420
真实值: [120, 124, 141, 126, 155]
预测值: [115.38, 131.75, 142.66, 126.29, 149.93]
MSE = 21.9749
MAE = 3.8765
RMSE = 4.6877
四、正规方程法的局限性
4.1 三大局限
| 问题 | 说明 | 解决方案 |
|---|---|---|
| 多重共线性 | 特征间存在严格线性关系(如身高 cm 和 m) | 回去做特征工程 |
| 特征数 > 样本数 | 方程数不够,无法求解 | 梯度下降、岭回归、降维 |
| 计算复杂度爆炸 | 复杂度 O(n^3),高维不可用 | 梯度下降 |
4.2 选择口诀
- 特征少(<100)、数据小 → 用正规方程
- 特征多、数据大 → 用梯度下降
五、小结
- 线性回归用最朴素的线性方程捕捉数据间的关联,是机器学习的入门基石
- 损失函数(MSE)是衡量模型好坏的标尺,通过最小化损失找到最优参数
- 正规方程一步到位但受限于特征规模,梯度下降更具普适性
- MAE、MSE、RMSE 三个指标各有侧重,实际项目中按需选择
线性回归原理与损失函数详解&spm=1001.2101.3001.5002&articleId=163143521&d=1&t=3&u=3eef21a2f5454c77a2cd09627d50860c)
7082

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



