libsvm-mat上手

本文介绍如何解决Matlab找不到C++编译器的问题,完成LibSVM库的配置,并演示如何利用LibSVM进行模型训练及预测。

1.初上手遇到的问题:matlab没找到你的C++编译器

在用mex -setup命令然后选Y,但matlab返回的结果中没有你的C++编译器时,

Compiler: Lcc-win32 C 2.4.1
Location: D:\PROGRA~1\MATLAB\R2010b\sys\lcc

这是matlab自带的C编译器,但是libsvm原始版本是C++实现的,因此需要C++的编译器来编译,所以不能用matlab自带的C编译器。

这时你应该mex -setup后选n,然后会出现如下画面

这时,就能在列表中看到我所安装的Microsoft Visual C++ 6.0,回复 6,然后按照提示修改路径即可。

Compiler: 6
 
The default location for Microsoft Visual C++ compilers is C:\Program Files\Microsoft Visual Studio,
but that directory does not exist on this machine. 
 
Use C:\Program Files\Microsoft Visual Studio anyway [y]/n? n
Please enter the location of your compiler: [C:\Program Files\Microsoft Visual Studio] D:\Program Files\Microsoft Visual Studio
 
Please verify your choices:

Compiler: Microsoft Visual C++ 6.0
Location: D:\Program Files\Microsoft Visual Studio
 
Are these correct [y]/n? y
 
Trying to update options file: C:\Users\Administrator\AppData\Roaming\MathWorks\MATLAB\R2010b\mexopts.bat
From template:              D:\PROGRA~1\MATLAB\R2010b\bin\win32\mexopts\msvc60opts.bat
 
Done . . .

 

C++编译器配置成功。

 

2.建立model结构体,体验训练与预测

输入make,

左侧一栏能看见系统生成了svmtrain.mexw32svmpredict.mexw32libsvmread.mexw32libsvmwrite.mexw32等文件。

输入load heart_scale

右上角 Workspace中出现了heart_scale_inst heart_scale_label

输入model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 2');

生成了model结构体,并进行训练

其中heart_scale_label是训练样本类别列向量,heart_scale_inst是训练样本特征属性矩阵。

 

model模型经训练后,使用它进行预测

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

预测结果在predict_label, accuracy, dec_values三个变量中。

类别预测时,预测的类别在predict_label中;

回归预测时,预测的回归结果在dec_values中。

accuracy,是一个3维的向量,从上到下分别是:分类准率(分类问题中用到的参数指标);平均平方误差MSE (回归问题中用到的参数指标);平方相关系数r2 (回归问题中用到的参数指标)。

dec_values,是个矩阵,包含着决策值或者是概率估计(当’-b 1’被指定时)。

当训练数据有n个、k类时,决策值矩阵是一个n行k*(k-1)/2列的矩阵,每一行的输出是k*(k-1)/2个二分类器的结果。

当’-b 1’被指定时,概率估计矩阵是一个n行k类的矩阵,每一行的输出是该测试数据属于每个类的概率。

Matlablibsvmmatfaruto版本Ver2-libsvm-mat-2.89-3-farutoVer2.rar libsvm-mat-2.89-3-farutoVer2 libsvm-mat-2.89-3-farutoVer2.rar 此次更新加进了,用PSO寻找SVM参数c和g的函数. 1.jpg 而且这次关于psoSVMcgForClass.m的编写,里面参数的设置采用的是用结构体的方式比较方便,这种方式我第一次采用,感觉很好..很好.. 采用这种结构体的方式可以避免过多的参数才函数接口中显示,很方便个人感觉,以前我自己没有这么编过. ANN的matlab自带的程序里面的参数设置都是采用这种手法.基本.... 程序 的一小段: function [bestCVaccuarcy,bestc,bestg,pso_option] = psoSVMcgForClass % psoSVMcgForClass % by faruto % 2009.09.22 %% 参数初始化 if nargin < 3     pso_option = struct('c1',1.5,'c2',1.7,'maxgen',200,'sizepop',20, ...                     'k',0.6,'wV',1,'wP',1,'v',3, ...                      'popcmax',10^2,'popcmin',10^,'popgmax',10^3,'popgmin',10^); end % c1:初始为1.5,pso参数局部搜索能力 % c2:初始为1.7,pso参数全局搜索能力 % maxgen:初始为200,最大进化数量 % sizepop:初始为20,种群最大数量 % k:初始为0.6,速率和x的关系 % wV:初始为1,速率更新公式中速度前面的弹性系数 % wP:初始为1,种群更新公式中速度前面的弹性系数 % v:初始为3,SVM Cross Validation参数 % popcmax:初始为100,SVM 参数c的变化的最大值. % popcmin:初始为0.1,SVM 参数c的变化的最小值. % popgmax:初始为1000,SVM 参数g的变化的最大值. % popgmin:初始为0.01,SVM 参数c的变化的最小值.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值