[C++/Learning] 基于SMO的非线性支持向量机(SVM)可视化程序(附代码)

前段时间一直准备在期末考试(竟然连着近2个月!),完全没时间捣鼓这些小玩意儿。现在准备过年终于有时间写代码了~。于是我就写了这样的一个SVM可视化程序来练练手。

这篇文章将提供基于smo求解SVM问题的source code和video等资源。程序是在读paper之后直接采用C++撸出来的程序,

一、相关资源

开头还是惯例附上下载资源:

开发环境:C++(IDE: Qt)

B站视频:https://www.bilibili.com/video/av42386166/

Github:https://github.com/RyuZhihao123/SMO_SVM

演示exe:https://pan.baidu.com/s/1swjQPtoqXv8BRUBRmpOhqw(提取码:s670 )

参考文献:Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines.[ Platt ]

【说明】在Bilibili中上传了两份视频:第一份视频SVM可视化程序演示,及paper导读第二份视频SVM的详细推导(包含:Linearly separable SVM,Soft-margin,Kernel function)。具体细节可以在视频中了解到,视频中介绍的也都非常详细,所以这里仅仅贴出实现结果和资源~

同时对于Github中上传的代码,是采用Sparse Matrix存储样本因此可以处理高维度数据集。虽然这是一个可视化程序,但是单独抽出使用svm.h和svm.cpp和samples.h也可以用于其他任意datasets的training。如果有不明白的细节,可以联系我。

二、程序分类效果:

接下来是使用本文程序所进行的分类效果:

(1)使用Gaussian Kernel function的分类结果:

线性不可分情况(使用高斯核函数)
线性不可分情况(使用高斯核函数)​​​
线性不可分情况(使用高斯核函数)

(2)使用Linear Kernel function

线性可分情况(使用线性核函数)

(3)对线性不可分情况使用Linear和Gaussian两种Kernel

1. 首先是使用Linear kernel:

2. 接着是使用Gaussian Kernel进行对比:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章