代码原理
基于最小二乘支持向量机(LSSVM)的数据回归预测,其简单原理和流程可以总结如下:
数据准备:
- 获取带有标签的训练数据集,包括输入特征和对应的输出值。
模型选择:
- 选择使用支持向量机(SVM)进行回归任务,其中采用了最小二乘法(Least Squares)来优化模型。
模型构建:
- 将回归问题转化为一个优化问题,寻找最优的超平面(在高维空间中的超平面,对应于低维空间中的曲线或曲面),使得预测值与真实值之间的误差最小化。
核函数选择:
- SVM在处理非线性问题时,通常采用核函数来映射输入空间到更高维的特征空间。常用的核函数包括线性核、多项式核和径向基函数(RBF)核,选择适合数据特性的核函数。
模型训练:
- 通过求解优化问题,找到最佳的超平面和相关的支持向量,以最小化损失函数(通常为误差的平方和)。
预测:
- 使用训练好的模型对新的未见过的数据进行预测。通过模型得到的超平面,计算输入特征对应的输出值。
总结来说,LSSVM将最小二乘法与支持向量机相结合,通过寻找最优超平面来进行回归预测,其流程包括数据准备、模型选择、模型构建、核函数选择、模型训练和预测步骤。
部分代码
%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc
addpath(genpath(pwd));
%% 导入数据
data = readmatrix('回归数据集.xlsx');
data = data(:,1:14);
res=data(randperm(size(data,1)),:); %此行代码用于打乱原始样本,使训练集测试集随机被抽取,有助于更新预测结果。
num_samples = size(res,1); %样本个数
% 训练集和测试集划分
outdim = 1; % 最后一列为输出
num_size = 0.7; % 训练集占数据集比例
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim; % 输入特征维度
P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);
P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 2);
% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
%随机设定gam和sig2的值
gam = 25;
sig2 = 180;
tic
model = initlssvm(p_train',t_train','f',[],[],'RBF_kernel');
%实现多分类,要对下列参数进行设置!
model.code = 'changed';
model.codetype = 'code_OneVsOne';
model.gam = gam*ones(1,45); %这里的45是原始LSSVM在寻优gam和kernel_pars时,自己设定的参数,这个可以不必在意!
model.kernel_pars = sig2*ones(1,45);
model = trainlssvm(model);
toc
t_sim1 = simlssvm(model,p_train');
t_sim2 = simlssvm(model,p_test');
% 数据反归一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);
T_train1 = T_train;
T_test2 = T_test;
rmpath(genpath(pwd));
代码效果图
获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复数据回归预测本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。