ML 学习站
跳到正文

第一个模型:线性回归

数学原理、最小二乘法、sklearn 三行代码上手。

30 分钟3 / 61,153
加载中...

线性回归是机器学习的基础模型之一,其核心概念是用一条直线或超平面拟合数据,找到误差最小的拟合方式。它包含两个核心概念:线性关系和最小二乘法。线性关系假设特征与目标之间存在线性关系,公式为 y = wx + b,其中 w 是斜率,b 是截距,y_hat 是预测值。最小二乘法通过最小化均方误差(MSE)来找到最优参数,MSE 是所有数据点到直线的垂直距离平方和。读者学习后可以使用 scikit-learn 库中的 `fit()` 和 `predict()` 方法进行线性回归模型的训练和预测。尽管线性回归简单且计算速度快,但它只能拟合线性关系,对异常值敏感,并且在特征高度相关时不稳定。掌握线性回归是理解更复杂模型如多项式回归、岭回归和 Lasso 回归的基础。

第一个模型:线性回归

线性回归是机器学习的"Hello World"——简单到一行公式,但它奠定了后续所有模型的基础。

一句话定义

线性回归 = 用一条直线(或超平面)去拟合数据,找到"误差最小"的那条线。

数学原理

假设我们想用特征 x 预测目标 y。最朴素的假设是它们之间是线性关系:

y_hat = w*x + b

其中:

  • w 是斜率(权重)
  • b 是截距(偏置)
  • y_hat 是预测值

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

y_hat = w1*x1 + w2*x2 + ... + wn*xn + b

怎么找到最好的 w 和 b?

最小二乘法(Ordinary Least Squares,OLS)是最经典的方法。

我们定义均方误差(Mean Squared Error,MSE)作为损失函数:

L(w, b) = (1/n) * sum((y_hat - y)^2)

直观理解:所有点到直线的垂直距离平方和最小的那条线,就是最好的拟合。

三行代码上手 sklearn

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import numpy as np

# 1. 准备数据
X = np.array([[50], [60], [80], [100], [120], [150]])  # 面积
y = np.array([200, 240, 320, 400, 480, 600])             # 房价

# 2. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# 3. 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 4. 看学到的参数
print(f"斜率 w = {model.coef_[0]:.2f}")
print(f"截距 b = {model.intercept_:.2f}")

# 5. 预测
pred = model.predict([[90]])
print(f"90 平米的预测价格: {pred[0]:.1f} 万元")

输出类似:

斜率 w = 4.00
截距 b = -0.00
90 平米的预测价格: 360.0 万元

动手试一试

下面这个交互组件里,你可以拖动滑块改变直线的斜率和截距,实时看到 MSE 损失的变化。试着找出让 MSE 最小的那条线!

🎯 线性回归拟合实验

拖动滑块调整尝试直线的斜率和截距,看 MSE 如何变化。找到让 MSE 最小的线!

真实线 (y = 3x + 2)

💡 提示: 真实线参数是 y = 3x + 2。当你的红线和绿虚线完全重合时,MSE 最小。

线性回归的局限性

虽然好用,但线性回归有几个明显短板:

  1. 只能拟合线性关系:遇到曲线数据就抓瞎
  2. 对异常值敏感:一个离群点能把整条线拉偏
  3. 特征之间高度相关时会不稳定(多重共线性)

后面我们会学到多项式回归岭回归Lasso 回归来应对这些问题。

小结

  • 线性回归用直线/超平面拟合数据
  • 最小二乘法找最优参数,损失函数是 MSE
  • sklearn 只需要 fit()predict() 两个调用
  • 简单、可解释、计算快,是入门必备

练习思考

  1. 用最小二乘法手算 w 和 b:对数据 X=[1,2,3],y=[2,4,6],求出 w 和 b 的值。
  2. 如果数据点有 3 个维度(面积、楼层、位置)做预测,公式会变成什么样?
  3. 思考:为什么"用绝对值"作为损失函数(MAE)也可以,但用得比 MSE 少?

💻 编程挑战: 实现 RMSE

把上面的 RMSE 公式用代码实现, 跑通所有测试用例。

实现 RMSE (均方根误差)

简单

实现 `rmse(y_true, y_pred)`, 返回预测值与真实值之间的均方根误差。 **公式**: \( \text{RMSE} = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2} \) **示例**: - `rmse([1,2,3], [1,2,3])` 应返回 `0.0` - `rmse([1,2,3], [2,2,2])` 应返回 `0.816...` (约 √(2/3))

加载代码编辑器...

章末小测验

检验你对《第一个模型:线性回归》的掌握程度。

1

线性回归中,MSE 损失函数的公式是?

2

为什么最小二乘法用「平方」而不是「绝对值」?

讨论区(0)

加载评论中...