前段時間一直準備在期末考試(竟然連着近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進行對比: