自学教程 学编程从这里开始

线性回归

线性回归是最简单、最基础的监督学习回归算法,用来预测连续数值。它假设特征与目标值之间存在线性关系,用一条直线(超平面)拟合数据。

1. 基本公式

一元线性回归(只有1个特征):

y=w⋅x+by = w \cdot x + b

  • ww:权重(斜率)
  • bb:偏置(截距)
  • xx:输入特征
  • yy:预测输出

多元线性回归(多个特征):

y=w1x1+w2x2+...+wnxn+by = w_1x_1 + w_2x_2 + … + w_nx_n + b

模型学习的目标,就是找到最合适的 ww 和 bb,让预测值和真实值差距最小。

2. 损失函数:均方误差 MSE

MSE=1m∑i=1m(y^i−yi)2MSE = \frac{1}{m}\sum_{i=1}^m (\hat y_i – y_i)^2

mm 是样本数量;y^i\hat y_i 为预测值,yiy_i 为真实值。
线性回归默认使用最小二乘法,最小化均方误差。

3. 适用条件

  • 特征和标签大致呈线性相关
  • 误差服从正态分布
  • 特征之间不要高度共线性(多重共线性会影响结果)

4. 优缺点

✅ 优点

  • 简单、可解释性强,能直观看到每个特征对结果的影响
  • 训练速度快,计算成本低
  • 是很多进阶算法的基础

❌ 缺点

  • 只能拟合线性关系,无法处理非线性数据
  • 对异常值非常敏感
  • 特征高度共线性时效果变差

5. Python 代码示例

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 构造模拟数据
np.random.seed(42)
x = np.linspace(1, 10, 50).reshape(-1, 1)
y = 2.5 * x + 4 + np.random.normal(0, 1.2, size=x.shape)

# 划分训练集、测试集
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)

# 训练线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)

# 输出学到的参数
print(f"权重 w = {model.coef_[0]:.2f}")
print(f"偏置 b = {model.intercept_:.2f}")

# 预测
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"测试集 MSE:{mse:.2f}")

# 绘图
plt.scatter(X_train, y_train, c="#4472c4", label="训练样本")
plt.plot(x, model.predict(x), c="#ed7d31", lw=2, label="拟合直线")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.show()

执行结果(这里缺少字体):

6. 常见使用场景

  • 房价预测
  • 销量、营收预测
  • 温度、能耗预测
  • 相关性分析(看特征影响大小)

7. 常见误区

  1. 线性回归 ≠ 只能画直线:多元线性回归是高维超平面。
  2. 相关不等于因果:模型学到的是统计关联,不代表因果关系。
  3. MSE很小就一定好:需要同时看训练集、测试集误差,警惕过拟合。

思考题

  1. 如果数据明显是曲线趋势,直接用线性回归会出现什么问题?
  2. 数据里存在极端异常值,怎么降低对线性回归的影响?

0 条笔记