线性回归:从数据到优化模型
线性回归模型描述了预测变量与目标变量之间的线性关系。对于简单线性回归,其方程为 y = b₀ + b₁ × x,其中 x 是预测变量,y 是响应变量,b₀ 是截距,b₁ 是斜率。系数决定了直线在平面上的位置。
以表格形式呈现的特征和响应数据是建模的基础。例如:公寓价格与房间数量之间的关系。模型质量取决于样本的代表性——“垃圾进,垃圾出”的原则决定了最终结果。
模型可用于预测和识别模式。将表格数据转化为分析表达式,可以对新观测值进行外推。
普通最小二乘法
OLS(普通最小二乘法)最小化残差平方和:∑(y_i - ŷ_i)²。解析解为:b₁ = Cov(x, y) / Var(x),b₀ = ȳ - b₁ × x̄。
# 示例系数计算
import numpy as np
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])
b1 = np.cov(x, y)[0,1] / np.var(x)
b0 = np.mean(y) - b1 * np.mean(x)
print(f'b0: {b0:.2f}, b1: {b1:.2f}')
这种方法适用于非退化数据,但在多元情况下需要矩阵求逆 (XᵀX)⁻¹。
模型质量评估
可视化方法:预测值与实际值的散点图、残差图。指标包括:
- R²(决定系数):解释方差的比例,范围0–1。
- RMSE:√(MSE),以响应变量单位表示。
- MAE:平均绝对误差。
- MAPE/SMAPE:百分比误差。
残差图可揭示异方差性或非线性。
数据分割与验证
训练/测试分割(80/20)可防止过拟合。交叉验证(k折)对各折的指标取平均值。
def train_test_split(X, y, test_size=0.2):
indices = np.arange(len(X))
np.random.shuffle(indices)
split = int(len(X) * (1 - test_size))
return X[indices[:split]], X[indices[split:]], y[indices[:split]], y[indices[split:]]
多元回归
扩展到 y = b₀ + b₁x₁ + ... + bₙxₙ。矩阵形式:ŷ = Xβ,解为 β = (XᵀX)⁻¹Xᵀy。预处理步骤:
- 归一化:(x - 最小值)/(最大值 - 最小值)。
- 标准化:(x - μ)/σ。
- 分类特征的独热编码。
概率解释
模型假设误差服从正态分布:ε ~ N(0, σ²)。预测区间:*ŷ ± t SE √(1 + 1/n + (x - x̄)² / SXX)*。最大似然估计(MLE)优化对数似然函数。
异常值处理
检测方法:
- 马氏距离:多元空间中的广义距离。
- 库克距离:观测值对系数的影响。
- LOF(局部异常因子):局部密度。
- RANSAC:随机子集的共识。
处理方法:移除或使用稳健回归器(如Huber损失)。
梯度下降与正则化
对于大数据:迭代优化 θ := θ - α ∇J(θ),其中J是成本函数。
- L1(Lasso):|β|,产生稀疏性。
- L2(Ridge):β²,产生收缩。
超参数λ通过交叉验证调整。
def gradient_descent(X, y, lr=0.01, epochs=1000):
theta = np.zeros(X.shape[1])
for _ in range(epochs):
pred = X @ theta
grad = X.T @ (pred - y) / len(y)
theta -= lr * grad
return theta
关键要点
- 线性回归是处理线性关系的基础工具,可扩展到多元任务。
- OLS提供解析解;梯度下降适用于大型数据集。
- R²和RMSE等指标评估质量;残差图诊断问题。
- 正则化(L1/L2)对抗过拟合和多重共线性。
- 预处理(缩放、异常值移除)对稳定性至关重要。
— Editorial Team
暂无评论。