SVM支持向量機

SVM

支持向量機,用於向量空間的分類,屬於數據挖掘中的分類算法。其過程就是接受訓練數據(即有明確類標號的數據),構造其特徵向量,對應在多維空間上的點,使用SVM算法找出一個最大邊緣超平面,使得它的左右兩側分爲兩種不同的類別。這樣就能夠得到一個分類器。

線性可分:如二維空間中,可以找出一條直線,使得直線的上下兩側爲兩種不同的類別。
線性不可分:無法找到上述的直線,但是可以通過把這些點映射到高維空間中,從而達到在高維空間中線性可分的目的。所以本質上,最終都是要解決線性可分的問題,而這個問題也是SVM的核心問題。
空間映射:如何實現低維到高維空間的映射?核函數!對於線性不可分的數據,我們可以將它映射到線性可分的新空間中,之後就可以用硬間隔支持向量機或軟間隔支持向量機來進行求解了。這樣,我們將原問題變成了如何對原始數據進行映射,才能使其在新空間中線性可分。

核函數(kernel): linear(線性),poly(多項式),RBF(徑向基函數),sigmoid

應用及問題

SVM算法中關鍵部分
1. 尋找線性可分的scale(最大邊緣超平面);
2. 低維到高維空間的映射;

尋找出scale的過程涉及到複雜的數學推理,而且低維到高維的空間映射涉及到核函數的知識。

優缺點:SVM算法在海量數據中的運行時間可能是立方級的,而且對於一些不是很明顯分類的數據集,運用SVM算法的準確度可能不及樸素貝葉斯,因爲會存在過度擬合的問題(噪聲點對SVM算法的影響會比較大)。
實例測試中需要頻繁調整參數Cgamma以得到更好的預測結果, 但是工具GridCV,一種幾乎能自動查找最優參數調整的優秀 sklearn 工具。

scikit-learn代碼

from sklearn import svm
# 選擇核類型
clf = svm.SVC(kernel="linear")
# 訓練模型
clf.fit(features_train, labels_train)
# 得到預測分類數據
pre = clf.predict(features_test)

SVC參數:

sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=None, random_state=None)

# gamma 核函數的係數, 默認是 gamma = 1 / n_features
# C 目標函數的懲罰係數C,用來平衡分類間隔margin和錯分樣本的,default C = 1.0, C越大,說明儘可能的分開訓練數據

參考

SVM詳細講解
SVM簡介入門

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