1. 程式人生 > >SVM支援向量機中PCA函式的使用注意事項

SVM支援向量機中PCA函式的使用注意事項

使用SVM做一個圖片分類器,主要使用的技術是,各種特徵提取方法加上PCA主成分提取,最後用SVM進行圖片分類處理。

特徵提取這個東西還是比較簡單的,前人做的工作很多,原始碼也不少。主要採用的不變距、HOG、SIFT、LBP、資訊熵、tamura紋理特徵、面積和尤拉數等。主要從兩個大的角度研究。一個是紋理特徵,還有一個就是幾何特徵。總的來說,就是各種特徵疊加然後到了整個分類器,慢慢調整最終達到比較的結果。調的這個過程需要耐心和記錄。每變一個引數,執行一遍,最後都要記錄下最終的結果。方便日後進行比對。

PCA主成分分析,我跌了個跟頭,先說一下PCA的作用吧。PCA說白了就是提取主成分的。為什麼要提取主成分呢,由於之前提取的特徵量特別大,你不可能把所有特徵都拿來算一下。如果你有超級計算機作支撐,當我沒說。而且你之前提取的特徵應該是比較大的一部分是沒有作用的,甚至會有噪聲,因此你需要提取有用的特徵,進而有利於接下來的支援向量機的分類。好了,說了這個多PCA是個什麼東東,我就來講講,我是咋掉坑的。這個坑是這樣的,我把得到的特徵矩陣,直接放進了PCA的計算函式princomp函式,然後發現怎麼更改特徵矩陣都不行,測試集一直都是20%的準確率,訓練集的準確率倒還比較好90%以上的準確率。怎麼著都不行。而且當時還是用的我的小筆記本跑的程式,跑一次筆記本風扇嗚嗚轉,電腦各種發熱,可心疼死我了。

後來我想不行啊,這樣下去啥進展沒啊。跑程式一天跑了沒幾次。後來果斷換了教研室桌上型電腦,雖然桌上型電腦也不咋地,但是耐操啊。現在一天跑十次不在話下。也就是在臺式機上各種跑程式的過程中慢慢摸索出了一下道道。之前princomp函式的引數是有問題的,不能直接放入特徵矩陣,應該先轉置一下特徵矩陣,然後再轉置一下score(提取得到的特徵)得到的才是最終的結果。雖然現在的結果也不是很好,但是好歹可以達到50%以上的準確率。

最後再說一下SVM吧,這個東西,在網上都有現成的工具箱,我用的libsvm。比較好用四五行就可以搭起來。但是問題就是你需要調的引數問題。我在這個地方也遇到了不少問題,好多大神都建議直接自己擼程式碼,自己搭一個svm,但是本人還是才疏學淺,採用的是

《MATLAB神經網路30個案例分析》這本書裡面的教程,總體來說很不錯,比較詳細,有具體的例項教程。看這本書上手很快。但是這裡面有個小坑。可以看我之前的吐槽部落格。

機器學習這個東西,其實入門不算太難,但是你想真正深入原理,甚至自己看機器學習論文徒手擼一個學習機器還是比較難的。共勉!