libsvm-3.1-[FarutoUltimate3.1Mcode]——辅助函数简介(修改)
2017-06-02 15:17
441 查看
此工具箱是matlab中文论坛版主faruto在林智仁教授版本上改进的libsvm工具箱。
工具箱下载地址:http://www.matlabsky.com/thread-17936-1-1.html
本文主要介绍其中增加的参数(c和RBF核函数中的g)寻优函数和其他一些有用的函数。
1、Grid Search
SVMcgForClass.m (分类问题寻优)、SVMcgForRegress.m(回归问题参数寻优)。
http://www.matlabsky.com/thread-12411-1-1.html
[bestCVaccuracy,bestc,bestg]= SVMcgForClass(train_label,train,cmin,cmax,gmin,gmax,v,
cstep,gstep,accstep)
[bestCVmse,bestc,bestg]= SVMcgForRegress(train_label,train,cmin,cmax,gmin,gmax,v,
cstep,gstep,msestep)
2、启发式遗传算法GA
gaSVMcgForClass.m(分类问题参数寻优)、gaSVMcgForRegress.m(回归问题参数寻优)
http://www.matlabsky.com/thread-12412-1-1.html
默认范围:c(0.1-100)、g(0.01-1000)、5折交叉验证。
[bestCVaccuracy,bestc,bestg,ga_option]= gaSVMcgForClass(train_label,train,ga_option)
常用格式:[bestCVaccuracy,bestc,bestg]= gaSVMcgForClass(train_label,train)
若想修改某些默认项比如c、g的范围,可以在原文件中直接修改。
或者ga_option.cbound=[];
……
ga_option:GA中的一些参数设置,可不输入(即去掉等号两边或左边的ga_option),有默认值,详细请看代码的帮助说明。
使用方法:
ga_option =struct('maxgen',200,'sizepop',20,'ggap',0.9,...
'cbound',[0,100],'gbound',[0,1000],'v',5);
1. % maxgen:最大的进化代数,默认为200,一般取值范围为[100,500]
2. % sizepop:种群最大数量,默认为20,一般取值范围为[20,100]
3. % cbound = [cmin,cmax],参数c的变化范围,默认为(0,100]
4. % gbound = [gmin,gmax],参数g的变化范围,默认为[0,1000]
5. % v:SVM Cross Validation参数,默认为5
[bestCVmse,bestc,bestg,ga_option]= gaSVMcgForRegress(train_label,train,
ga_option)
3、粒子群算法PSO
psoSVMcgForClass.m(分类问题参数寻优)、psoSVMcgForRegress.m(回归问题参数寻优)
http://www.matlabsky.com/thread-12414-1-1.html
3.1 note
默认范围:c(0.1-100)、g(0.01-1000)、3折交叉验证。
适应度函数:分类问题适应度函数用的是cv下的分类准确率;回归问题适应度函数用的是cv下的mse。即fitness(j) = svmtrain(train_label, train, cmd);
3.2 格式:
[bestCVaccuracy,bestc,bestg,pso_option]= psoSVMcgForClass(train_label,train,pso_option)
常用格式为:[bestCVaccuracy,bestc,bestg]= psoSVMcgForClass(train_label,train)
若想修改某些默认项比如c、g的范围,可以在原文件中直接修改。
或者在使用该函数之前:pso_option.popcmax=10000;
……
pso_option =struct('c1',1.5,'c2',1.7,'maxgen',200,'sizepop',20, ...
'k',0.6,'wV',1,'wP',1,'v',5,...
'popcmax',10^2,'popcmin',10^(-1),'popgmax',10^3,'popgmin',10^(-2));
1. % c1:初始为1.5,pso参数局部搜索能力
2. % c2:初始为1.7,pso参数全局搜索能力
3. % maxgen:初始为200,最大进化数量
4. % sizepop:初始为20,种群最大数量
5. % k:初始为0.6(k belongs to [0.1,1.0]),速率和x的关系(V
= kX)
6. % wV:初始为1(wV best belongs to [0.8,1.2]),速率更新公式中速度前面的弹性系数
7. % wP:初始为1,种群更新公式中速度前面的弹性系数
8. % v:初始为3,SVM Cross Validation参数
9. % popcmax:初始为100,SVM参数c的变化的最大值.
10.% popcmin:初始为0.1,SVM参数c的变化的最小值.
11.% popgmax:初始为1000,SVM参数g的变化的最大值.
12. % popgmin:初始为0.01,SVM参数c的变化的最小值.
[bestCVmse,bestc,bestg,pso_option]= psoSVMcgForRegress(train_label,train,pso_option)
4、
ClassResult.m函数,方便给出各种分类准确率,以及给出判别函数的权值w、偏置b、支持向量在原始训练集中的位置索引以及alpha系数。
格式:
CR = ClassResult(label, data, model,type)
% type 1:输入的data为训练集
% 2:输入的data为测试集
%当输入的data为训练集时,需要事先在外部将标签转换为1,-1
出现的问题及解决措施:20170626更新
问题:
>> model = svmtrain(output_train,inputtrain','-s 0 -t 2 -c
bestc -g bestg');
Error: C <= 0
解决方法:
1、分开运行,将SVMcgForClass得到的值直接写在svmtrain中。
[bestCVaccuracy,bestc,bestg]=SVMcgForClass(output_train,inputtrain',10,15,-8,8,5);
model = svmtrain(output_train,inputtrain','-s 0 -t 2 -c 16384 -g 0.5743');
注意:改变c和g的范围,可以影响最终分类准确率。
此法比较“笨”。
2、
%grid search 参数优化
[bestCVaccuracy,bestc,bestg] = SVMcgForClass(output_train,inputtrain',0,7,-8,8,5);
cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),'-s 0 -t 2'];
model = svmtrain(output_train,input
b185
train',cmd)
即在中间加一步格式的转换。
工具箱下载地址:http://www.matlabsky.com/thread-17936-1-1.html
本文主要介绍其中增加的参数(c和RBF核函数中的g)寻优函数和其他一些有用的函数。
1、Grid Search
SVMcgForClass.m (分类问题寻优)、SVMcgForRegress.m(回归问题参数寻优)。
http://www.matlabsky.com/thread-12411-1-1.html
[bestCVaccuracy,bestc,bestg]= SVMcgForClass(train_label,train,cmin,cmax,gmin,gmax,v,
cstep,gstep,accstep)
[bestCVmse,bestc,bestg]= SVMcgForRegress(train_label,train,cmin,cmax,gmin,gmax,v,
cstep,gstep,msestep)
2、启发式遗传算法GA
gaSVMcgForClass.m(分类问题参数寻优)、gaSVMcgForRegress.m(回归问题参数寻优)
http://www.matlabsky.com/thread-12412-1-1.html
默认范围:c(0.1-100)、g(0.01-1000)、5折交叉验证。
[bestCVaccuracy,bestc,bestg,ga_option]= gaSVMcgForClass(train_label,train,ga_option)
常用格式:[bestCVaccuracy,bestc,bestg]= gaSVMcgForClass(train_label,train)
若想修改某些默认项比如c、g的范围,可以在原文件中直接修改。
或者ga_option.cbound=[];
……
ga_option:GA中的一些参数设置,可不输入(即去掉等号两边或左边的ga_option),有默认值,详细请看代码的帮助说明。
使用方法:
ga_option =struct('maxgen',200,'sizepop',20,'ggap',0.9,...
'cbound',[0,100],'gbound',[0,1000],'v',5);
1. % maxgen:最大的进化代数,默认为200,一般取值范围为[100,500]
2. % sizepop:种群最大数量,默认为20,一般取值范围为[20,100]
3. % cbound = [cmin,cmax],参数c的变化范围,默认为(0,100]
4. % gbound = [gmin,gmax],参数g的变化范围,默认为[0,1000]
5. % v:SVM Cross Validation参数,默认为5
[bestCVmse,bestc,bestg,ga_option]= gaSVMcgForRegress(train_label,train,
ga_option)
3、粒子群算法PSO
psoSVMcgForClass.m(分类问题参数寻优)、psoSVMcgForRegress.m(回归问题参数寻优)
http://www.matlabsky.com/thread-12414-1-1.html
3.1 note
默认范围:c(0.1-100)、g(0.01-1000)、3折交叉验证。
适应度函数:分类问题适应度函数用的是cv下的分类准确率;回归问题适应度函数用的是cv下的mse。即fitness(j) = svmtrain(train_label, train, cmd);
3.2 格式:
[bestCVaccuracy,bestc,bestg,pso_option]= psoSVMcgForClass(train_label,train,pso_option)
常用格式为:[bestCVaccuracy,bestc,bestg]= psoSVMcgForClass(train_label,train)
若想修改某些默认项比如c、g的范围,可以在原文件中直接修改。
或者在使用该函数之前:pso_option.popcmax=10000;
……
pso_option =struct('c1',1.5,'c2',1.7,'maxgen',200,'sizepop',20, ...
'k',0.6,'wV',1,'wP',1,'v',5,...
'popcmax',10^2,'popcmin',10^(-1),'popgmax',10^3,'popgmin',10^(-2));
1. % c1:初始为1.5,pso参数局部搜索能力
2. % c2:初始为1.7,pso参数全局搜索能力
3. % maxgen:初始为200,最大进化数量
4. % sizepop:初始为20,种群最大数量
5. % k:初始为0.6(k belongs to [0.1,1.0]),速率和x的关系(V
= kX)
6. % wV:初始为1(wV best belongs to [0.8,1.2]),速率更新公式中速度前面的弹性系数
7. % wP:初始为1,种群更新公式中速度前面的弹性系数
8. % v:初始为3,SVM Cross Validation参数
9. % popcmax:初始为100,SVM参数c的变化的最大值.
10.% popcmin:初始为0.1,SVM参数c的变化的最小值.
11.% popgmax:初始为1000,SVM参数g的变化的最大值.
12. % popgmin:初始为0.01,SVM参数c的变化的最小值.
[bestCVmse,bestc,bestg,pso_option]= psoSVMcgForRegress(train_label,train,pso_option)
4、
ClassResult.m函数,方便给出各种分类准确率,以及给出判别函数的权值w、偏置b、支持向量在原始训练集中的位置索引以及alpha系数。
格式:
CR = ClassResult(label, data, model,type)
% type 1:输入的data为训练集
% 2:输入的data为测试集
%当输入的data为训练集时,需要事先在外部将标签转换为1,-1
出现的问题及解决措施:20170626更新
问题:
>> model = svmtrain(output_train,inputtrain','-s 0 -t 2 -c
bestc -g bestg');
Error: C <= 0
解决方法:
1、分开运行,将SVMcgForClass得到的值直接写在svmtrain中。
[bestCVaccuracy,bestc,bestg]=SVMcgForClass(output_train,inputtrain',10,15,-8,8,5);
model = svmtrain(output_train,inputtrain','-s 0 -t 2 -c 16384 -g 0.5743');
注意:改变c和g的范围,可以影响最终分类准确率。
此法比较“笨”。
2、
%grid search 参数优化
[bestCVaccuracy,bestc,bestg] = SVMcgForClass(output_train,inputtrain',0,7,-8,8,5);
cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),'-s 0 -t 2'];
model = svmtrain(output_train,input
b185
train',cmd)
即在中间加一步格式的转换。
相关文章推荐
- libSVM简介及核函数模型选择
- libSVM简介及核函数模型选择
- Symfony的表单辅助函数简介
- libsvm简介和函数调用参数说明
- libSVM简介及核函数模型选择
- MFC程序中消息以及函数的处理顺序简介!
- asp.net常用的一个很好用的控制文件下载的函数 支持续传多线(控制多线请自行修改)
- [辅助工具] 一个方便将ASP代码升级到ASP.NET的小工具 -- ASP Code Migrator!
- CodeConvert 简介
- Eclipse3.1 + jboss3.2.6 +lomboz3.1+Tomcat5.0.24 的配置,[修改后转帖,原文很乱]
- MFC程序中消息以及函数的处理顺序简介!
- 一些socket 辅助函数的介绍和举例说明
- Oracle 中DECODE 函数的 使用简介
- Winsock 函数简介
- STL vector 辅助函数
- 函数简介(C)
- 拦截API(修改函数地址方法)
- [转帖]winsock函数简介
- CodeProject - 在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)
- windows API函数简介