?? lssvm.m
字號:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%最小二乘支持向量機(LSSVM)軟測量,崔宇,200901
%該函數的作用:用訓練樣本集進行訓練,然后對測試樣本集進行預測,返回預測輸出值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%【輸入】: XTrain - 訓練集樣本_鍋爐工況數據
% yTrain - 訓練集樣本_飛灰含碳(或煙氣含氧)真實值
% XTest - 測試集樣本_鍋爐工況
% Gama - 懲罰系數(LS-SVM參數,也叫正規化參數)
% Sigma - RBF核函數參數(LS-SVM參數)
%【輸出】:yPredict - 飛灰含碳(或煙氣含氧)軟測量模型預測值
function yPredict= LSSVM(XTrain,yTrain,XTest,Gama,Sigma);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%初始化
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% t = cputime;
SampleNumber = size(XTrain,1); %訓練樣本數(各論文中的“L”)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%LSSVM方法中,線性方程組等號左邊的系數矩陣
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
InputMatrix =ones(SampleNumber + 1,SampleNumber + 1); %初始化線性方程組等號左邊的矩陣
InputMatrix(1,1) =0;
KernelXTrain = zeros(SampleNumber,SampleNumber); %初始化線性方程組等號左邊的矩陣中的子陣
%對線性方程等號左邊的矩陣中的子陣進行賦值
for i = 1:SampleNumber
for j = 1:SampleNumber
if i < j,
KernelXTrain(i,j) = sum((XTrain(j,:) - XTrain(i,:)).^2); %歐式距離的平方
else
KernelXTrain(i,j) = KernelXTrain(j,i);
end
end
end
%計算線性方程組等號左邊矩陣
KernelXTrain = exp(KernelXTrain/-Sigma);
KernelXTrain =KernelXTrain + 1 / Gama * eye(SampleNumber);
InputMatrix(2:SampleNumber + 1,2:SampleNumber + 1) = KernelXTrain;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%LSSVM方法中,線性方程組等號右邊的系數矩陣
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
OutMatrix = zeros(SampleNumber + 1,size(yTrain,2)); %初始化線性方程組等號右邊的矩陣
%計算線性方程組右邊矩陣
for i = 1:size(yTrain,2)
OutMatrix(:,i) = [0;yTrain(:,i)];
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%求解LSSVM中的線性方程組
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Coefficient = inv(InputMatrix) * OutMatrix;
a = Coefficient(2:SampleNumber + 1,:);
b=zeros(size(XTest,1),1);
for i = 1:size(XTest,1)
b(i,:) = Coefficient(1,:);
end
% cputime - t
% t1= cputime;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%計算測試集鍋爐工況核函數
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
KernelXTest= zeros(size(XTest,1),SampleNumber);
for i = 1:size(XTest,1)
for j = 1:SampleNumber
KernelXTest(i,j) = sum((XTrain(j,:) - XTest(i,:)).^2); %歐式距離的平方
end
end
KernelXTest = exp(KernelXTest / -Sigma);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%使用訓練得到的軟測量模型,對某一個(或幾個)工況下的飛灰含碳(或煙氣含氧)進行預測
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
yPredict = KernelXTest * a + b;
% (cputime - t1)/SampleNumber
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%存在的若干問題
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -