[Note] 在 ubuntu 上以 python 執行 libsvm

參考: https://blog.csdn.net/letsseehow/article/details/10483729

首先, 利用 wget 下載 libsvm, 並解壓縮,
下載網址請參照 libsvm 的官網: https://www.csie.ntu.edu.tw/~cjlin/libsvm/
或是直接用此連結: libsvm連結

假設解壓縮完的資料夾路徑為: ~/libsvm-3.23
需要 make 兩次, 一次在 ~/libsvm-3.23, 另一次在 ~/libsvm-3.23/python/,
完成後, 應該可以找到: ~/libsvm-3.23/libsvm.so.2

把檔案移到 python2.7 的資料夾下, 指令如下:

sudo cp ~/libsvm-3.23/python/*.py /usr/lib/python2.7/dist-packages/
sudo cp ~/libsvm-3.23/libsvm.so.2 /usr/lib/python2.7/


接著, 我們來寫一個簡單的 SVM 測試程式:

from svmutil import *
from svm import *

y, x = [1,-1], [{1:1, 2:-1}, {1:1,2:1}]
prob  = svm_problem(y, x)
param = svm_parameter('-t 0')
model = svm_train(prob, param)
yt = [1]
xt = [{1:1, 2:-1}]
p_label, p_acc, p_val = svm_predict(yt, xt, model)
print(p_label)


其中, y 是 label, x 是分類輸入,
舉例來說: {1:1, 2:-1} 代表有兩個 feature, 第一個數值為 1, 第二個數值為 -1,
svm_parameter 為 SVM 所用到的參數, 請參照 libsvm 的說明,
yt, xt, 則是用來 testing 的資料, 執行結果如下:

$ python svmtest.py
*
optimization finished, #iter = 1
nu = 0.500000
obj = -0.500000, rho = 0.000000
nSV = 2, nBSV = 0
Total nSV = 2
Accuracy = 100% (1/1) (classification)
[1.0]

留言

熱門文章

LTE筆記: RSRP, RSSI and RSRQ

[WiFi] WiFi 網路的識別: BSS, ESS, SSID, ESSID, BSSID

LTE筆記: 波束成型 (beamforming) 和天線陣列