楼主最近在进行机器学习,通过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均为空,导致后面无法进行
于是我去百度,得到了解决方法,增加了一个~,t_sim1和2确实有数值了,但是都是0
%%仿真预测
[t_sim1,error_1,~] = svmpredict(t_train,p_train,model);
[t_sim2,error_2,~] = svmpredict(t_test ,p_test ,model);
希望大家能看看是哪里出了问题,感激不尽(附b站视频链接:https://www.bilibili.com/video/BV1PB4y167et/?spm_id_from=333.337.top_right_bar_window_default_collection.content.click&vd_source=2444a4a546c550b8deb6cd647bbfb767)