线性回归中梯度下降与正规方程以及拟合问题与正则化

线性回归实战指南:从理论到实践

目录

  1. 线性回归理论基础
  2. 机器学习项目开发流程
  3. 波士顿房价预测实战
  4. 梯度下降与正规方程
  5. 模型评估指标
  6. 拟合问题与正则化
  7. 总结与展望

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. 机器学习项目开发流程

一个完整的机器学习项目通常包含以下步骤:

  1. 获取数据 - 收集和加载数据集
  2. 数据预处理 - 数据清洗、缺失值处理
  3. 特征工程 - 特征提取、特征预处理、特征选择
  4. 模型训练 - 选择合适的算法进行训练
  5. 模型评估 - 使用评估指标衡量模型性能
  6. 模型预测 - 对新数据进行预测

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 本文要点总结

  1. 线性回归基础:理解了线性回归的数学原理和损失函数
  2. 项目流程:掌握了完整的机器学习项目开发流程
  3. 实战应用:通过波士顿房价预测案例,学会了实际应用
  4. 算法对比:了解了正规方程和梯度下降的优缺点
  5. 模型评估:学会了使用多种指标评估模型性能
  6. 正则化技术:掌握了解决过拟合问题的方法

7.2 进阶学习建议

  1. 数学基础:深入学习线性代数、微积分、概率统计
  2. 算法扩展:学习逻辑回归、多项式回归等变体
  3. 工程实践:掌握特征工程、模型调优等技巧
  4. 深度学习:理解神经网络中的线性层原理

7.3 实际应用场景

线性回归在实际工作中有广泛应用:

  • 金融领域:股票价格预测、风险评估
  • 房地产:房价预测、租金估算
  • 医疗健康:疾病预测、药物剂量计算
  • 市场营销:销售预测、客户价值评估
  • 工业制造:质量控制、设备维护预测

结语

线性回归作为机器学习的入门算法,其重要性不言而喻。通过本文的学习,相信读者已经掌握了线性回归的理论知识和实践技能。在实际应用中,要特别注意数据预处理、特征工程和模型评估等关键环节。

作者: 酒沏茶
时间: 2025年 9月1日
标签: #机器学习 #线性回归 #Python #sklearn #数据科学


如果觉得文章对您有帮助,请点赞、收藏、关注,您的支持是我创作的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95340.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么46.1k程序员都在用这个AI绘画神器?我体验一周后终于明白了

大家好,我是顾北,一名AI应用探索者,也是GitHub开源项目收集者。说起AI绘画这事儿,我之前真的是又爱又恨。上个月想给朋友搞张生日贺图,结果在Stable Diffusion WebUI里折腾了大半天。采样步数?CFG比例&…

Java基础第8天总结(map遍历、Stream流)

选中一部分代码,然后CTRLALTT,可以在外面套上while循环,try..catch之类的小案例:电影信息管理模块:用户可以上架、查询、下架、下架某个主演参演的电影package Demo;import lombok.AllArgsConstructor; import lombok.Data; impor…

总线矩阵的原理

总线矩阵(Bus Matrix)是多主设备共享多从设备的智能连接与仲裁核心,本质是一个“灵活的交叉开关阵列”,用于解决多个主设备(如CPU、DMA、GPU)同时访问多个从设备(如内存、外设、存储芯片&#x…

硬件开发_基于Zigee组网的果园养殖监控系统

一.系统概述 果园环境监控系统功能如下: 核心控制器:以STM32为核心控制器,承担整体的数据采集、处理及控制任务。环境参数监测:集成温度传感器、CO₂传感器、光照传感器和土壤湿度传感器,可实时采集果园内的温度、二氧…

K8s调度核心:从Pod分配到节点优化

在 Kubernetes(K8s)中,Pod 调度是指 K8s 系统根据特定规则和策略,将 Pod 合理分配到集群中的某个节点(Node)上运行的过程。其核心目标是确保 Pod 在合适的节点上高效、稳定地运行,充分利用集群资…

Tomcat 企业级运维实战系列(四):Tomcat 企业级监控

Tomcat 企业级运维实战系列(四):Tomcat 企业级监控一:监控工具1)概述2)流程3)部署二:监控命令1)jps2)jstack3)jmap4)MAT 工具分析三&a…

技术干货丨HyperMesh 新界面功能与技术升级解析

全文内容选自 Altair 区域技术交流会华东站Altair 高级技术经理 张晨《HyperWorks 2025:下一代建模可视化和二次开发平台》演讲1、引言今天我为大家介绍 HyperMesh——这个大家既熟悉又陌生的工具。说熟悉,是因为它一直是工程仿真领域的主流建模软件&…

《IC验证必看|随机稳定性 / 再现性》

同一用例 A 机 pass、B 机 fail?——SystemVerilog 随机稳定性 / 可复现性全攻略(含代码与排查清单)你该到什么水平?(对标 20k / 25k / 30k) 20k(入门会用) 会 randomize()、$urando…

字符编码的本质

目的 最近做一个加密方面的研究,加密之后的二进制,通过转码之后,再也找不回之前的二进制了。 怎么试都不行,真是非常得奇怪!!!!先说说字符编码基础知识 在信息技术的海洋中&#xff…

网格图--Day03--网格图DFS--2658. 网格图中鱼的最大数目,1034. 边界着色,1020. 飞地的数量

网格图–Day03–网格图DFS–2658. 网格图中鱼的最大数目,1034. 边界着色,1020. 飞地的数量 今天要训练的题目类型是:【网格图DFS】,题单来自灵艾山茶府。 适用于需要计算连通块个数、大小的题目。 部分题目做法不止一种&#xff0…

新能源车焊接中发那科机器人保护气省气方法

在新能源汽车制造领域,焊接工艺是保障车身结构强度与安全性的关键环节,发那科焊接机器人凭借高精度与稳定性成为产线主力设备。保护气体消耗在焊接成本中占比显著,寻找高效省气方法成为行业降本增效的核心需求。WGFACS节气装置以智能化控制技…

CornerNet2025再研究---将目标检测问题视作关键点检测与配对

CornerNet于2019年3月份提出,CW近期回顾了下这个在当时引起不少关注的目标检测模型,它的亮点在于提出了一套新的方法论——将目标检测转化为对物体成对关键点(角点)的检测。通过将目标物体视作成对的关键点,其不需要在图像上铺设先验锚框(anc…

【C++】vector(2)

目录 1. insert的实现 2. 迭代器失效 2.1 迭代器失效的两种情况 指向已释放的内存(物理失效) 元素移动导致迭代器指向错误(逻辑失效) 2.2 修改代码 3. erase的实现 ​编辑修改代码 4. resize的实现 5. 构造函数 5.1 默认…

机器翻译:python库translatepy的详细使用(集成了多种翻译服务)

更多内容请见: 机器翻译修炼-专栏介绍和目录 文章目录 一、translatepy概述 1.1 translatepy介绍 1.1 安装 二、基本使用 2.1 初始化 `Translator` 2.2 文本翻译 2.3 语言检测 2.4 获取翻译备选方案 2.5 单词音标获取 2.6 语音合成 2.7 例句查询 2.8 拼写检查 三、高级功能 3.…

Spring Bean生命周期的完全指南

简介:超越Bean——揭开Spring Bean的隐秘生活 想象一场复杂宏大的舞台剧。作为观众,我们看到的是最终的演出——一个流畅运行的应用程序。但在这光鲜的幕后,隐藏着一套严谨细致的流程:选角(实例化Bean)、试…

网络安全A模块专项练习任务九解析

任务九:Linux操作系统安全配置-2任务环境说明: (Linux)系统:用户名root,密码1234561. 设置禁止使用最近用过的6个旧密码,将配置文件中对应的部分截图;编辑/etc/pam.d/system-auth文件,找到passw…

Linex进程管理

一、进程查看命令1.pstree用于查看进程树之间的关系,谁是父进程,谁是子进程,可以清楚的看出来是谁创建了谁语法:pstree [选项] -A各进程树之间的连接以ASCII码字符来连接-U各进程树之间的连接以utf8字符来连接,某些终…

手写MyBatis第47弹:Interceptor接口设计与Invocation上下文传递机制--MyBatis动态代理生成与方法拦截的精妙实现

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…

自动驾驶中的传感器技术37——Lidar(12)

这里对当前Lidar中的一些常见问题进行专项论述。首先以禾赛Lidar为例,列出相关参数,以备论述。 图1 禾赛AT128参数图2 禾赛AT360参数图3 禾赛AT1440参数图4 禾赛AT128可靠性验证项图5 禾赛AT128产品证书1、Lidar的线束是什么,由什么决定&…

Meteor主题友链页面自研

发布于:Eucalyptus-Blog Meteor主题虽然设计简约现代,但由于缺乏原生的友情链接管理功能,许多博主只能将友情链接勉强添加在网站底部,这不仅影响页面美观,也不便于访客查找和互动;为了解决这一痛点&#xf…