scikitlearn中的线性回归

115 阅读1分钟

线性回归算法详解


🧠 算法思想

线性回归 是统计学和机器学习中最基础的预测建模技术之一,其核心思想是通过建立自变量(特征)与因变量(目标)之间的线性关系,来预测或解释因变量的变化。线性回归模型假设因变量是自变量的线性组合,再加上一个误差项。

数学表达式

线性回归模型的一般形式为:

Y=β0+β1X1+β2X2++βnXn+ϵY = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \dots + \beta_n X_n + \epsilon

其中:

  • YY 是因变量(目标值)
  • X1,X2,,XnX_1, X_2, \dots, X_n 是自变量(特征)
  • β0,β1,,βn\beta_0, \beta_1, \dots, \beta_n 是模型参数(系数)
  • ϵ\epsilon 是误差项(无法通过自变量解释的部分)

目标

线性回归的目标是通过数据估计参数 β\beta,使得模型能够最小化预测值与实际值之间的误差。最常用的方法是 最小二乘法(Ordinary Least Squares, OLS),即最小化残差平方和:

Loss=i=1m(y(i)(β0+β1x1(i)++βnxn(i)))2\text{Loss} = \sum_{i=1}^{m} (y^{(i)} - (\beta_0 + \beta_1 x_1^{(i)} + \dots + \beta_n x_n^{(i)}))^2

其中 mm 是样本数量,x(i)x^{(i)} 是第 ii 个样本的特征向量,y(i)y^{(i)} 是实际输出值。


🧮 数学原理:正规方程

核心公式

线性回归的闭式解(闭合解)通过 正规方程 直接求得最优参数 β\beta

β^=(XTX)1XTy\hat{\beta} = (X^T X)^{-1} X^T y

其中:

  • XX 是特征矩阵(形状为 n×fn \times fnn 为样本数,ff 为特征数)
  • yy 是目标向量(形状为 n×1n \times 1
  • β^\hat{\beta} 是最优参数向量(形状为 f×1f \times 1

该公式仅在 XᵀX 是满秩矩阵(即特征之间不存在完美的多重共线性)时才有效。如果 XᵀX 不可逆(奇异),通常意味着存在线性相关的特征或特征数量大于样本数量,此时需要使用岭回归等正则化方法或伪逆。


🛠️ 参数详解

scikit-learnLinearRegression 中,核心参数如下:

参数名说明默认值/示例值值的含义
fit_intercept是否计算截距项 β0\beta_0True- True:模型包含截距项(推荐)
- False:模型不包含截距项
n_jobs并行计算使用的处理器数量。None- 1:单线程
- -1:使用所有处理器(推荐)

⏱️ 时间复杂度分析

线性回归的计算复杂度主要取决于求解参数的方法(如最小二乘法或梯度下降)。以下是不同方法的复杂度分析:

1. 最小二乘法(Normal Equation)

  • 训练时间复杂度O(f2n+f3)O(f^2 n + f^3)
    • ff 是特征数,nn 是样本数。
    • f2nf^2 n:矩阵乘法 XTXX^T X 的复杂度。
    • f3f^3:矩阵求逆 (XTX)1(X^T X)^{-1} 的复杂度。
  • 预测时间复杂度O(f)O(f)
    • 每次预测只需计算 wTx+bw^T x + b,复杂度与特征数成正比。

✅ 示例代码

from sklearn.linear_model import LinearRegression

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

# 预测与评估
score = model.score(X_test, y_test)
print(f"模型 R² 分数: {score:.4f}")