PSO優化SVM引數的問題,PSO優化SVM引數的問題

時間 2021-09-05 17:07:24

1樓:在晴天的雨傘

elapsed time is 64.799304 seconds.

bestc =

45.3915

bestg =

0.0100

bestcvaccuarcy =

97.7528

accuracy = 97.7528% (87/89) (classification)

trainacc =

97.7528

0.0225

0.9633

accuracy = 93.2584% (83/89) (classification)

testacc =

93.2584

0.0674

0.9007

**:%% 清空環境

clcclear

load wine;

train = [wine(1:30,:);wine(60:95,:);wine(131:153,:)];

train_label = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];

test = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];

test_label = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];

[train,pstrain] = mapminmax(train');

pstrain.ymin = 0;

pstrain.ymax = 1;

[train,pstrain] = mapminmax(train,pstrain);

[test,pstest] = mapminmax(test');

pstest.ymin = 0;

pstest.ymax = 1;

[test,pstest] = mapminmax(test,pstest);

train = train';

test = test';

%% 引數初始化

%粒子群演算法中的兩個引數

c1 = 1.6; % c1 belongs to [0,2]

c2 = 1.5; % c2 belongs to [0,2]

maxgen=300; % 進化次數

sizepop=30; % 種群規模

popcmax=10^(2);

popcmin=10^(-1);

popgmax=10^(3);

popgmin=10^(-2);

k = 0.6; % k belongs to [0.1,1.0];

vcmax = k*popcmax;

vcmin = -vcmax ;

vgmax = k*popgmax;

vgmin = -vgmax ;

% svm引數初始化

v = 3;

%% 產生初始粒子和速度

for i=1:sizepop

% 隨機產生種群

pop(i,1) = (popcmax-popcmin)*rand+popcmin; % 初始種群

pop(i,2) = (popgmax-popgmin)*rand+popgmin;

v(i,1)=vcmax*rands(1); % 初始化速度

v(i,2)=vgmax*rands(1);

% 計算初始適應度

cmd = ['-v ',num2str(v),' -c ',num2str( pop(i,1) ),' -g ',num2str( pop(i,2) )];

fitness(i) = svmtrain(train_label, train, cmd);

fitness(i) = -fitness(i);

end% 找極值和極值點

[global_fitness bestindex]=min(fitness); % 全域性極值

local_fitness=fitness; % 個體極值初始化

global_x=pop(bestindex,:); % 全域性極值點

local_x=pop; % 個體極值點初始化

tic%% 迭代尋優

for i=1:maxgen

for j=1:sizepop

%速度更新

wv = 0.9; % wv best belongs to [0.8,1.2]

v(j,:) = wv*v(j,:) + c1*rand*(local_x(j,:

) - pop(j,:)) + c2*rand*(global_x - pop(j,:));

if v(j,1) > vcmax

v(j,1) = vcmax;

endif v(j,1) < vcmin

v(j,1) = vcmin;

endif v(j,2) > vgmax

v(j,2) = vgmax;

endif v(j,2) < vgmin

v(j,2) = vgmin;

end%種群更新

wp = 0.6;

pop(j,:)=pop(j,:)+wp*v(j,:);

if pop(j,1) > popcmax

pop(j,1) = popcmax;

endif pop(j,1) < popcmin

pop(j,1) = popcmin;

endif pop(j,2) > popgmax

pop(j,2) = popgmax;

endif pop(j,2) < popgmin

pop(j,2) = popgmin;

end% 自適應粒子變異

if rand>0.5

k=ceil(2*rand);

if k == 1

pop(j,k) = (20-1)*rand+1;

endif k == 2

pop(j,k) = (popgmax-popgmin)*rand+popgmin;

endend%適應度值

cmd = ['-v ',num2str(v),' -c ',num2str( pop(j,1) ),' -g ',num2str( pop(j,2) )];

fitness(j) = svmtrain(train_label, train, cmd);

fitness(j) = -fitness(j);

end%個體最優更新

if fitness(j) < local_fitness(j)

local_x(j,:) = pop(j,:);

local_fitness(j) = fitness(j);

end%群體最優更新

if fitness(j) < global_fitness

global_x = pop(j,:);

global_fitness = fitness(j);

endfit_gen(i)=global_fitness;

endtoc

%% 結果分析

plot(-fit_gen,'linewidth',5);

title(['適應度曲線','(引數c1=',num2str(c1),',c2=',num2str(c2),',終止代數=',num2str(maxgen),')'],'fontsize',13);

xlabel('進化代數');ylabel('適應度');

bestc = global_x(1)

bestg = global_x(2)

bestcvaccuarcy = -fit_gen(maxgen)

cmd = ['-c ',num2str( bestc ),' -g ',num2str( bestg )];

model = svmtrain(train_label,train,cmd);

[trainpre,trainacc] = svmpredict(train_label,train,model);

trainacc

[testpre,testacc] = svmpredict(test_label,test,model);

testacc

2樓:匿名使用者

你搞懂了嗎,這個適應度值40或50左右,確實不知道是表示的是什麼

有哪些方法可以優化支援向量機svm的引數?

3樓:匿名使用者

遺傳演算法 ,差分進化,粒子群,蟻群,模擬退火,人工魚群,蜂群,果蠅優化等都可以優化svm引數

4樓:珊瑚海

其實,真正在實際用的時候,還是徑向基核函式用的比較多,所以裡面的問題就歸結於核函式引數delta的優化,具體的方法很多,就如樓上哥們所說的,之前我也做過有關核函式引數優化的一點研究。。。。

求助ga優化svm引數的matlab **

如何用遺傳演算法優化svm的引數

5樓:玉皇廟加工麵條

將下屬兩個目標函式分別儲存在兩個m檔案中 function f1=func1(x) %第一目標函式 f1=x(:,1).*x(:

,1)./4+x(:,2).

*x(:,2)./4; function f2=func2(x) %第二目標函式 f2=x(:

,1).*(1-x(:,2))+10; function ga() clear;clc;close all nind=100; %個體數...

SVM演算法採用高斯核函式,核函式的引數對結果影響大嗎

我來說說我的思路吧這種擬合問題的目的是求出擬合函式的引數,如多項式函式的係數那麼可以把擬合函式值與y的絕對差值當做目標函式和適應度函式,相對應所求的擬合函式的引數作為遺傳演算法中的基因編碼,每組引數對應一個擬合函式相當於一個染色體個體遺傳演算法採用基本遺傳演算法即可單點交叉,高斯變異初步設想,望請指...

風機引數的問題

綠島風黎文龍 一。風量和風壓的關係 同一颱風機在固定的轉速下可以輸出無數個風量和風壓引數 引數有最大值,視風機而定 而這些引數以風壓為縱座標,以風量為橫座標的話,他們的延伸交匯點是一條曲線,多數情況下曲線表現出來的情況是風量越大,風壓越小。二。風機型號 上面兩個是廠家的型號,由每個廠家按照風機種類及...

PS的摳圖問題,PS摳圖的問題

磁性套索還有魔術棒只能粗略摳圖,有時候選擇的也相當不方便,選擇的範圍也不具體 推薦你用抽出濾鏡 大致步驟 1,先用抽出濾鏡把你要的摳出來,第一步就要細緻,這樣以後麻煩會很少,放大,筆尖縮小 2,用橡皮工具擦邊,一樣放大 縮小橡皮 3,仿製圖章工具做一下你有的不可避免的影象缺失 4,模糊工具把你扣除的...