向AI轉型的程式設計師都關注了這個號👇👇👇
大數據挖掘DT機器學習 公眾號: datayx
SVM支持向量機是建立於統計學習理論上的一種分類算法,適合與處理具備高維特徵的數據集。
下面給出幾個本人認為講解的相當不錯的:
支持向量機通俗導論(理解SVM的3層境界):http://blog.csdn.net/v_july_v/article/details/7624837
這篇講的很詳細,由淺入深層層推進。
還有一個比較通俗的簡單版本的:手把手教你實現SVM算法:http://blog.csdn.net/alvine008/article/details/9097105
SVN原理比較複雜,但是思想很簡單,一句話概括,就是通過某種核函數,將數據在高維空間裡尋找一個最優超平面,能夠將兩類數據分開。
針對不同數據集,不同的核函數的分類效果可能完全不一樣。可選的核函數有這麼幾種:
線性函數:形如K(x,y)=x*y這樣的線性函數;
多項式函數:形如K(x,y)=[(x·y)+1]^d這樣的多項式函數;
徑向基函數:形如K(x,y)=exp(-|x-y|^2/d^2)這樣的指數函數;
Sigmoid函數:就是上一篇文章中講到的Sigmoid函數。
我們就利用幾個數據集,直接給出Python代碼,看看運行效果:
測試1:身高體重數據運行結果如下:
可以看到,針對這個數據集,使用3次多項式核函數的SVM,得到的效果最好。
測試3:圓形邊界最後我們測試一個數據分類邊界為圓形的情況:圓形內為一類,原型外為一類。看這類非線性的數據SVM表現如何:
測試數據生成代碼如下所示:
測試結果如下:
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0, kernel='linear', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False)
0.65
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0, kernel='poly', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False)
0.675
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0, kernel='rbf', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False)
0.9625
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0, kernel='sigmoid', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False)
0.65
可以看到,對於這種邊界,徑向基函數的SVM得到了近似完美的分類結果。
搜索公眾號添加: datayx
不斷更新資源
深度學習、機器學習、數據分析、python
長按圖片,識別二維碼,點關注