0

0

C++如何实现简单的线性回归算法_C++基础机器学习算法代码实现【数据】

尼克

尼克

发布时间:2026-02-09 11:24:09

|

656人浏览过

|

来源于php中文网

原创

应使用 std::vector 存储数据,避免裸数组导致的越界、长度不一致和内存泄漏;需校验 x.size() == y.size(),处理空向量防除零;用 double 而非 float 提升精度;单次遍历累加 sum_x、sum_y、sum_xy、sum_xx;分母为 0 时须判断;训练与预测应分离,返回 (m, b) 并封装预测函数;手动实现 R²、MSE 等指标,注意平方用 x*x、防除零及预处理缺失值。

c++如何实现简单的线性回归算法_c++基础机器学习算法代码实现【数据】

std::vector 存数据,别手写数组

线性回归最基础的输入是两组等长数值:xy。用 std::vector 而不是裸数组,能避免越界、长度不一致、内存泄漏等问题。尤其当数据来自文件或用户输入时,size() 可直接校验一致性:

  • 读入后立刻检查 x.size() == y.size(),不等就提前返回或抛异常
  • 空向量必须处理,否则除零(比如计算均值时 sum / vec.size()
  • 避免用 float——梯度、残差累加容易失精度,double 更稳妥

公式推导要落地到变量名,别照抄数学符号

斜率 m 和截距 b 的闭式解(最小二乘)是:

m = (n·Σxy − Σx·Σy) / (n·Σx² − (Σx)²)
b = (Σy − m·Σx) / n

实际编码时,把 ΣxΣxy 等全部拆成独立变量,而不是在一行里嵌套求和:

  • double sum_x = 0, sum_y = 0, sum_xy = 0, sum_xx = 0; 显式声明
  • 单次遍历完成所有累加,别为每个 Σ 单独写一遍循环——效率低且易错
  • 分母为 0 时(即所有 x 值相同),必须判断并处理,否则 nan 或崩溃

预测函数要分离,别和训练混在一起

训练(拟合参数)和预测(给新 xy)是两个阶段。封装成独立函数更清晰、可测、可复用:

触站AI
触站AI

专业的中文版AI绘画生成平台

下载

立即学习C++免费学习笔记(深入)”;

  • 训练返回 std::pair 表示 (m, b),或定义简单结构体
  • 预测函数只接收 mb 和单个 x,返回 y = m * x + b,不依赖原始数据
  • 如果后续要支持批量预测,再重载一个接受 const std::vector& x_new 的版本

没有 scikit-learn 就得自己管误差和边界

C++ 没有现成的 fit()score(),R²、MSE 这些得手动算。但更重要的是几个隐形坑:

  • std::pow(x, 2)x * x 慢且可能引入浮点误差,平方一律用乘法
  • 计算 R² 时,若所有 y 相同,总离差平方和为 0,会导致除零——需单独判断
  • 输入 x 极大(如 1e6)时,sum_xx 可能溢出 double,但日常小数据集不用过早优化

真正麻烦的是缺失值和异常点——C++ 标准库不帮你过滤,得在预处理阶段明确决定:跳过、报错,还是用中位数填充。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

581

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

104

2025.10.23

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

541

2023.09.20

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

302

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

196

2025.07.04

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

173

2025.08.29

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

104

2025.10.23

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

434

2023.08.14

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

98

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Rust 教程
Rust 教程

共28课时 | 5.6万人学习

Git 教程
Git 教程

共21课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号