初窺SVM

今天和師兄交流了一番,終於對SVM有了初步的理解,雖然覺得自己還是很小白,但是有收穫、有進步就好。

SVM處理流程(待修正):

1.  收集數據,相關性分析(p卡方檢驗),特徵選擇(主成份分析PCA)。PCA提取特徵向量,用這些來分類,SVM是分類器,輸入的就是特徵向量。

2.  歸一化數據。就是根據實際要求,將數據的取值範圍轉化爲統一的區間如[a,b],a,b爲整數。

3.  利用抽樣技術將數據集分爲訓練集和測試集。抽樣技術有分層抽樣,簡單抽樣(等概率抽樣)。一般訓練集>測試集,就是要保證足夠的訓練樣例。

4.  將數據轉化爲軟件(接口)所支持的格式。就libsvm(c++,java)來說,我們可以使用FormatDataLibsvm.xls將數據轉化爲libsvm所要求的格式。

5.  選擇核函數,可以優先考慮rbf。核函數是把低維數據映射到高維空間,讓線性不可分的問題變成線性可分。

6. (訓練)對訓練集利用交叉驗證法選擇最好的參數C和r(西格瑪) (rbf核函數中的參數gama)。

可以通過網格法尋找出最優的參數,注意一次交叉驗證得到一個參數對所對應的模型精度,網格法(訓練的一個過程)目的就是找到使得模型精度達到對高的參數對(這裏的參數對可能不止兩個,有可能也有其他的),可以使用一些啓發式的搜索來降低複雜度,雖然這個方法笨了點,但是它能得到很穩定的搜索結果。需要提到的這裏在對訓練集進行分割的時候涉及到抽樣,一個較好的方法就是分層抽樣。從這步可以看出其實 Cross-Validation是一種評估算法的方法。

        a. 訓練的目的得到參數和支持向量(存儲在xml文件中),得到參數就能得到支持向量,帶進算式計算SVM分類的準確度,以準確度最高的一組參數作爲最終的結果,沒有絕對線性可分的,都有一個誤差,參數就是把那個誤差降到最低。

        b.  這裏的準確性是指將訓練集的每個樣本的向量與支持向量做運算,將運算結果與標記值比較,判斷是否屬於這個類,統計這個類的正確的樣本數,最高的那一組參數準確性最高。

c. 最終訓練得到分類器。SVM只能分兩類,所以這裏的分類器是兩個類組成一個分類器,如果有K類,就有k(k-1)/2個分類器。

7.  用6中得到的參數對在整個訓練集合上進行訓練,從而得出模型(即分類器)

8.  利用測試集測試模型,得到精度。這個精度可以認爲是模型最終的精度。當然有人會擔心3步中抽樣會有一定的誤差,導致8得到的精度不一定是最好的,因此可以重複3-8得到多個模型的精度,然後選擇最好的一個精度最爲模型的精度(或者求所有精度的均值做爲模型精度)。(需要多次選擇訓練集和測試集,然後每一次得到一個精度的模型,選擇最好的一個精度作爲模型,也就是我們項目裏面要多次訓練的原因)

9. 識別分類。兩個類超平面的形成,意味着目標函數的形成,然後代入待識別樣本,識別時對應的組代入對應的參數,得出結果進行投票,判定屬於那個類。


參考:http://blog.sina.com.cn/s/blog_656c4f9c01010g7o.html

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