[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進行對比:

 

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