scikitlearn中的线性回归

线性回归算法详解


🧠 算法思想

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

数学表达式

线性回归模型的一般形式为:
Y = β 0 + β 1 X 1 + β 2 X 2 + ⋯ + β n X n + ϵ Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \dots + \beta_n X_n + \epsilon Y=β0+β1X1+β2X2+⋯+βnXn+ϵ

其中:

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

目标

线性回归的目标是通过数据估计参数 β \beta β,使得模型能够最小化预测值与实际值之间的误差。最常用的方法是 最小二乘法(Ordinary Least Squares, OLS),即最小化残差平方和:
Loss = ∑ i = 1 m ( y ( i ) − ( β 0 + β 1 x 1 ( i ) + ⋯ + β n x n ( i ) ) ) 2 \text{Loss} = \sum_{i=1}^{m} (y^{(i)} - (\beta_0 + \beta_1 x_1^{(i)} + \dots + \beta_n x_n^{(i)}))^2 Loss=i=1∑m(y(i)−(β0+β1x1(i)+⋯+βnxn(i)))2

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


🧮 数学原理:正规方程

核心公式

线性回归的闭式解(闭合解)通过 正规方程 直接求得最优参数 β \beta β:
β ^ = ( X T X ) − 1 X T y \hat{\beta} = (X^T X)^{-1} X^T y β^=(XTX)−1XTy

其中:

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

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


🛠️ 参数详解

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

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

⏱️ 时间复杂度分析

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

1. 最小二乘法(Normal Equation)

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

✅ 示例代码

python 复制代码
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}")
相关推荐
谷哥的小弟3 小时前
大模型核心基础知识(14)—神经网络的结构
人工智能·深度学习·神经网络·大模型·大语言模型
董厂长3 小时前
规范驱动开发(Spec-Driven Development):一个批判性审视
人工智能·驱动开发
Raink老师3 小时前
【AI面试临阵磨枪-088】Skill 如何做参数校验、依赖注入、权限控制、超时、重试、幂等?
人工智能·面试·职场和发展
城事漫游Molly3 小时前
AI与质性研究的融合(三):AI赋能质性数据分析——从编码到理论构建的新范式
大数据·人工智能·机器学习·prompt·ai for science·智能体·定性研究
chenying9981793 小时前
语音克隆模型的难点之一:音素对齐及交叉注意力早期失效问题 (兼论旋转位置编码)——F5-TTS、SupertonicTTS、VoxFlash-TTS 对比
人工智能·实时音视频·语音合成·tts·语音克隆
凯丨3 小时前
会“做梦“的 AI:用一句话生成可以玩的世界——读懂世界模型 Genie 3
人工智能·microsoft
踏着七彩祥云的小丑3 小时前
AI学习——记忆系统
人工智能·学习·ai
ACP广源盛139246256733 小时前
GSV2221@ACP# 高带宽低功耗显示转换芯片,赋能 TRAE SOLO 设备高清扩展升级
人工智能·嵌入式硬件·电脑·音视频
大强同学3 小时前
我用 Claude Code,把 NotebookLM 变成了 Obsidian 插件
人工智能·agent·claude·skill·notebooklm
J2虾虾3 小时前
Spring AI Alibaba - Memory 短期记忆
人工智能·spring·microsoft