一. 將數(shù)據(jù)格式轉(zhuǎn)換為libsvm
用libsvm分析數(shù)據(jù)揣炕,首先要把csv格式的數(shù)據(jù)轉(zhuǎn)換成libsvm格式,網(wǎng)上搜到的方法如下:
1.?網(wǎng)上有一個xls文FormatDataLibsvm.xls具有宏命令债朵,可以利用其中的宏命令來實現(xiàn)。對于屬性數(shù)據(jù)只有一二百的瀑凝,這種工具簡單方便序芦。
2.?可以利用weka來轉(zhuǎn)換,用weka打開csv文件粤咪,再將文件重新保存為libsvm格式谚中。
由于我的數(shù)據(jù)有180萬左右,所以使用了第二種方法。去weka官網(wǎng)下載最新版本宪塔,我的是weka-3-9-2-oracle-jvm磁奖,轉(zhuǎn)換前需要提前下載libsvm的包。打開GUI界面某筐,點擊tools下的package manager比搭,按如下界面搜索并下載。
然后就可以轉(zhuǎn)換了數(shù)據(jù)了南誊。需要注意的是身诺,保存時有可能沒有存為.libsvm的選項,這是因為數(shù)據(jù)格式只能是numerical或者nominal弟疆,修改或移除之后就可以了戚长。
二. Mac電腦配置python(PyCharm)的libsvm
1. 首先下載libsvm.zip文件??
2. unzip一下libsvm.zip文件,用終端進入libsvm文件夾??
3. 輸入make
4. 進入libsvm下的python文件夾??
5. make一次libsvm->python文件夾 ?怠苔,上層文件夾會出現(xiàn)一個libsvm.so.2文件
現(xiàn)在已經(jīng)編譯好libsvm了同廉,值得注意的是:libsvm.so.2是unix系統(tǒng)所需要的鏈接庫,而且存在于python上一個文件夾中(即libsvm主文件夾中柑司,而且在svmutil.py中引用libsvm.so.2時迫肖,都是看做在上一個目錄下進行引入的)
6.?進入系統(tǒng)所使用的python的site-packages文件夾,將libsvm.so.2復制到site-packages文件夾中(本機為/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages)
7. 在該文件夾下建立文件夾libsvm攒驰,進入libsvm文件夾蟆湖,新建__init__.py文件(這一步十分重要,因為libsvm.so.2在上一層文件夾中玻粪,因此該libsvm文件夾將會被看做一個python工作區(qū)隅津,而__init__.py對于python工作區(qū)來說是必須的)
8. 將libsvm->python文件夾下的svm.py、svmutil.py都復制到這個新建的libsvm文件夾中劲室。
按道理說伦仍,這樣就成功了,但是當我用PyCharm運行from libsvm import svmutil時很洋,出現(xiàn)了如下問題:
ModuleNotFoundError: No module named 'svm'
查看svmutil.py充蓝,發(fā)現(xiàn)有如下代碼:
from svm import *??
from svm import __all__ as svm_all?
因為當前路徑不在系統(tǒng)路徑下,編譯器不知道去哪里找svm.py喉磁,所以修改上述代碼為:
from libsvm.svm import *??
from libsvm.svm import __all__ as svm_all?
就可以用from libsvm.svmutilimport *運行啦谓苟。
三、一個簡單例子
這里使用了一個最簡單的栗子协怒。
from libsvm.svmutil import *
y,x=svm_read_problem('train.libsvm') ?# 訓練數(shù)據(jù)
yt,xt=svm_read_problem('test.libsvm') ?# 測試數(shù)據(jù)
m = svm_train(y[:37000], x[:37000]) ?# 使用前37000個數(shù)據(jù)訓練
p_label,p_acc,p_val=svm_predict(y[-1700:],x[-1700:],m) ?# 使用后1700個數(shù)據(jù)測試