代码原理
1. 支持向量机简介
支持向量机是一种用于分类和回归分析的监督学习模型,尤其在小样本和高维数据集上表现良好。对于回归任务,常用的是支持向量回归(SVR),它通过找到一个决策边界来进行预测。
关键参数包括:
核函数类型(如线性核、RBF核、多项式核等)
惩罚系数C:控制模型的训练误差和复杂度之间的平衡。
核参数(如RBF核的γ参数):影响数据在高维空间中的映射。
2. 支持向量机的不足
计算复杂度:尤其在大型数据集上,计算时间和内存需求较高。
模型选择复杂:选择合适的核函数及其参数是一个挑战。
3. 多种智能优化算法
采用智能优化算法来找到最佳SVM参数,有效提升模型性能。常用的优化算法包括:
鲸鱼优化算法(The Whale Optimization Algorithm ,WOA) |
斑马优化算法(Zebra Optimization Algorithm,ZOA) |
4. 优化SVM的过程
参数初始化:使用智能优化算法生成初始参数集,以避免随机搜索带来的低效。
参数寻优:在算法迭代过程中,通过不断调整C和核参数,智能算法能够探索更大的参数空间,提高全局搜索能力。
交叉验证:利用交叉验证来评估不同参数配置的性能,选择能使验证误差最低的配置。
加速搜索与收敛:凭借智能优化算法的快速收敛特性,提高参数优化速度。
5. 应用效果
总结
代码效果图
部分代码
%% 1.清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 2.导入数据
res = xlsread('回归数据集.xlsx');
%% 3.数据分析
num_size = 0.7; % 训练集占数据集比例
outdim = 1; % 最后一列为输出
num_samples = size(res, 1); % 样本个数
res = res(randperm(num_samples), :); % 打乱数据集(不希望打乱时,注释该行)
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim; % 输入特征维度
%% 4.划分训练集和测试集
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);
%% 5.数据归一化
[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);
%% 6.数据转置
p_train = p_train'; p_test = p_test';
t_train = t_train'; t_test = t_test';
%% 创建模型
c = 1.0; % 惩罚因子
g = 0.8; % 径向基函数参数
cmd = [' -t 2',' -c ',num2str(c),' -g ',num2str(g),' -s 3 -p 0.01'];
model = svmtrain(t_train, p_train, cmd);