一、线性回归核心概念

1. 定义

线性回归是利用回归方程对一个或多个自变量(特征值)和因变量(目标值)之间的线性关系进行建模的分析方法,核心是找到最优线性函数拟合数据规律。

2. 分类

类型定义公式适用场景
一元线性回归目标值仅与一个特征相关y=wx+b单因素影响预测(如身高 - 体重、温度 - 销量)
多元线性回归目标值与多个特征相关y=w1​x1​+w2​x2​+...+wn​xn​+b多因素影响预测(如房价、信贷额度)

3. 典型应用场景

  • 趋势预测:GDP 与消费额关系、温度与产品销量
  • 数值预测:房价、股价、信贷额度、产品质量评分
  • 关系分析:昆虫鸣叫次数与气温、钢轨伸缩长度与温度

3. 典型应用场景

  • 趋势预测:GDP 与消费额关系、温度与产品销量
  • 数值预测:房价、股价、信贷额度、产品质量评分
  • 关系分析:昆虫鸣叫次数与气温、钢轨伸缩长度与温度

二、线性回归问题求解

1. 核心流程

数据准备 → 模型构建 → 损失函数定义 → 优化求解 → 预测评估

2. 损失函数(代价函数)

(1)核心作用

衡量预测值与真实值的差异,为参数优化提供方向。

3. 优化求解方法

(1)正规方程法
  • 原理:通过对损失函数求导并令导数为 0,直接得到参数最优解
  • 公式(多元回归):w=(XTX)−1XTy
  • 优点:直接求解,无需迭代,无学习率依赖
  • 缺点:特征维度高(>10000)时计算复杂(矩阵求逆耗时)
(2)梯度下降法
  • 原理:沿损失函数梯度负方向迭代更新参数,逐步逼近最小值
  • 核心公式:θt+1​=θt​−α⋅∇J(θ)(α为学习率)
  • 学习率选择:0.001~0.01 为宜,过大会震荡不收敛,过小收敛过慢
(3)梯度下降分类
类型特点适用场景
全梯度下降(FGD)用全部样本计算梯度小数据集,精度高但速度慢
随机梯度下降(SGD)单样本随机计算梯度大数据集,速度快但波动大
小批量梯度下降(Mini-batch)小批量样本计算梯度平衡速度与精度,最常用
随机平均梯度下降(SAG)结合历史梯度均值大规模数据,收敛稳定
(4)两种方法对比
对比项正规方程法梯度下降法
迭代需求无需迭代需要迭代
学习率需要调整
特征维度适合低维数据(<10000)适合高维数据
计算复杂度O(n3)(矩阵求逆)O(knm)(k 为迭代次数)
适用场景小数据集、特征少大数据集、高维特征

三、关键数学基础

1. 导数与偏导数

  • 导数:单变量函数在某点的瞬时变化率(切线斜率),用于单变量参数优化
  • 偏导数:多元函数中单个变量变化的速率,其他变量固定,用于多元参数优化
  • 核心用途:找到损失函数的极值点(导数 / 偏导数为 0 的位置)

2. 向量与矩阵运算

  • 向量:一维数组(如样本的特征向量)
  • 矩阵:二维数组(如特征矩阵X∈Rm×n,m 为样本数,n 为特征数)
  • 常用运算:矩阵乘法、转置、求逆(正规方程核心)、范数(正则化基础)

3. 范数

  • L1 范数:∣∣x∣∣1​=∑i=1n​∣xi​∣(Lasso 正则化核心)
  • L2 范数:∣∣x∣∣2​=∑i=1n​xi2​​(Ridge 正则化核心)

四、Sklearn 线性回归 API 详解

1. 正规方程法 API

from sklearn.linear_model import LinearRegression
# 实例化(fit_intercept=True表示计算偏置)
estimator = LinearRegression(fit_intercept=True)
# 训练模型
estimator.fit(x_train, y_train)
# 模型参数
print("回归系数:", estimator.coef_)  # 特征权重w
print("偏置:", estimator.intercept_)  # 截距b
# 预测
y_pred = estimator.predict(x_test)

2. 梯度下降法 API

from sklearn.linear_model import SGDRegressor
# 实例化(loss为损失函数类型)
estimator = SGDRegressor(
    loss="squared_loss",  # 均方误差损失
    fit_intercept=True,   # 计算偏置
    learning_rate='constant',  # 学习率策略
    eta0=0.01  # 初始学习率
)
# 训练与预测(同LinearRegression)
estimator.fit(x_train, y_train)
y_pred = estimator.predict(x_test)

3. 模型评估 API

from sklearn.metrics import mean_absolute_error, mean_squared_error
import numpy as np

# 计算MAE
mae = mean_absolute_error(y_test, y_pred)
# 计算MSE
mse = mean_squared_error(y_test, y_pred)
# 计算RMSE
rmse = np.sqrt(mse)

print(f"MAE: {mae:.2f}, MSE: {mse:.2f}, RMSE: {rmse:.2f}")

五、实战案例:波士顿房价预测

1. 案例背景

  • 数据集:506 个波士顿房价样本,13 个特征(犯罪率、房屋数量、税率等)
  • 目标:根据特征预测房屋中位数价格(单位:千美元)

2. 完整代码

# 导入库
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression, SGDRegressor
from sklearn.metrics import mean_squared_error

# 1. 获取数据
data = load_boston()
x, y = data.data, data.target

# 2. 数据划分与标准化(梯度下降必须标准化)
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22)
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

# 3. 正规方程法建模
def linear_model_normal():
    estimator = LinearRegression()
    estimator.fit(x_train, y_train)
    y_pred = estimator.predict(x_test)
    print("正规方程法 - 回归系数:", estimator.coef_)
    print("正规方程法 - MSE:", mean_squared_error(y_test, y_pred))

# 4. 梯度下降法建模
def linear_model_sgd():
    estimator = SGDRegressor(max_iter=1000, eta0=0.01)
    estimator.fit(x_train, y_train)
    y_pred = estimator.predict(x_test)
    print("梯度下降法 - 回归系数:", estimator.coef_)
    print("梯度下降法 - MSE:", mean_squared_error(y_test, y_pred))

# 运行模型
linear_model_normal()
linear_model_sgd()

3. 关键说明

  • 特征标准化:梯度下降对特征尺度敏感,必须进行标准化处理
  • 结果解读:MSE 越小表示模型拟合效果越好,通常正规方程法精度略高,梯度下降法更适合大数据

六、欠拟合与过拟合解决方案

1. 概念与识别

问题类型训练集表现测试集表现核心原因
欠拟合模型过于简单,未学习到核心特征
过拟合模型过于复杂,学习到噪声特征

2. 解决方案

(1)欠拟合解决
  • 增加特征:添加多项式特征(如x2、x1​x2​)、组合特征
  • 复杂模型:更换非线性模型(如多项式回归)
(2)过拟合解决
  • 数据层面:增大训练集、清洗异常值
  • 模型层面:正则化(L1/L2)、特征降维
  • 训练层面:早停(Early Stopping)

3. 正则化详解

(1)L1 正则化(Lasso 回归)
  • 公式:J(w)=MSE(w)+α∑i=1n​∣wi​∣
  • 特点:使部分权重变为 0,实现特征筛选
  • API:from sklearn.linear_model import Lasso
(2)L2 正则化(Ridge 回归)
  • 公式:J(w)=MSE(w)+α∑i=1n​wi2​
  • 特点:使权重趋向于 0 但不为 0,避免过拟合同时保留所有特征
  • API:from sklearn.linear_model import Ridge
(3)正则化实战代码
from sklearn.linear_model import Lasso, Ridge

# L1正则化(Lasso)
lasso = Lasso(alpha=0.01, normalize=True)
lasso.fit(x_train, y_train)
print("Lasso回归系数:", lasso.coef_)  # 部分系数为0

# L2正则化(Ridge)
ridge = Ridge(alpha=0.01, normalize=True)
ridge.fit(x_train, y_train)
print("Ridge回归系数:", ridge.coef_)  # 系数均接近0但不为0
(4)正则化参数选择
  • α越大:正则化力度越强,权重越小,避免过拟合但可能欠拟合
  • α越小:正则化力度越弱,权重越接近原始值,可能过拟合
  • 建议:通过交叉验证(如 RidgeCV、LassoCV)选择最优α

七、总结

线性回归是机器学习中最基础的数值预测模型,核心优势是简单易懂、可解释性强。关键要点:

  1. 建模核心:找到最优线性方程,最小化损失函数
  2. 求解选择:小数据集用正规方程,大数据用梯度下降
  3. 评估指标:MAE(稳健)、RMSE(敏感异常值)结合使用,若 RMSE ≈ MAE,说明数据中异常值少,模型误差分布均匀;若 RMSE 远大于 MAE,需检查数据中的异常值(可能需要清洗或用 MAE 作为主要指标)
  4. 优化重点:处理高维特征时用正则化避免过拟合,特征标准化提升梯度下降效率

掌握线性回归的理论与实战,能为后续学习复杂模型(如逻辑回归、神经网络)奠定坚实基础。

更多推荐