✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。
🍎 往期回顾关注个人主页:Matlab科研工作室
👇 关注我领取海量matlab电子书和数学建模资料
🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。
🔥 内容介绍
- SVM 原理:SVM 是经典的有监督分类算法。其核心是找到一个最优超平面,使不同类别样本被最大化分开,位于超平面两侧且距离超平面最近的样本点为支持向量,超平面由支持向量决定。对于线性不可分数据,通过核函数将低维数据映射到高维,使其线性可分,同时引入松弛因子和惩罚因子处理数据噪声和非线性问题,以平衡模型的拟合能力和泛化能力。
- PSO-SVM 原理:PSO-SVM 是在 SVM 基础上引入粒子群优化算法(PSO)。SVM 性能依赖核函数参数和惩罚参数,传统参数选择方法计算量大、效率低。PSO 算法模拟鸟群觅食行为,每个粒子代表一组 SVM 参数,通过迭代更新粒子的速度和位置,寻找最优参数组合,以提高 SVM 多特征分类预测的准确性和效率。
- QPSO-SVM 原理:QPSO-SVM 是在 PSO-SVM 基础上,采用量子粒子群优化算法(QPSO)替代 PSO。QPSO 基于量子力学原理,粒子位置更新具有不确定性,相比 PSO 有更强的全局搜索能力和更快的收敛速度。它同样用于优化 SVM 的参数,能更有效地在参数空间中搜索,找到使 SVM 模型性能更优的参数,进一步提升多特征分类预测的性能,尤其是在处理复杂数据集时效果更明显。
三种模型对比:SVM 是基础模型,依赖人工调参或传统调参方法,在复杂多特征数据下可能因参数不佳影响性能。PSO-SVM 通过 PSO 优化参数,一定程度上提高了分类准确性和效率,但 PSO 存在早熟收敛问题。QPSO-SVM 利用 QPSO 更好的全局搜索能力,在准确率、F1 值等指标上通常表现更优,训练和预测时间也可能更短,性能更稳定高效。
⛳️ 运行结果
📣 部分代码
unction [R,rmse,biaozhuncha,mae,mape]=calc_error(x1,x2)
%此函数用于计算预测值和实际(期望)值的各项误差指标
% 参数说明
%----函数的输入值-------
% x1:真实值
% x2:预测值
%----函数的返回值-------
% mae:平均绝对误差(是绝对误差的平均值,反映预测值误差的实际情况.)
% mse:均方误差(是预测值与实际值偏差的平方和与样本总数的比值)
% rmse:均方误差根(是预测值与实际值偏差的平方和与样本总数的比值的平方根,也就是mse开根号,
% 用来衡量预测值同实际值之间的偏差)
% mape:平均绝对百分比误差(是预测值与实际值偏差绝对值与实际值的比值,取平均值的结果,可以消除量纲的影响,用于客观的评价偏差)
% error:误差
% errorPercent:相对误差
if nargin==2
if size(x1,2)==1
x1=x1'; %将列向量转换为行向量
end
if size(x2,2)==1
x2=x2'; %将列向量转换为行向量
end
num=size(x1,2);%统计样本总数
error=x2-x1; %计算误差
x1(find(x1==0))=inf;
errorPercent=abs(error)./x1; %计算每个样本的绝对百分比误差
mae=sum(abs(error))/num; %计算平均绝对误差
mse=sum(error.*error)/num; %计算均方误差
rmse=sqrt(mse); %计算均方误差根
mape=mean(errorPercent); %计算平均绝对百分比误差
biaozhuncha=std(x2);
%结果输出
for i=1:size(x1,1)
tempdata=(x1(i,:)-x2(i,:)).^2;
tempdata2=(x1(i,:)-mean(x1(i,:))).^2;
R(i)=1 - ( sum(tempdata)/sum(tempdata2) );
% disp(['决定系数R为: ',num2str(R(i))])
end
disp(['标准差为: ',num2str(biaozhuncha)])
disp(['均方误差根rmse为: ',num2str(rmse)])
disp(['平均绝对误差mae为: ',num2str(mae)])
disp(['平均绝对百分比误差mape为: ',num2str(mape*100),' %'])
else
disp('函数调用方法有误,请检查输入参数的个数')
end
end