机器学习 Day3:线性回归全面总结(含 API、案例与正则化)
·
一、线性回归核心概念
1. 定义
线性回归是利用回归方程对一个或多个自变量(特征值)和因变量(目标值)之间的线性关系进行建模的分析方法,核心是找到最优线性函数拟合数据规律。
2. 分类
| 类型 | 定义 | 公式 | 适用场景 |
|---|---|---|---|
| 一元线性回归 | 目标值仅与一个特征相关 | y=wx+b | 单因素影响预测(如身高 - 体重、温度 - 销量) |
| 多元线性回归 | 目标值与多个特征相关 | y=w1x1+w2x2+...+wnxn+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=1nxi2(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、x1x2)、组合特征
- 复杂模型:更换非线性模型(如多项式回归)
(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=1nwi2
- 特点:使权重趋向于 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)选择最优α
七、总结
线性回归是机器学习中最基础的数值预测模型,核心优势是简单易懂、可解释性强。关键要点:
- 建模核心:找到最优线性方程,最小化损失函数
- 求解选择:小数据集用正规方程,大数据用梯度下降
- 评估指标:MAE(稳健)、RMSE(敏感异常值)结合使用,若 RMSE ≈ MAE,说明数据中异常值少,模型误差分布均匀;若 RMSE 远大于 MAE,需检查数据中的异常值(可能需要清洗或用 MAE 作为主要指标)
- 优化重点:处理高维特征时用正则化避免过拟合,特征标准化提升梯度下降效率
掌握线性回归的理论与实战,能为后续学习复杂模型(如逻辑回归、神经网络)奠定坚实基础。
更多推荐


所有评论(0)