1 导入libsvm包
libsvm下载地址:http://www.csie.ntu.edu.tw/~cjlin/libsvm/oldfiles/
如果libsvm需要经常使用,可以将libsvm
包添加到Python
的默认lib中,也就是放到Python安装路径下的Lib
文件夹下的site-packages
文件夹中。然后再libsvm文件夹中添加_init_.py
(init前后都是双下划线)文件,在libsvm中的Python文件夹中也添加_init_.py
文件。Python包,也就是能够导入的文件夹包中,必须包含init.py,否则无法实现导入。
导入包检测不报错即可
>>> from libsvm322.python.svm import *
>>> from libsvm322.python.svmutil import *
也可以不添加到Python默认路径中,直接
import sys
sys.path.append("...libsvm322\python")
import svm
import svmutil
注意:
pycharm
中,会将运行环境复制一份到当前项目下,作为目录venv
。在pycharm中运行,必须要将包复制到当前项目下的venv\Lib\site-packages
目录下。
2 完整实验代码
#coding = utf-8
from libsvm322.python.svm import *
from libsvm322.python.svmutil import *
y,x = svm_read_problem('D:\javaTools\code\MachineLearning\libsvm-3.22\heart_scale')
m = svm_train(y[:200], x[:200], '-c 4')
print '----------------'
lable, acc, val = svm_predict(y[200:], x[200:], m)
运行结果:
*.*
optimization finished, #iter = 257
nu = 0.351161
obj = -225.628984, rho = 0.636110
nSV = 91, nBSV = 49
Total nSV = 91
----------------
Accuracy = 84.2857% (59/70) (classification)
Process finished with exit code 0
能够看到84%的准确度。
3 数据格式
libsvm的数据格式如下:
<label>
<index1>:<value1>
<index2>:<value2> ...
+1 1:0.708333 2:1 3:1
-1 1:0.583333 2:-1 3:0.333333
+1 1:0.166667 2:1 3:-0.333333
第一列
代表标签
,
第二列
是第一个特征值
,只包含一个整数索引和一个浮点值属性。
第三列
是第二个特征值
,只包含一个整数索引和一个浮点值属性。
…
所以,先要把数据按规定格式整理好。然后开始训练.。
4 其他数据实验
我们造几列数据进行实验。
1 1:175 2:60
1 1:185 2:70
-1 1:155 2:40
-1 1:165 2:50
-1 1:170 2:50
1表示男,-1表示女。我们将前4行训练,最后一行预测。
# -*- coding = utf-8 -*-
from libsvm322.python.svmutil import *
y,x = svm_read_problem('data')
m = svm_train(y[:4], x[:4], '-c 4')
print '----------------'
lable, acc, val = svm_predict(y[4:], x[4:], m)
print lable
结果:
*
optimization finished, #iter = 2
nu = 0.250000
obj = -2.000000, rho = 0.000000
nSV = 4, nBSV = 0
Total nSV = 4
----------------
Accuracy = 100% (1/1) (classification)
[-1.0]
Process finished with exit code 0
Python接口
在libsvm-3.20的python文件夹下主要包括了两个文件svm.py
和svmutil.py
。
svmutil.py
接口主要包括了high-level
的函数,这些函数的使用和LIBSVM的MATLAB接口大体类似
svmutil.py
中主要包含了以下几个函数:
svm_train()
: train an SVM modelsvm_predict()
: predict testing datasvm_read_problem()
: read the data from a LIBSVM-format file.svm_load_model()
: load a LIBSVM model.svm_save_model()
: save model to a file.evaluations()
: evaluate prediction results.
svm.py
接口主要包括了一些low-level的应用。在svm.py中采用了 python内置的ctypes库,由此python可以直接访问svm.h中定义的C结构和接口函数。svm.py主要运用了四个数据结构 svm_node, svm_problem, svm_parameter和svm_model。