代码原理及流程
支持向量机(SVM)是一种强大的机器学习算法,既可以用于分类问题,也可以用于回归问题。在回归问题中,SVM 的目标是找到一个函数,使得预测值与实际值之间的误差最小化,并且保持在一定的容忍度范围内。
简单原理
- 数据转换: 将输入数据通过某种核函数(kernel)映射到高维空间,使得数据变得线性可分或者更容易处理。
- 寻找最佳超平面: SVM 的目标是在高维空间中找到一个最佳的超平面,该超平面能够最大化预测值与实际值之间的边界(Margin),即支持向量之间的间隔最大化。
- 确定预测函数: 找到超平面后,对于新的输入数据点,根据其在超平面的位置,预测其对应的输出值。
流程
- 数据准备: 收集并准备回归所需的训练数据,确保数据集合适且具备可解释性。
- 选择核函数: 选择合适的核函数,如线性核、多项式核或高斯核(RBF核),用于将数据映射到高维空间。
- 模型训练: 在训练阶段,SVM 将尝试找到一个超平面,使得训练数据的预测误差最小,并且超平面到支持向量的距离最大化。
- 模型评估: 使用测试数据集评估模型的性能,通常使用均方误差(MSE)或 R 平方(R-squared)等指标来评估回归预测的准确性。
- 预测: 经过训练的模型可以用于预测新的输入数据点的输出值。
SVM 在回归问题中的优点包括对高维数据的有效处理能力和对异常值的鲁棒性。但在处理大规模数据集时,可能需要耗费较多的计算资源。
部分代码
%% 清空环境变量
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);
bestc = 0.01;
bestg = 190;
cmd = [' -s 4',' -t 0',' -c ',num2str(bestc),' -g ',num2str(bestg)];
tic
mode= libsvmtrain(t_train',p_train',cmd);
toc
代码效果图
获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复数据回归预测本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。