资源简介
给出了最小二乘支持向量机在matlab中的仿真程序
代码片段和文件信息
function [bestCVaccuarcybestcbestgpso_option] = psoLSSVMcgForClass(trainsettrainset_labelYcpso_option)
% psoLSSVMcgForClass
%by Tangxiaobiao QQ 444646122 blog.sina.com.cn/lssvm
% 2010.05.31
%% 参数初始化
if nargin == 3
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));
end
% c1:初始为1.5pso参数局部搜索能力
% c2:初始为1.7pso参数全局搜索能力
% maxgen:初始为200最大进化数量
% sizepop:初始为20种群最大数量
% k:初始为0.6(k belongs to [0.11.0])速率和x的关系(V = kX)
% wV:初始为1(wV best belongs to [0.81.2])速率更新公式中速度前面的弹性系数
% wP:初始为1种群更新公式中速度前面的弹性系数
% v:初始为3SVM Cross Validation参数
% popcmax:初始为100SVM 参数c的变化的最大值.
% popcmin:初始为0.1SVM 参数c的变化的最小值.
% popgmax:初始为1000SVM 参数g的变化的最大值.
% popgmin:初始为0.01SVM 参数c的变化的最小值.
Yc=Yc;
Vcmax = pso_option.k*pso_option.popcmax;
Vcmin = -Vcmax ;
Vgmax = pso_option.k*pso_option.popgmax;
Vgmin = -Vgmax ;
eps = 10^(-3);
[Yccodebookold_codebook] = code(trainset_label‘code_MOC‘);
%% 产生初始粒子和速度
for i=1:pso_option.sizepop
% 随机产生种群和速度
pop(i1) = (pso_option.popcmax-pso_option.popcmin)*rand+pso_option.popcmin;
pop(i2) = (pso_option.popgmax-pso_option.popgmin)*rand+pso_option.popgmin;
V(i1)=Vcmax*rands(1);
V(i2)=Vgmax*rands(1);
% 计算初始适应度
gam=pop(i1);sig2=pop(i2);
model=initlssvm(trainsetYc‘c‘gamsig2‘RBF_kernel‘);
model=trainlssvm(model);
Yd0=simlssvm(modeltrainset);
predict_label = code(Yd0old_codebook[]codebook);%解码分类结果
testnum=size(trainset_label1);
right=sum(trainset_label==predict_label);
n = sum(sum(trainset_label~=predict_label));
fitness(i) = (1-n/prod(size(trainset_label)))*100;
fitness(i) = -fitness(i);
end
% 找极值和极值点
[global_fitness bestindex]=min(fitness); % 全局极值
local_fitness=fitness; % 个体极值初始化
global_x=pop(bestindex:); % 全局极值点
local_x=pop; % 个体极值点初始化
% 每一代种群的平均适应度
avgfitness_gen = zeros(1pso_option.maxgen);
%% 迭代寻优
for i=1:pso_option.maxgen
for j=1:pso_option.sizepop
%速度更新
V(j:) = pso_option.wV*V(j:) + pso_option.c1*rand*(local_x(j:) - pop(j:)) + pso_option.c2*rand*(global_x - pop(j:));
if V(j1) > Vcmax
V(j1) = Vcmax;
end
if V(j1) < Vcmin
V(j1) = Vcmin;
end
if V(j2) > Vgmax
V(j2) = Vgmax;
end
if V(j2) < Vgmin
V(j2) = Vgmin;
end
%种群更新
pop(j:)=pop(j:) + pso_option.wP*V(j:);
if pop(j1) > pso_option.popcmax
pop(j1) = pso_option.popcmax;
end
if pop(j1) < pso_option.popcmin
- 上一篇:串级PID仿真
- 下一篇:基于神经网络的自整定PID程序MATLAB
相关资源
- 支持向量机 support vector machine
- 最小二乘支持向量机MATLAB程序,可分
- 基于MATLAB的图像SVM分类
- 支持向量机非线性回归通用matlab程序
- S4VM算法(Matlab)
- 支持向量机的matlab代码
- matlab支持向量机SVM完整工具包
- 支持向量机用于肌电信号模式识别的
- SVM算法的MATLAB源程序
- 支持向量机SVM和核函数的matlab程序集
- matlab支持向量机源代码
- GA算法优化支持向量机
- LS-SVM中文库文件指导手册最小支持向
- matlab支持向量机用Quadprog简单易懂
- 基于线性支持向量机的水天线检测
- 支持向量机matlab代码
- 四种支持向量机用于函数拟合与模式
- SVM预测风速程序
- 基于SVM(支持向量机) 的人脸识别
- 用粒子群算法优化支持向量机的matl
- PSO-SVM 粒子算法优化支持向量机MATLA
- 支持向量机三分类算法
- 粒子群优化的支持向量机matlab源代码
- 支持向量机手写体识别matlab
- 支持向量机 MATLAB程序
- scaleForLSSVM函数 matlab
- 支持向量机SVMmatlab代码
- 支持向量机libsvm3.22工具箱编译完成
- matlab编程实现支持向量机的多分类
- 用MATLAB编写的svm源程序,可以实现支
评论
共有 条评论