libsvm libliner使用經驗

2021-06-07 19:44:09 字數 1283 閱讀 1756

首先,一定要先讀完libsvm和libliner的guide。

公司用libsvm做的分類。忙了這麼久了,整理下經驗。(不包含特定領域,涉及到商業機密任何資訊)

svm估計懂些人工智慧的都知道啦。不過除非你是搞科研的,要不我估計你也不會去推導它。。。。太***恐怖了。

其實原理很簡單。就是把不同類的向量在座標系上標點,然後用低一維的形把點線性分開

如果你不是學術帝,那該想到了一點,就是svm的輸入維數越多越好。這意味著,不需要使用核函式,就可以線性可分。真的要記住這句話,具體的數我不能寫出來。但好好想想,這麼用,就會發現,線性不可分?no。這個世界沒有東西是線性不可分的(做適當預處理)。所以,實際工程中,讓核函式見鬼去吧。那是學術帝們玩的東西。不用核函式,而拓展維度(怎麼拓展,自己想啦),你會發現,速度提高十多倍。。。。精度呢,維度控制好了,也是可以提高不少滴。

台灣的教授哥哥真給力,寫的libsvm和libliner,是福音吶。做大資料的時候,一般得用matlab(當然,你要是硬要用c++也沒人反對,真的慢很多的)。這兩個庫都有matlab介面,用mex編譯下就可以當成matlab函式用了。

使用流程,easy.py不推薦用,先自己用grid.py找c(最重要的引數,guide裡有介紹),用train的-v 5做交叉訓練,得出乙個精度,基本可信的(注意,一般都用-v 5的,經驗資料,效果最好)。然後不用-v,直接訓練出model檔案,然後呼叫predict(都在windows資料夾下),就得出訓練的質量了。

如果你的資料可以拓展的多維,或者本身就有很多維,推薦用libliner(1k維以上),否則libliner的精度不高,但快,秒殺級的快。

其實,把svm看成是黑盒的工具,最重要的反倒不是演算法上怎麼改進,而是你的輸入向量。如果你在相關工作中遇到了精度瓶頸,一定要從輸入向量上入手,切記不要嘗試「改善」演算法。(除非是學術帝)

另外,libsvm有個cuda加速版本。倆字:坑爹。不要用。代價太大,大部分情況下是減速,而不是加速。而且,他只實現了交叉訓練(必須得-v引數),不交叉的話還是呼叫的原程式。

關於grid.py的使用方法,改local_woker部分,具體在libliner的faq上有。(谷歌 libliner grid.py)

還有,libsvm的scale那個應用,盡量不要用。它是整個全體scale的,通常不會滿足你的需求的,不信你研究下,看它揹著你幹了什麼坑爹的事。用libsvmread把資料讀到matlab,然後在matlab裡用mapminmax基本能搞定大部分的scale需求了,libsvmwrite寫入到檔案。對了,mex編譯的時候記得加-largearraydims

VMware License Server使用經驗

近期在測試vmware server,在使用vmware license server的時候碰到一些問題,經過兩天的實驗,問題得以解決,現記錄如下,以供朋友們參考。1 複製license檔案 在安裝vmware virtualcenter的時候,會一同安裝license server伺服器。如果你在...

Django Rest framework使用例項

一 修改配置檔案 setting.py django.contrib.admin django.contrib.auth django.contrib.contenttypes django.contrib.sessions django.contrib.messages django.contri...

Android AlarmManager 使用指南

intent intent new intent intent.setaction updatemgr.check update action 如果你的flag 是flag one shot,那麼你就只能受到一次廣播。如果使用setrepeat,你設定的intervalmills 少於60s,那麼就...