尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
第 36 章 · 综合项目一:最小二乘拟合
把全书知识串起来的第一个实战项目用 Eigen 做最小二乘直线拟合。这是数据科学、机器学习的入门基础也是 Eigen 的典型应用。36.1 问题拟合一条直线假设你有一批实验数据点 (x, y)(0, 1.1), (1, 3.0), (2, 5.2), (3, 6.9), (4, 9.1), (5, 11.0)它们大致落在一条直线上但有点噪声。你想找一条直线y ax b最好地拟合这些点。最小二乘的思想找 a、b使得所有点到直线的误差平方和最小。36.2 数学原理正规方程把问题写成矩阵形式。对每个点 (xᵢ, yᵢ)有a·xᵢ b yᵢn 个点就是 n 个方程写成矩阵[ x₁ 1 ] [ y₁ ] [ x₂ 1 ] [ a ] [ y₂ ] [ ... ] [ b ] [ ...] [ xₙ 1 ] [ yₙ ]即A·c y其中A 是 n×2 矩阵第一列是 x第二列全 1c [a; b] 是待求参数y 是观测值这是方程比未知数多的超定方程一般没有精确解但有最小二乘解c (AᵀA)⁻¹ Aᵀ y ← 正规方程或者直接用 QR 分解求解更稳定。36.3 用 Eigen 实现#includeEigen/Dense#includeiostream#includevectorintmain(){// 原始数据std::vectordoublexs{0,1,2,3,4,5};std::vectordoubleys{1.1,3.0,5.2,6.9,9.1,11.0};intnxs.size();Eigen::MatrixXdA(n,2);// 设计矩阵Eigen::VectorXdy(n);for(inti0;in;i){A(i,0)xs[i];// 第一列是 xA(i,1)1.0;// 第二列是 1对应截距 by(i)ys[i];// 观测值}// 最小二乘求解QR 分解稳健通用Eigen::VectorXd cA.colPivHouseholderQr().solve(y);doubleac(0);// 斜率doublebc(1);// 截距std::cout拟合直线y a * x bstd::endl;return0;}运行结果接近y 1.98571 * x 1.08571真实关系是 y 2x 1 加噪声拟合非常准。编译运行把上面代码存成ch36.cpp然后路径写法见附录 C.3g-stdc17-O2-I你的Eigen目录ch36.cpp-och36.exe ./ch36.exe实际输出拟合直线y 1.98571 * x 1.0857136.4 评估拟合质量用残差真实值与预测值的差评估。在ch36.cpp的std::cout 拟合直线...后面加两行doubleerror(A*c-y).norm();// 残差范数std::cout残差 errorstd::endl;重新编译运行输出变成拟合直线y 1.98571 * x 1.08571 残差 0.226779残差越小拟合越好。这里 6 个点的总偏差约 0.23相对 y 本身 1~11 的量级来说很小说明直线确实贴住了这批数据。36.5 拓展多项式拟合直线拟合是线性拟合。想拟合曲线如二次 y ax² bx c只需扩展设计矩阵——加一列 x²。下面是独立的一份完整程序存成ch36_poly.cpp注意变量名和 36.3 的c无关#includeEigen/Dense#includeiostream#includevectorintmain(){std::vectordoublexs{0,1,2,3,4,5};std::vectordoubleys{1.1,3.0,5.2,6.9,9.1,11.0};Eigen::Index nxs.size();Eigen::MatrixXdA(n,3);// 三列x²、x、1Eigen::VectorXdy(n);for(Eigen::Index i0;in;i){A(i,0)xs[i]*xs[i];// x²A(i,1)xs[i];// xA(i,2)1.0;// 常数项y(i)ys[i];}Eigen::Vector3d cA.colPivHouseholderQr().solve(y);// c [a, b, c]std::cout二次拟合y c(0) * x^2 c(1) * x c(2)std::endl;std::cout残差 (A*c-y).norm()std::endl;return0;}实际输出二次拟合y 0 * x^2 1.98571 * x 1.08571 残差 0.226779这个结果很有意思二次项系数是0残差和直线拟合一模一样0.226779。原因是这批数据本来就是直线你给它更高次的模型它也只会把多余的那项压成 0。把ys改成{0, 1, 4, 9, 16, 25}正好是 y x²再跑一次实测输出二次拟合y 1 * x^2 -5.21706e-15 * x 7.14981e-15 残差 1.39037e-14二次项变成 1一次项和常数项是 1e-15 量级也就是 0残差 1e-14也就是 0——模型正确识别出了真实关系。思路完全一样把特征塞进设计矩阵的列就能拟合任意线性模型。这正是机器学习的核心思路——特征 最小二乘。36.6 为什么这是机器学习基础最小二乘拟合 机器学习里线性回归的 C 实现设计矩阵 A 特征矩阵 X待求参数 c 模型权重 w观测值 y 标签学会这个你就理解了线性回归、岭回归、甚至神经网络最后一层的数学本质。36.7 小结最小二乘让误差平方和最小的拟合。写成矩阵 Ax y用 QR 分解求解。残差范数评估拟合质量。扩展设计矩阵就能做多项式拟合 线性回归。下一章第二个实战项目3D 点云与刚体变换。练习题用上面的代码拟合给定数据打印斜率和截距。自己造一批数据y 3x 2 加随机噪声拟合看能不能还原。把拟合从直线改成二次曲线扩展设计矩阵。计算并打印拟合的残差。说说最小二乘和机器学习线性回归的关系。
RELATED

相关推荐

基于YOLOv8的景区古树名木保护监测系统:从数据集到部署的完整实战

基于YOLOv8的景区古树名木保护监测系统:从数据集到部署的完整实战

简介:这份资源面向计算机、人工智能、通信工程等专业的在校学生与教师,提供一套基于YOLOv8的景区古树名木保护监测系统完整实现,可用于毕业设计、课程设计或大作业,也适合作为目标检测入门与进阶的实战案例。压缩包共8个文件&…

📅 2026/10/9 15:15:36
第 35 章 · Eigen 进阶技巧

第 35 章 · Eigen 进阶技巧

最后一章 Eigen,讲实战中常用的技巧和模式:与 STL 结合、自定义函数、常用工具函数、用 Eigen::Map 接管外部数据、内存对齐,以及几个容易被忽略的坑。35.1 用 vector 管理一批矩阵 实战中经常要存一批矩阵/向量,用 std::vector&a…

📅 2026/10/9 15:15:36
neo4j电影知识图谱问答系统:建模、CSV导入与Cypher优化实践

neo4j电影知识图谱问答系统:建模、CSV导入与Cypher优化实践

简介:一套基于知识图谱与 Neo4j 图数据库的电影知识问答系统完整项目,面向计算机专业学生、Python 开发者,尤其适合作为知识图谱相关大作业或毕业设计的参考实现。项目覆盖知识抽取、实体关系建模、图数据库存储、问答检索到前端交互的完整链…

📅 2026/10/9 15:10:34
MORE NEWS

更多资讯

📰

MySQL农历数据库表结构设计与批量导入实践

简介:这份面向后端开发与业务系统的MySQL农历数据库覆盖1970—2100年共131年数据,包含农历日期、闰月、24节气、星期及法定假日等,可解决农历转换结果不一致、节假日信息不全的问题。压缩包仅2.56MB,共3个文件,其中2个…

📰

WPTools v6.29.1:WordPress静态安全扫描CLI工具详解

简介:WPTools v6.29.1 Standard Edition 是一套面向 Delphi/CBuilder 开发者的专业富文本编辑控件库,适用于 Windows 平台桌面应用开发,尤其适合需深度定制 RTF 编辑、打印与文档渲染功能的中高级开发者。资源包共含 497 个文件,主…

📰

伴随灵敏度分析驱动肿瘤时空放疗优化:Matlab实现全解析

前两年我接手了一个挺让人头疼的课题:肿瘤放疗计划优化。科室那边希望我不仅仅把“总剂量”算出来,而是能根据肿瘤的生长动力学,把空间上怎么照射、时间上怎么分割,一起交给模型去优化。折腾了几个月,真正让我把性能提…

📰

双目视觉工程实战:从标定到深度图生成与点云重建的全流程解析

简介:面向计算机视觉学习与开发的双目立体视觉系统资源包,围绕立体匹配、视差计算、深度图生成、点云重建、目标检测与跟踪、实时视频处理及相机标定与校正等关键技术展开,适用于机器人导航、自动驾驶等场景的算法验证与原型搭建。资源共132个…

📰

数据库系统工程师能力图谱:从2020真题解构底层核心能力

简介:本资源为2020年全国计算机技术与软件专业技术资格(水平)考试——数据库系统工程师科目上午真题及权威答案解析,专为备考软考中级职称的IT从业者、高校相关专业学生及数据库方向初学者设计,助力系统梳理计算机基础…

📰

基于PCA9422与MK51的嵌入式系统电源管理方案设计

最近在调一块带外部电源管理芯片的板子,核心器件组合是 PCA9422 这颗 PMIC 和 MK51DN512CLQ10 这颗 MCU。MK51DN512CLQ10 是 Kinetis 家族里的 K5 系列,Cortex-M4F 内核,512KB Flash,100 pin LQFP 封装,资源对中高端工…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬