如何在WEKA中设置libsvm的路径

如何在WEKA中设置libsvm的路径,第1张

 包解压C盘:C:\libsvm-3.182.

要用libsvm自带脚本grid.pyeasy.py,需要官网载绘图工具gnuplot,解压c盘.进入c:\libsvm\tools目录用文本编辑器(记事本edit都)修改grid.pyeasy.py两文件找其关于gnuplot路径项根据实际路径进行修改并保存

python与libsvm连接(参考SVM习笔记(2)LIBSVMpython使用)

1.打IDLE(pythonGUI)输入>>>importsys>>>sys.version

2.python32位现字符:

(default,Apr102012,23:31:26)[MSCv.150032bit(Intel)]’

候LIBSVMpython接口设置非简单libsvm-3.16文件夹windows文件夹找态链接库libsvm.dll其添加系统目录`C:\WINDOWS\system32\’即python使用libsvm

wk_ad_begin({pid : 21})wk_ad_after(21, function(){$('.ad-hidden').hide()}, function(){$('.ad-hidden').show()})

3.执行例

importos

os.chdir('C:\libsvm-3.18\python')#请根据实际路径修改

fromsvmutilimport*

y,x=svm_read_problem('../heart_scale')#读取自带数据

m=svm_train(y[:200],x[:200],'-c4')

p_label,p_acc,p_val=svm_predict(y[200:],x[200:],m)

##现结应该确安装optimizationfinished,#iter=257nu=0.351161

obj=-225.628984,rho=0.636110nSV=91,nBSV=49

TotalnSV=91

Accuracy=84.2857%(59/70)(classification)

F

1.下载好libsvm包

下载libsvm-3.21到随意一个地方,比如到matlab安装路径下的 toolbox下——D:\MATLAB\R2014A\toolbox\下,并解压。

打开matlab,将libsvm-3.21\matlab 添加到路径,比如将:\MATLAB\R2014A\toolbox\libsvm-3.21\matlab 添加到路径。

2.setup 第一次尝试

若提示没有C++编译器,则根据提示的网址去下载 winsdk_web.exe,然后 双击运行winsdk_web.exe,安装到最后若提示失败,则去卸载自带的visual studio 和 .netframework 4,然后再运行 winsdk_web.exe,提示缺少 .netframework 4,则自行下载安装,反复运行 winsdk_web.exe。

直到运行 winsdk_web.exe 时出现如下图所示情况,说明距成功更近一步了,

选择 Change,下一步,

勾选上 visual C++ compilers 和 microsoft visual C++ 2010,下一步,

最后提示成功安装。

2. setup

打开Matlab中,进入LIBSVM根目录下的matlab目录(如D:\MATLAB\R2014A\toolbox\libsvm-3.21),在命令窗口的输入mex -setup 输出为:

>>mex –setup

MEX 配置为使用 'Microsoft Windows SDK 7.1 (C)' 以进行 C 语言编译。

Warning: The MATLAB C and Fortran API has changed to support MATLAB

variables with more than 2^32-1 elements. In the near future

you will be required to update your code to utilize the

new API. You can find more information about this at:

http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html.

要选择不同的语言,请从以下选项中选择一种命令:

mex -setup C++

mex -setup FORTRAN

继续:

>>mex -setup C++

MEX 配置为使用 'Microsoft Windows SDK 7.1 (C++)' 以进行 C++ 语言编译。

Warning: The MATLAB C and Fortran API has changed to support MATLAB

variables with more than 2^32-1 elements. In the near future

you will be required to update your code to utilize the

new API. You can find more information about this at:

http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html.

3.编译

执行 make,输出如下:

>>make

使用 'Microsoft Windows SDK 7.1 (C)' 编译。

MEX 已成功完成。

使用 'Microsoft Windows SDK 7.1 (C)' 编译。

MEX 已成功完成。

使用 'Microsoft Windows SDK 7.1 (C++)' 编译。

找不到 D:\MATLAB\R2014A\toolbox\libsvm-3.21\matlab\svmtrain.exp

找不到 D:\MATLAB\R2014A\toolbox\libsvm-3.21\matlab\svmtrain.exp

MEX 已成功完成。

使用 'Microsoft Windows SDK 7.1 (C++)' 编译。

找不到 D:\MATLAB\R2014A\toolbox\libsvm-3.21\matlab\svmpredict.exp

找不到 D:\MATLAB\R2014A\toolbox\libsvm-3.21\matlab\svmpredict.exp

MEX 已成功完成。

>>

4.重命名

忽略错误(找不到……),继续,编译完成后,在当前目录下(libsvm-3.21/matlab下)会出现svmtrain.mexw64、svmpredict.mexw64 或者svmtrain.mexw32、svmpredict.mexw32 ,把文件名svmtrain和svmpredict 相应改成 libsvmtrain 和 libsvmpredict。

这是因为Matlab中自带有SVM的工具箱,其函数名字就是svmtrain和svmpredict,和 libsvm 默认的名字一样.

5.测试是否安装成功libsvm

libsvm 软件包中自带有测试数据,即软件包根目录下的 heart_scale 文件。

在matlab运行代码,输出如下:

>>[heart_scale_label, heart_scale_inst] = libsvmread('heart_scale')

>>model = libsvmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07')

*

optimization finished, #iter = 134

nu = 0.433785

obj = -101.855060, rho = 0.426412

nSV = 130, nBSV = 107

Total nSV = 130

>>[predict_label, accuracy, dec_values] = libsvmpredict(heart_scale_label, heart_scale_inst, model)

Accuracy = 86.6667% (234/270) (classification)

>>

OK ,perfect ! Congratulations to you!

如果遇到:

>>[heart_scale_label, heart_scale_inst] = libsvmread('heart_scale')

Invalid MEX-file 'C:\Users\jiao\Documents\MATLAB\libsvm-3.20\matlab\libsvmread.mexw64': 找不到指定的模块。

则把 D:\MATLAB\R2014A\toolbox\libsvm-3.21\matlab 文件夹添加到路径就可以了。

一:libsvm包下载与使用:

LIBSVM是台湾大学林智仁(Lin Chih-Jen)副教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进.

把包解压在C盘之中,如:C:\libsvm-3.18

2.

因为要用libsvm自带的脚本grid.py和easy.py,需要去官网下载绘图工具gnuplot,解压到c盘

3.

进入c:\libsvm\tools目录下,用文本编辑器(记事本,edit都可以)修改grid.py和easy.py两个文件,找到其中关于gnuplot路径的那项,根据实际路径进行修改,并保存

4python与libsvm的连接(参考SVM学习笔记(2)LIBSVM在python下的使用 )

a.打开IDLE(python GUI),输入

>>>import sys

>>>sys.version

如果你的python是32位,将出现如下字符:

‘2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)]’

这个时候LIBSVM的python接口设置将非常简单。在libsvm-3.16文件夹下的windows文件夹中找到动态链接库libsvm.dll,将其添加到系统目录,如`C:\WINDOWS\system32\’,即可在python中使用libsvm

b.如果你是64位的请参考文献,请参考上述连接。

5.执行一个小例子

import os

os.chdir('C:\libsvm-3.18\python')#请根据实际路径修改

from svmutil import *

y, x = svm_read_problem('../heart_scale')#读取自带数据

m = svm_train(y[:200], x[:200], '-c 4')

p_label, p_acc, p_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)

二几个简单的例子

从下载实验数据集。并且将数据集拷贝到C:\libsvm-3.18\windows下(因为之后我们需要利用该文件夹下的其他文件,这样比较方便,当然之后你用绝对地址也可以了)

建立一个py文件,写下如下代码:

例1:

import os

os.chdir('C:\libsvm-3.18\windows')#设定路径

from svmutil import *

y, x = svm_read_problem('train.1.txt')#读入训练数据

yt, xt = svm_read_problem('test.1.txt')#训练测试数据

m = svm_train(y, x )#训练

svm_predict(yt,xt,m)#测试

执行上述代码,精度为:Accuracy = 66.925% (2677/4000) (classification)

常用接口

svm_train() : train an SVM model#训练

svm_predict() : predict testing data#预测

svm_read_problem() : read the data from a LIBSVM-format file.#读取libsvm格式的数据

svm_load_model() : load a LIBSVM model.

svm_save_model() : save model to a file.

evaluations() : evaluate prediction results.

- Function: svm_train#三种训练写法

There are three ways to call svm_train()

>>>model = svm_train(y, x [, 'training_options'])

>>>model = svm_train(prob [, 'training_options'])

>>>model = svm_train(prob, param)

有关参数的设置(read me 文件夹中有详细说明):

Usage: svm-train [options] training_set_file [model_file]

options:

-s svm_type : set type of SVM (default 0)#选择哪一种svm

0 -- C-SVC (multi-class classification)

1 -- nu-SVC (multi-class classification)

2 -- one-class SVM

3 -- epsilon-SVR (regression)

4 -- nu-SVR (regression)

-t kernel_type : set type of kernel function (default 2)#是否用kernel trick

0 -- linear: u'*v

1 -- polynomial: (gamma*u'*v + coef0)^degree

2 -- radial basis function: exp(-gamma*|u-v|^2)

3 -- sigmoid: tanh(gamma*u'*v + coef0)

4 -- precomputed kernel (kernel values in training_set_file)

-d degree : set degree in kernel function (default 3)

-g gamma : set gamma in kernel function (default 1/num_features)

-r coef0 : set coef0 in kernel function (default 0)

-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)

-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)

-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)

-m cachesize : set cache memory size in MB (default 100)

-e epsilon : set tolerance of termination criterion (default 0.001)

-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)

-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)

-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)

-v n: n-fold cross validation mode

-q : quiet mode (no outputs)

三提高预测的准确率:

通过一定的过程,可以提高预测的准确率(在文献2中有详细介绍):

a.转换数据为libsvm可用形式.(可以通过下载的数据了解格式)

b.进行一个简单的尺度变换

c.利用RBF kernel,利用cross-validation来查找最佳的参数 C 和 r

d.利用最佳参数C 和 r ,来训练整个数据集

e.测试

再看例子1:

1.进入cmd模式下,输入如下代码,将现有数据进行适度变换,生成变换后的数据文件train.1.scale.txt

参数说明:

-l 变换后的下限

-u 变换后的上限

-s 参考上文

2执行以下代码

import os

os.chdir('C:\libsvm-3.18\windows')#设定路径

from svmutil import *

y, x = svm_read_problem('train.1.scale.txt')#读入训练数据

yt, xt = svm_read_problem('test.1.scale.txt')#训练测试数据

m = svm_train(y, x )#训练

svm_predict(yt,xt,m)#测试

精确度为Accuracy = 95.6% (3824/4000) (classification)。

可见我们只是做了简单的尺度变换后,预测的正确率大大提升了。

3通过选择最优参数,再次提高预测的准确率:(需要把tools文件下的grid.py拷贝到'C:\libsvm-3.18\windows'下)

import os

os.chdir('C:\libsvm-3.18\windows')#设定路径

from svmutil import *

from grid import *

rate, param = find_parameters('train.1.scale.txt', '-log2c -3,3,1 -log2g -3,3,1')

y, x = svm_read_problem('train.1.scale.txt')#读入训练数据

yt, xt = svm_read_problem('test.1.scale.txt')#训练测试数据

m = svm_train(y, x ,'-c 2 -g 4')#训练

p_label,p_acc,p_vals=svm_predict(yt,xt,m)#测试

执行上面的程序,find_parmaters函数,可以找到对应训练数据较好的参数。后面的log2c,log2g分别设置C和r的搜索范围。搜索机制是以2为底指数搜索,如 –log2c –3 , 3,1 就是参数C,从2^-3,2^-2,2^-1…搜索到2^3.

搜索到较好参数后,在训练的时候加上参数的设置。

另外,读者可以自己试试数据集2,3.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8119199.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存