Python 中使⽤libsvm
1.下载libsvm 包
点击下载,⽂件结构如下图所⽰:
2.添加动态链接⽂件(.dll ⽂件)
  在下载的libsvm⽂件夹中,有⼀个⽂件夹叫做windows,⾥⾯有⼀个动态链接⽂件libsvm.dll,这个⽂件默认是32位系统格式的,如果你的Python是32位的话,则可以直接⽤这个dll⽂件,将在拷贝到C:\Windows\System32下即可。
  如果你的系统是64位的,则需要重新编译64位的dll⽂件。假设你已经安装了VS,以安装了VS2015为例,你可以在win10的全部应⽤中的VS⽬录下到 VS2015 x64 本机⼯具命令提⽰符,这个⼩⿊框,然后⽤cd命令进⼊到你下载的libsvm的⽂件中,输⼊以下指令:
便会⾃动调⽤指令⽣成64位的dll,⽣成后,拷贝到C:\Windows\System32⽬录下。因为Python版本的svm需要调⽤很多c语⾔实现的接⼝,所以必须添加这个动态链接⽂件,否则运⾏会出错。
3.导⼊模块
  如果libsvm需要经常使⽤,可以将libsvm包添加到Python的默认lib中,也就是放到Python安装路径下的Lib⽂件夹下的site-
packages⽂件夹中。然后再libsvm⽂件夹中添加_init_.py(init前后都是双下划线)⽂件,在libsvm中的Python⽂件夹中也添加_init_.py⽂件。Python包,也就是能够导⼊的⽂件夹包中,必须包含_init_.py,
否则⽆法实现导⼊。
这样在导⼊:也可以不添加到Python默认路径中,直接
nmake -f  Makefile.win clean all
from  libsvm.python.svm import  *
from  libsvm.python.svmutil import  *
import sys
sys.path.append("libsvm/python")
import svm
import svmutil
这样也是可以的,但建议前⾯那种
  在运⾏时发现还是出错,说svmutil中不到模块svm。这是因为在svmutil.py模块中有两个导⼊语句:
from svm import *
from svm import __all__ as svm_all
这两个导⼊语句中,默认svm已经是在系统路径中,但是实际上不是,如果我们
已经将libsvm添加到Python默认路径中,则直接将上⾯的改为:
from libsvm.python.svm import *
from libsvm.python.svm import __all__ as svm_all
这样就可以正确到svm.py模块了。
4.训练数据
假设训练数据集⽂件路径为:G:\
预测数据集⽂件路径为:G:\
则使⽤svm⽅法为:
/
/第⼀步,加载⽂件数据到序列或元组,让svm接⼝能够使⽤
//其中label是类别,value是特征值
train_label, train_value = svm_read_problem("G:\\")        #训练数据集
predict_label, predict_value = svm_read_problem("G:\\")  #预测数
据集
//训练模型
model = svm_train(train_label,train_value)
//⽤模型预测数据类别
//结构返回为,预测类别集合,准确率,
p_label, p_acc, p_val = svm_predict(predict_label, predict_value, model)
python默认安装路径
print(p_acc)                                                          #打印预测结果
某完整代码如下:
from libsvm.python.svm import *
from libsvm.python.svmutil import *
train_label,train_pixel = svm_read_problem('G:\\data\\good-image-data')
predict_label,predict_pixel = svm_read_problem('G:\\data\\predict-image-data')
model = svm_train(train_label, train_pixel)
print("result:")
p_label, p_acc, p_val = svm_predict(predict_label, predict_pixel, model);
print(p_acc)
更详细的使⽤libsvm接⼝的办法请查看libsvm中的readme⽂件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。