SVM學習之一 libsvm中的資料預處理

2021-05-01 13:49:33 字數 1426 閱讀 1891

名詞解釋:

(1) svm(support vector machine)是從瓦普尼克(vapnik)的統計學習理論發展而來的,主要針對小樣本資料進行學習、分類和**(有時也叫回歸)的一種方法,能解決神 經網路不能解決的過學習問題。作者以為,類似的根據樣本進行學習的方法還有基於案例的推理(case-based reasoning),決策樹歸納演算法c4.5等,以後將詳細闡述這兩種方法。

(2)過學習問題:訓練誤差過小導致推廣能力下降,即真實風險的增加。

(3)推廣能力:generalization ability,也可以說是泛化能力,就是對未知樣本進行**時的精確度。

原文:a practical guide to support vector classification.

libsvm中的樣本預處理的原則有2個:

1 非數值屬性(categorical feature)

由於svm要求被處理的資料都是實數,因此對於屬性值為類別的屬性要進行轉換。例如,可以轉換成3個屬性

red    (1, 0, 0)

green (0, 1, 0)

blue   (0, 0, 1)

來表示。經驗表明當這樣的非數值屬性的取值不是太多(這個具體數字不明確)的時候,這種編碼比用乙個數字來表示屬性的類別要穩定的多,比如用1, 2, 3來分別表示red, green, blue就不太合適了。目前,這個過程沒有實現自動處理,需要使用者根據屬性取值的多少自己動手去修改。

2 縮放(scaling)

進行縮放的原因和使用神經網路時的考慮是一樣的,由於rbf網路中採用樣本資料的歐式距離來計算。主要優點就是避免數值範圍較大的屬性控制數值範圍較小的 屬性。另乙個優點就是避免計算時的numerical difficulties. 因為核值通常依賴特徵向量的內積(inner product),而較大的屬性值可能導致numerical問題。因此推薦把每個屬性縮放到[-1, 1]或者[0, 1]之間,而且前乙個範圍要比後乙個好,即對列向量進行規範化,其詳細解釋和計算公式見http://www.faqs.org/faqs/ai-faq/neural-nets/part2/中的「should i standardize the input variables (column vectors)?」。libsvm中沒有考慮屬性的型別(效益、成本、固定、偏離、區間、偏離區間 6 種不同的屬性型別的規範化計算公式是不一樣的,詳見:徐澤水,《不確定多屬性決策方法及應用》,清華大學出版社,2004。)而採用了統一的線性縮放,作者以為此處可以改進一下。

需要注意的是,在進行測試之前,要對測試資料進行同樣的縮放操作。其實在libsvm中有程式(svmscale.exe)來進行縮放操作,也可以不用手工縮放,只要用easy.py來對(經過非數值的歸一化處理之後的)原始資料直接操作即可。

上面這兩種方法基本上可以完成所有的樣本的預處理了。其實只有原則 1 是需要自己手工改動的,其他工作在libsvm中的tool資料夾下都由現成的python程式處理。

svm與matlab中的libsvm應用

有關svm教程以及教材已經很多,資料中介紹的都很詳細。略過數學證明,用語言直觀簡潔地描述 svm就是乙個可以控制引數改變分隔平面的乙個二元分類器,得到1和 1的分類結果。除了分類,svm在加入了eps誤差引數之後可根據點距離分隔平面的遠近 給出具體的回歸函式值 這時的support vector m...

SVM系列之一 白話支援向量機(SVM)

初識支援向量機 svm 我們來玩乙個遊戲 你大概會這麼放吧 為了測試你的答案是不是符合要求,我在桌上又放了更加多的藍紅小球,可以發現,乙個紅球被分錯了位置 支援向量機 svm 可以白話為 試圖找到乙個木棍放置的最佳位置,使得木棍的兩邊有盡可能大的間隙。看來我出的題目還是太簡單了,下面我給你出個難點兒...

SVM學習總結(一)如何學習SVM

前段時間一直在鑽研svm演算法,原先一直覺得乙個非常簡單的演算法,沒想到在學的時候還挺難,主要還是對凸優化方面的知識不太熟悉,以後得加強,下面主要說說svm演算法的學習思路 對小白初學者 通過各種資料的對比學習,我個人覺得使用李航的 統計學習方法 第七章,再輔助以網上的資料應該就差不多了,然後再寫個...