2007/1/8

libsvm-easy.py, grid.py and parameter selection雜談

上一篇大概介紹了LibSVM這套軟體,在這一篇裡,我將介紹一下LibSVM底下附的幾隻好用的tool:easy.py、grid.py!

[easy.py]
林智仁老師為了能讓使用者能更方便的使用libsvm,因此開發了easy.py這隻程式,使用者只要將dataset格式處理成libsvm看得懂的格式,再執行easy.py,便能自動替使用者執行svmscale、grid.py( do cross-validation to find the best parameter)、svmtrain、svmpredict,最後會產生預測的結果。

至於.py的程式要如何執行,那就必須先安裝Python這套好用的程式語言。這是一套非常強大的工具,屬於Open Source的軟體。能夠撰寫OO的程式,也能撰寫scripts。最重要的是只要有安裝python就可以執行了,目前在Unix-like、 win32、Mac OS上面都有,跨平台的能力十分強大,尤其在linux上面,更是屬於內建的一套軟體,真是棒啊!

想想…小弟的研究dataset由於資料量非常大,因此利用文書處理軟體來進行處理的話,常常會發生遺失資料的情況,小弟猜想是不是在windows平台上的文字檔有檔案大小及行數的限制。所以小弟在處理資料的時候,也常常利用linux來進行處理。就連把資料餵進資料庫來做處理,SQL Server 2000遇到幾十、幾百萬的資料筆數,也是受不了…So...小弟就回歸最原始的方式來進行處理:寫幾隻小程式就解決了!

小弟是覺得easy.py是比較適合初學者來使用,因為可以下的參數不多,再加上程式自動化程度高,因此小弟未曾使用過這隻程式!倒是接下來要介紹的grid.py這隻程式,小弟還比較感興趣呢!

[grid.py]
由於Support Vector Machine predict的正確率的高低,有很大一部份取決於參數的選擇。parameter selection也是一項很值得研究的議題!

所以我們直接使用林智仁老師提供的工具來選擇最佳的參數。其實在實驗的過程中,可以發現參數的選取其實是很不容易的一件事…有時候利用grid.py找出的best parameter並不見得會比自己亂try的結果來的好!

我們來探討一下grid.py這隻程式好了(雖然我也沒看得很熟),主要是利用2個參數:cost、gamma,來對於使用C-SVC(RBF kernel function)尋找最佳參數!

參數V:指定cross validation的方式,預設是5。這代表什麼意思呢?代表著程式會將train dataset分成5個部份,然後利用4個部份的資料當做新的training data、1個部份當做testing data…依此類推來找尋參數

參數log2C:Cost的值,看給定的是多少?

參數log2G:Gamma的值,同樣也是看使用者要給多少值

========================================================================

程式呢?就是利用log2C、log2G的組合值來找參數,說了這麼多似乎都是廢話…不過值得注意的一點就是…事先分析自己要研究的資料特性,然後來給予參數的範圍…如果範圍給太大的話,浪費時間;如果範圍給的不好的話,不見得找得出最好的參數!因此在svm裡頭找參數真的是一件非常困難的一件事,似乎至今仍未有一個合理且通用的參數找尋方法!

========================================================================

ps.可能是libsvm的效率問題,我的實驗利用grid.py(by default parameter),跑了一個月…仍未有結果,試想…如果是加大參數的範圍或是利用10-fold的方式,是不是更浪費時間呢?

anyway....參數的確是一件很重要的問題,試問如果有人問你:參數怎麼來的,有理論依據嗎?我想這就會考倒很多人…

為瞭解決grid.py的計算問題,目前有實驗室的功能clustering…不過僅限於unix-like平台上面可以執行,藉由同時發送多個計算任務到不同的電腦系統,得出結果的時間也縮短的多!

矣,寫到不知道在說什麼了…我想還是等網友們發問吧!看大家想知道什麼…不過目前我的主力研究領域是feature selection…為的是解決計算時間、資料量、複雜度的問題!

不過…還是希望今年能畢業!

沒有留言: