前段时间一直准备在期末考试(竟然连着近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进行对比: