⑴ libsvm工具箱和lssvm工具箱有什麼區別
1、這兩個意義完全不一樣,lssvm是最小二乘支持向量機,是一種演算法 libsvm是一個支持版向量機的工具集合,權一個庫;
2、LIBSVM是台灣大學林智仁(Lin Chih-Jen)副教授等開發設計的一個簡單、易於使用和快速有效的SVM模式識別與回歸的軟體包,不但提供了編譯好的可在Windows系列系統的執行文件,還提供了源代碼,方便改進、修改以及在其它操作系統上應用;
3、而LSSVM是支持向量機演算法的一種改進版本——即最小二乘支持向量機(Least Squares Support Vector Machine)。
⑵ Tent-PSO-SVM分類方法
通過改進Tent映射的復PSO演算法用於高光譜影制像SVM分類時,最佳特徵波段選取的關鍵問題包括:粒子的初始化、粒子速度、位置更新以及與後面參數設置相匹配的Tent映射表達式。
(1)粒子群的初始化處理
假設粒子群由M個粒子(xi,1,…,xi,N)組成,如式(8.6)所示,每個粒子是N個0和1組成的二維序列,N對應高光譜影像波段總數,0表示對應位置的波段沒有被選擇,1表示對應的波段被選擇。那麼粒子群就被初始化為二進制矩陣。
高光譜遙感影像信息提取技術
相應的粒子速度初始化為0~1之間的隨機實數矩陣,如式(8.7)所示。
高光譜遙感影像信息提取技術
(2)粒子適應度的計算
粒子適應度起到評價粒子好壞的作用,它控制著粒子更新的方向,粒子適應度值的計算函數如式(8.8)所示。式(8.8)為Tent-PSO-SVM分類時通過CV(交叉驗證)方式得到分類精度的函數,具體實現時調用工具箱LIBSVM的matlab版本(Chang和Lin)。
高光譜遙感影像信息提取技術
式中:(xi,1,…,xi,N)表示一個粒子,在本章中相當於PSO演算法尋優的一個特徵波段組合。
⑶ 請問SVM工具箱里的trainlssvm函數的輸入參數model,和輸出參數X,Y分別代表什麼意思呢
你編程也要先把他定義出來,最後才能訓練出來啊
⑷ 為什麼PSO優化SVM沒有交叉驗證法效果好
題目就錯了吧?還是說你要的效果是負面效果?
⑸ 可以使用的支持向量機(SVM)MATLAB程序,最好是和粒子群演算法(PSO)或者遺傳演算法(GA)耦聯的程序,謝謝
拉格朗日
function y=lagrange(x0,y0,x)
n=length(x0);m=length(x);
for i=1:m
z=x(i);
s=0.0;
for k=1:n
p=1.0;
for j=1:n
if j~=k
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=p*y0(k)+s;
end
y(i)=s;
end
SOR迭代法的Matlab程序
function [x]=SOR_iterative(A,b)
% 用SOR迭代求解線性方程組,矩陣A是方陣
x0=zeros(1,length(b)); % 賦初值
tol=10^(-2); % 給定誤差界
N=1000; % 給定最大迭代次數
[n,n]=size(A); % 確定矩陣A的階
w=1; % 給定鬆弛因子
k=1;
% 迭代過程
while k=N
x(1)=(b(1)-A(1,2:n)*x0(2:n)')/A(1,1);
for i=2:n
x(i)=(1-w)*x0(i)+w*(b(i)-A(i,1:i-1)*x(1:i-1)'-A(i,i+1:n)*x0(i+1:n)')/A(i,i);
end
if max(abs(x-x0))=tol
fid = fopen('SOR_iter_result.txt', 'wt');
fprintf(fid,'\n********用SOR迭代求解線性方程組的輸出結果********\n\n');
fprintf(fid,'迭代次數: %d次\n\n',k);
fprintf(fid,'x的值\n\n');
fprintf(fid, '%12.8f \n', x);
break;
end
k=k+1;
x0=x;
end
if k==N+1
fid = fopen('SOR_iter_result.txt', 'wt');
fprintf(fid,'\n********用SOR迭代求解線性方程組的輸出結果********\n\n');
fprintf(fid,'迭代次數: %d次\n\n',k);
fprintf(fid,'超過最大迭代次數,求解失敗!');
fclose(fid);
end
Matlab中龍格-庫塔(Runge-Kutta)方法原理及實現龍格-庫塔(Runge-Kutta)方法是一種在工程上應用廣泛的高精度單步演算法。由於此演算法精度高,採取措施對誤差進行抑制,所以其實現原理也較復雜。該演算法是構建在數學支持的基礎之上的。龍格庫塔方法的理論基礎來源於泰勒公式和使用斜率近似表達微分,它在積分區間多預計算出幾個點的斜率,然後進行加權平均,用做下一點的依據,從而構造出了精度更高的數值積分計算方法。如果預先求兩個點的斜率就是二階龍格庫塔法,如果預先取四個點就是四階龍格庫塔法。一階常微分方程可以寫作:y'=f(x,y),使用差分概念。
(Yn+1-Yn)/h= f(Xn,Yn)推出(近似等於,極限為Yn')
Yn+1=Yn+h*f(Xn,Yn)
另外根據微分中值定理,存在0t1,使得
Yn+1=Yn+h*f(Xn+th,Y(Xn+th))
這里K=f(Xn+th,Y(Xn+th))稱為平均斜率,龍格庫塔方法就是求得K的一種演算法。
利用這樣的原理,經過復雜的數學推導(過於繁瑣省略),可以得出截斷誤差為O(h^5)的四階龍格庫塔公式:
K1=f(Xn,Yn);
K2=f(Xn+h/2,Yn+(h/2)*K1);
K3=f(Xn+h/2,Yn+(h/2)*K2);
K4=f(Xn+h,Yn+h*K3);
Yn+1=Yn+h*(K1+2K2+2K3+K4)*(1/6);
所以,為了更好更准確地把握時間關系,應自己在理解龍格庫塔原理的基礎上,編寫定步長的龍格庫塔函數,經過學習其原理,已經完成了一維的龍格庫塔函數。
仔細思考之後,發現其實如果是需要解多個微分方程組,可以想像成多個微分方程並行進行求解,時間,步長都是共同的,首先把預定的初始值給每個微分方程的第一步,然後每走一步,對多個微分方程共同求解。想通之後發現,整個過程其實很直觀,只是不停的逼近計算罷了。編寫的定步長的龍格庫塔計算函數:
function [x,y]=runge_kutta1(ufunc,y0,h,a,b)%參數表順序依次是微分方程組的函數名稱,初始值向量,步長,時間起點,時間終點(參數形式參考了ode45函數)
n=floor((b-a)/h);%求步數
x(1)=a;%時間起點
y(:,1)=y0;%賦初值,可以是向量,但是要注意維數
for ii=1:n
x(ii+1)=x(ii)+h;
k1=ufunc(x(ii),y(:,ii));
k2=ufunc(x(ii)+h/2,y(:,ii)+h*k1/2);
k3=ufunc(x(ii)+h/2,y(:,ii)+h*k2/2);
k4=ufunc(x(ii)+h,y(:,ii)+h*k3);
y(:,ii+1)=y(:,ii)+h*(k1+2*k2+2*k3+k4)/6;
%按照龍格庫塔方法進行數值求解
end
調用的子函數以及其調用語句:
function dy=test_fun(x,y)
dy = zeros(3,1);%初始化列向量
dy(1) = y(2) * y(3);
dy(2) = -y(1) + y(3);
dy(3) = -0.51 * y(1) * y(2);
對該微分方程組用ode45和自編的龍格庫塔函數進行比較,調用如下:
[T,F] = ode45(@test_fun,[0 15],[1 1 3]);
subplot(121)
plot(T,F)%Matlab自帶的ode45函數效果
title('ode45函數效果')
[T1,F1]=runge_kutta1(@test_fun,[1 1 3],0.25,0,15);%測試時改變test_fun的函數維數,別忘記改變初始值的維數
subplot(122)
plot(T1,F1)%自編的龍格庫塔函數效果
title('自編的 龍格庫塔函數')
⑹ statlssvm工具箱中怎樣求預測值的置信區間
回復 xiezhh 的帖子就是回歸擬合時,求在指定置信度條件下的點預測的預測區間,有沒版有專門的函權數?謝謝了!用regress 可以求系數的置信區間,能不能求預測點的置信區間。數理統計書上有專門的公式,不過有點麻煩!
⑺ pso lssvm工具箱怎麼調用
LS-SVM是什麼,題主隨便搜索一下就應該知道了埃。。 LS-SVM 是 Least Squares Support Vector Machines 的縮寫
⑻ PSO優化SVM參數的問題
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
代碼:
%% 清空環境
clc
clear
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;
end
if V(j,1) < Vcmin
V(j,1) = Vcmin;
end
if V(j,2) > Vgmax
V(j,2) = Vgmax;
end
if 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;
end
if pop(j,1) < popcmin
pop(j,1) = popcmin;
end
if pop(j,2) > popgmax
pop(j,2) = popgmax;
end
if 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;
end
if k == 2
pop(j,k) = (popgmax-popgmin)*rand+popgmin;
end
end
%適應度值
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);
end
fit_gen(i)=global_fitness;
end
toc
%% 結果分析
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