支持向量机SVM的SMO方法实现(C++)

本文通过实现一个图像化的SVM示例,展示了如何使用支持向量机进行分类。文中介绍了如何通过点击创建训练数据点,并调整惩罚因子C来观察其对分类超平面的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为毕设要用SVM,想深入了解一下。

看了几个中文博客作为初始的认识,再看了SVM鼻祖将SVM的论文,【见文章末尾】最后按照论文把把SVM实现,做了一个图像化例子:

首先上图,看下效果:

动态图

在对话框上随便点击一些点,左键点为绿色(正点),右键点击为红色(负点)


设置惩罚因子(默认为100),并点击SVM训练,得到超平面(本例中为一条直线),(被选为支持向量的样本点)增大显示:


修改惩罚因子C的值,重新训练SVM并绘制超平面,(变小的点没有被严格“分类正确”,即没有被分在支持向量远离超平面的位置):

惩罚因子越大,分类面越会考虑分类的准确性,因为分错一个惩罚大。

当惩罚因子小的时候,分类面会偏向大多数点的漂亮分类,有些奇异点可能会被分错。


模型说明:

在本程序中,

每个点为一个样本,样本的特征为2维,分别是途中各样本点的横纵坐标。

分类类别为两类:+1绿点,-1红点。

支持向量机的内核采用的是内积方式。K(xi,xj)= 向量xi与xj各对应元素相乘求和。


我的工程代码:(下载链接)

http://pan.baidu.com/s/1eQiR7NW

http://download.youkuaiyun.com/detail/hzq20081121107/7284409


参考文件:

1.SMO鼻祖论文 

sequential minimal optimization a fast Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines

http://www.msr-waypoint.com/pubs/69644/tr-98-14.pdf

2.SVM通俗理解,(里面某些贴图有错误,尚未更正)。

 http://blog.youkuaiyun.com/v_july_v/article/details/7624837  

3.SVM的推导过程,(没有完全看懂) 

http://www.cnblogs.com/biyeymyhjob/archive/2012/07/17/2591592.html  

4.SMO的一个实现:

http://blog.youkuaiyun.com/mutex86/article/details/10001523





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值