C++代码实现MATLAB中的fitcsvm函数功能
// // fitcsvm 的独立 C 实现SMO RBF 核无第三方依赖// 编译: g -stdc17 svm_standalone.cpp -o svm_standalone// 运行: ./svm_standalone// #includeiostream#includevector#includecmath#includeiomanipstructSample{doublex[2];doubley;};classSVM{public:doubleC1.0,gamma1.0,tol1e-3;std::vectorSampleD;std::vectordoublealpha;doubleb0;// RBF 核: K(a,c) exp(-gamma * ||a-c||^2)doubleK(constSamplea,constSamplec)const{doubled0;for(intk0;k2;k)d(a.x[k]-c.x[k])*(a.x[k]-c.x[k]);returnstd::exp(-gamma*d);}// 决策函数 f(x) sum_i alpha_i * y_i * K(x_i, x) bdoubledec(constSamplex)const{doubles0;for(inti0;i(int)D.size();i)salpha[i]*D[i].y*K(D[i],x);returnsb;}// SMO 训练voidtrain(conststd::vectorSampledata){Ddata;intn(int)D.size();alpha.assign(n,0.0);b0.0;for(intiter0;iter200;iter){intchanged0;for(inti0;in;i){doubleEidec(D[i])-D[i].y;// KKT 违反检查if(!((D[i].y*Ei-tolalpha[i]C)||(D[i].y*Eitolalpha[i]0)))continue;for(intj0;jn;j){if(ji)continue;doubleEjdec(D[j])-D[j].y;doubleaialpha[i],ajalpha[j];// 计算 alpha_j 的上下界 L, HdoubleL,H;if(D[i].y!D[j].y){Lstd::max(0.0,aj-ai);Hstd::min(C,Caj-ai);}else{Lstd::max(0.0,aiaj-C);Hstd::min(C,aiaj);}if(LH)continue;doubleeta2*K(D[i],D[j])-K(D[i],D[i])-K(D[j],D[j]);if(eta0)continue;// 更新 alpha_jdoubleajNaj-D[j].y*(Ei-Ej)/eta;if(ajNH)ajNH;if(ajNL)ajNL;if(std::fabs(ajN-aj)1e-5)continue;// 更新 alpha_idoubleaiNaiD[i].y*D[j].y*(aj-ajN);// 更新偏置 bdoubleb1b-Ei-D[i].y*(aiN-ai)*K(D[i],D[i])-D[j].y*(ajN-aj)*K(D[i],D[j]);doubleb2b-Ej-D[i].y*(aiN-ai)*K(D[i],D[j])-D[j].y*(ajN-aj)*K(D[j],D[j]);if(aiN0aiNC)bb1;elseif(ajN0ajNC)bb2;elseb(b1b2)/2;alpha[i]aiN;alpha[j]ajN;changed;break;}}if(changed0)break;}}doublepredict(constSamplex)const{returndec(x)0?1.0:-1.0;}intnumSV()const{intc0;for(doublea:alpha)if(a1e-8)c;returnc;}};intmain(){// ---------- 1. 训练数据XOR 分布 ----------std::vectorSampletrain{{{1.0,1.0},1.0},{{-1.0,1.0},-1.0},{{-1.0,-1.0},-1.0},{{1.0,-1.0},1.0}};std::coutstd::fixedstd::setprecision(2);std::cout Training Data \n;for(inti0;i(int)train.size();i)std::cout Sample i: y(train[i].y0?1:-1) x[train[i].x[0], train[i].x[1]]\n;std::cout\n;// ---------- 2. 配置参数对应 fitcsvm 的 Name-Value ----------SVM svm;svm.C1.0;// BoxConstraintsvm.gamma5.0;// 1 / (2 * KernelScale^2)svm.tol1e-3;std::cout SVM Parameters \n;std::cout C svm.C\n;std::cout gamma svm.gamma\n;std::cout tol svm.tol\n\n;// ---------- 3. 训练 ----------std::cout Training ...\n;svm.train(train);std::cout Training done.\n\n;// ---------- 4. 模型信息 ----------std::coutstd::setprecision(4);std::cout Model Info \n;std::cout Support vectors svm.numSV()\n;std::cout Bias (b) svm.b\n;std::cout Alphas [;for(inti0;i(int)svm.alpha.size();i)std::coutsvm.alpha[i](i1(int)svm.alpha.size()?, :);std::cout]\n\n;// ---------- 5. 预测 ----------std::cout Predictions \n;std::vectorSampletests{{{1.0,1.0},1.0},{{-1.0,-1.0},-1.0},{{0.5,0.5},1.0},{{-0.5,-0.5},-1.0}};for(constautot:tests){doubledsvm.dec(t);doublepsvm.predict(t);std::cout x[std::setw(5)t.x[0], std::setw(5)t.x[1]] decisionstd::setw(8)d predicted(p0?1:-1) expected(t.y0?1:-1)(pt.y? [OK]: [X])\n;}std::cout\n Done.\n;return0;}

相关新闻

8GB显存跑通125B MoE大模型:Qwen3.8-Flash-next轻量化部署实战

8GB显存跑通125B MoE大模型:Qwen3.8-Flash-next轻量化部署实战

1. 项目概述:为什么在8GB显存16GB内存上跑动Qwen3.8-Flash-next 125B MoE,不是“硬刚”,而是精密工程你看到这个标题的第一反应可能是:“这不可能。”——没错,我第一次拿到需求时也是这么想的。Qwen3.8-Flash-next 12…

2026/10/13 9:55:51 阅读更多 →
基尼系数能跨国比较,却不能无条件拿来做城市或高频研究

基尼系数能跨国比较,却不能无条件拿来做城市或高频研究

拿到一列“国家—年份—基尼系数”,最容易产生两种错觉:既然是统一指标,就可以直接比较所有国家;既然页面有历史数据,就可以补齐为连续年度序列。问题在于,指标名称一致不代表调查方法完全一致,…

2026/10/13 9:55:54 阅读更多 →
【AI大模型接入SDK】ChatServer 整体初始化概述

【AI大模型接入SDK】ChatServer 整体初始化概述

🎬 个人主页:艾莉丝努力练剑❄专栏传送门:《C语言》《数据结构与算法》《C/C干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》⭐️为天地立心,为生民立命…

2026/10/13 9:55:58 阅读更多 →

最新新闻

前驱图与AOE网:用同一张DAG看懂操作系统与数据结构中的时间形状

前驱图与AOE网:用同一张DAG看懂操作系统与数据结构中的时间形状

期中周的那个深夜,我左手压着操作系统的教材,右手摊开数据结构的复习讲义。一边是前驱图的判断题,一边是AOE网的关键路径大题,我本来只想把这两页一起看掉,省得来回翻书,结果越看越不对劲——怎么它们画出来…

2026/10/13 10:02:18 阅读更多 →
EM算法详解:从隐变量推断到高斯混合模型实战

EM算法详解:从隐变量推断到高斯混合模型实战

1. 这不是数学课,是机器学习里“猜谜游戏”的通关手册 你有没有遇到过这样的场景:训练一个高斯混合模型时,明明数据摆在那里,却不知道每个样本该属于哪个高斯成分;做隐变量建模时,手握观测数据X&#xff0c…

2026/10/13 10:02:18 阅读更多 →
UserCF推荐算法原理与Python工程实践指南

UserCF推荐算法原理与Python工程实践指南

1. 项目概述:为什么UserCF至今仍是推荐系统入门必修课“基于用户的协同过滤算法(UserCF)”这九个字,听起来像教科书里的一个章节标题,但在我带过的二十多个实际推荐项目中,它几乎出现在每一个从零搭建的冷启…

2026/10/13 10:02:18 阅读更多 →
RAG知识库问答系统‘查得到答不对’的根因与工程化解法

RAG知识库问答系统‘查得到答不对’的根因与工程化解法

简介:这是一套开箱即用的大语言模型RAG知识库问答系统实现方案,面向AI工程师、企业知识中台建设者及高校科研人员,解决私域文档智能问答中幻觉高、召回差、模型绑定强等核心痛点。资源包共937个文件,以484个Python后端逻辑与向量化…

2026/10/13 10:02:18 阅读更多 →
C#实现STEP文件解析器:从词法分析到B-Rep实体树构建

C#实现STEP文件解析器:从词法分析到B-Rep实体树构建

简介:面向计算机专业本科毕设的STEP文件解析器项目,基于C#实现STEP中性文件的元素识别、拓扑关系提取与自定义数据结构保存,并通过STL格式转换配合Three.js完成3D模型加载显示。压缩包共19个文件,大小仅35KB,包含9个C#…

2026/10/13 10:02:18 阅读更多 →
用层次分析法(AHP)科学决策就业选择

用层次分析法(AHP)科学决策就业选择

1. 为什么就业选择不能只靠“感觉”和“听说”刚带完一届毕业设计,有位A同学连续三周来找我聊就业方向:一会儿说“听说算法岗钱多”,一会儿又焦虑“听说现在卷得不行”,最后拿出一张密密麻麻的Excel表,列了8家公司的岗…

2026/10/13 10:01:17 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →