线性回归中梯度下降与正规方程以及拟合问题与正则化
线性回归实战指南:从理论到实践
目录
- 线性回归理论基础
- 机器学习项目开发流程
- 波士顿房价预测实战
- 梯度下降与正规方程
- 模型评估指标
- 拟合问题与正则化
- 总结与展望
1. 线性回归理论基础
1.1 什么是线性回归?
线性回归是一种监督学习算法,用于预测连续型数值。其核心思想是找到一个线性函数,使得预测值与真实值之间的误差最小。
数学表达式:
y = w₁x₁ + w₂x₂ + ... + wₙxₙ + b
其中:
- y 是预测值
- x₁, x₂, …, xₙ 是特征
- w₁, w₂, …, wₙ 是权重
- b 是偏置项
1.2 损失函数
线性回归使用均方误差(MSE)作为损失函数:
MSE = (1/n) * Σ(y_true - y_pred)²
目标是最小化这个损失函数,找到最优的权重和偏置。
2. 机器学习项目开发流程
一个完整的机器学习项目通常包含以下步骤:
- 获取数据 - 收集和加载数据集
- 数据预处理 - 数据清洗、缺失值处理
- 特征工程 - 特征提取、特征预处理、特征选择
- 模型训练 - 选择合适的算法进行训练
- 模型评估 - 使用评估指标衡量模型性能
- 模型预测 - 对新数据进行预测
3. 波士顿房价预测实战
3.1 项目背景
波士顿房价数据集是机器学习中的经典数据集,包含506个样本,13个特征,目标是预测房价。
3.2 完整代码实现
# 导包
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error, root_mean_squared_error
import pandas as pd
import numpy as np# 1. 获取数据
df_data = pd.read_csv("../data/boston.csv")
datas = ["CRIM","ZN","INDUS","CHAS","NOX","RM","AGE","DIS","RAD","TAX","PTRATIO","B","LSTAT"]
label = ["MEDV"]
x = df_data[datas]
y = df_data[label]# 2. 数据预处理 - 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=22)# 3. 特征工程 - 标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)# 4. 模型训练
es = LinearRegression(fit_intercept=True)
es.fit(x_train, y_train)# 5. 模型预测
y_predict = es.predict(x_test)# 6. 模型评估
print(f"平均绝对误差: {mean_absolute_error(y_test, y_predict)}")
print(f"均方误差: {mean_squared_error(y_test, y_predict)}")
print(f"均方根误差: {root_mean_squared_error(y_test, y_predict)}")
3.3 代码解析
数据获取:
- 使用pandas读取CSV文件
- 分离特征和目标变量
数据预处理:
- 使用
train_test_split
划分训练集和测试集 - 使用
StandardScaler
进行特征标准化
模型训练:
- 创建
LinearRegression
对象 - 调用
fit
方法进行训练
模型评估:
- 使用多种评估指标衡量模型性能
4. 梯度下降与正规方程
4.1 两种求解方法对比
方法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
正规方程 | 一次性求解,结果精确 | 计算复杂度高,内存消耗大 | 小数据集,特征较少 |
梯度下降 | 内存消耗小,可处理大数据集 | 需要调参,收敛速度依赖学习率 | 大数据集,实际开发推荐 |
4.2 梯度下降实现
from sklearn.linear_model import SGDRegressor# 创建梯度下降回归器
es = SGDRegressor(fit_intercept=True, learning_rate='constant', eta0=0.01)# 模型训练
es.fit(x_train, y_train)# 模型预测
y_predict = es.predict(x_test)
4.3 梯度下降分类
- 全梯度下降(BGD):使用全部数据计算梯度
- 随机梯度下降(SGD):每次使用一个样本计算梯度
- 小批量梯度下降(MBGD):每次使用一小批数据计算梯度
5. 模型评估指标
5.1 常用评估指标
平均绝对误差(MAE):
MAE = (1/n) * Σ|y_true - y_pred|
均方误差(MSE):
MSE = (1/n) * Σ(y_true - y_pred)²
均方根误差(RMSE):
RMSE = √MSE
5.2 指标选择建议
- MAE:对异常值不敏感,易于理解
- MSE:对异常值敏感,数学性质好
- RMSE:与原始数据单位一致,易于解释
6. 拟合问题与正则化
6.1 拟合问题
欠拟合:
- 模型过于简单,无法捕捉数据规律
- 训练集和测试集表现都不好
- 解决方法:增加模型复杂度,添加特征
过拟合:
- 模型过于复杂,记住了训练数据噪声
- 训练集表现好,测试集表现差
- 解决方法:正则化、增加数据量、简化模型
6.2 正则化技术
L1正则化(Lasso):
from sklearn.linear_model import Lassoes = Lasso(alpha=0.1)
es.fit(X, y)
L2正则化(Ridge):
from sklearn.linear_model import Ridgees = Ridge(alpha=0.1)
es.fit(X, y)
6.3 正则化效果演示
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression, Lasso, Ridge# 生成数据
np.random.seed(666)
x = np.random.uniform(-3, 3, size=100)
y = 0.5 * x**2 + x + 2 + np.random.normal(0, 1, size=100)# 特征工程 - 添加高次项
X1 = x.reshape(-1, 1)
X2 = np.hstack([X1, X1**2, X1**3, X1**4, X1**5, X1**6, X1**7, X1**8, X1**9, X1**10])# 不同模型对比
models = {'Linear': LinearRegression(),'Lasso': Lasso(alpha=0.1),'Ridge': Ridge(alpha=0.1)
}plt.figure(figsize=(15, 5))
for i, (name, model) in enumerate(models.items()):plt.subplot(1, 3, i+1)model.fit(X2, y)y_pred = model.predict(X2)plt.scatter(x, y, alpha=0.6)plt.plot(np.sort(x), y_pred[np.argsort(x)], color='red', linewidth=2)plt.title(f'{name} Regression')plt.xlabel('x')plt.ylabel('y')plt.tight_layout()
plt.show()
7. 总结与展望
7.1 本文要点总结
- 线性回归基础:理解了线性回归的数学原理和损失函数
- 项目流程:掌握了完整的机器学习项目开发流程
- 实战应用:通过波士顿房价预测案例,学会了实际应用
- 算法对比:了解了正规方程和梯度下降的优缺点
- 模型评估:学会了使用多种指标评估模型性能
- 正则化技术:掌握了解决过拟合问题的方法
7.2 进阶学习建议
- 数学基础:深入学习线性代数、微积分、概率统计
- 算法扩展:学习逻辑回归、多项式回归等变体
- 工程实践:掌握特征工程、模型调优等技巧
- 深度学习:理解神经网络中的线性层原理
7.3 实际应用场景
线性回归在实际工作中有广泛应用:
- 金融领域:股票价格预测、风险评估
- 房地产:房价预测、租金估算
- 医疗健康:疾病预测、药物剂量计算
- 市场营销:销售预测、客户价值评估
- 工业制造:质量控制、设备维护预测
结语
线性回归作为机器学习的入门算法,其重要性不言而喻。通过本文的学习,相信读者已经掌握了线性回归的理论知识和实践技能。在实际应用中,要特别注意数据预处理、特征工程和模型评估等关键环节。
作者: 酒沏茶
时间: 2025年 9月1日
标签: #机器学习 #线性回归 #Python #sklearn #数据科学
如果觉得文章对您有帮助,请点赞、收藏、关注,您的支持是我创作的动力!