⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lssvm.m

📁 可以利用最小二乘支持向量机进行训练和预测
💻 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 + -