matlab支持向量机预测部分遇到了问题

楼主最近在进行机器学习,通过matlab软件进行支持向量机的学习

按照b站博主的代码及流程一步步的走,libsvm也是下载的网络资源。使用的是自己的数据集,代码按照博主的代码,在仿真预测部分出现了问题。

代码如下:

%%导入数据
res = xlsread('数据集.xlsx');

%%划分训练集和测试集
temp = randperm(343);
P_train = res(temp(1: 250),2: 8)';
T_train = res(temp(1: 250),1)';
M = size(P_train,2);
P_test = res(temp(251: end),2: 8)';
T_test = res(temp(251: end),1)';
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);

%% 转置以适应模型
p_train = p_train';
p_test = p_test';
t_train = t_train'; 
t_test = t_test';

%% 创建模型
c = 4.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);

%%仿真预测
[t_sim1,error_1] = svmpredict(t_train,p_train,model);
[t_sim2,error_2] = svmpredict(t_test ,p_test ,model);

%% 数据反归一化
T_sim1 = mapminmax('reverse',t_sim1,ps_output);
T_sim2 = mapminmax('reverse',t_sim2,ps_output);

%% 均方根误差
error1 = sqrt(sum((T_sim1' - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2' - T_test ).^2) ./ N);

%% 绘图
figure
plot( 1: M,T_train,'r-*',1: M,T_sim1,'b-o','LineWidth',1)
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比' ; ['RMSE=' num2str(error1)] };
title(string)

仿真预测部分出现了问题,t_sim1和2均为空,导致后面无法进行

img

于是我去百度,得到了解决方法,增加了一个~,t_sim1和2确实有数值了,但是都是0

%%仿真预测
[t_sim1,error_1,~] = svmpredict(t_train,p_train,model);
[t_sim2,error_2,~] = svmpredict(t_test ,p_test ,model);

img


就导致最后导出的图片是这样的,完全没有预测效果

img

希望大家能看看是哪里出了问题,感激不尽(附b站视频链接:https://www.bilibili.com/video/BV1PB4y167et/?spm_id_from=333.337.top_right_bar_window_default_collection.content.click&vd_source=2444a4a546c550b8deb6cd647bbfb767

https://blog.csdn.net/Blame___/article/details/127910119