SVM的表达式如下 核函数是自己选择的,α和b是根据数据拟合出来的,请问在程序里加什么能得到α和b的数值? 程序如下: close all; clc clear %% 读取数据 load('p_train.mat'); load('p_test.mat'); load('t_train.mat'); load('t_test.mat'); %% 数据归一化 %输入样本归一化 [pn_train,ps1] = mapminmax(p_train'); pn_train = pn_train'; pn_test = mapminmax('apply',p_test',ps1); pn_test = pn_test'; %输出样本归一化 [tn_train,ps2] = mapminmax(t_train'); tn_train = tn_train'; tn_test = mapminmax('apply',t_test',ps2); tn_test = tn_test'; %% SVR模型创建/训练 [c,g] = meshgrid(-10:0.5:10,-10:0.5:10); [m,n] = size(c); cg = zeros(m,n); eps = 10^(-4); v = 5; bestc = 0; bestg = 0; error = Inf; for i = 1:m for j = 1:n cmd = ['-v ',num2str(v),' -t 2',' -c ',num2str(2^c(i,j)),' -g ',num2str(2^g(i,j) ),' -s 3 -p 0.1']; cg(i,j) = libsvmtrain(tn_train,pn_train,cmd); if cg(i,j) < error error = cg(i,j); bestc = 2^c(i,j); bestg = 2^g(i,j); end if abs(cg(i,j) - error) <= eps && bestc > 2^c(i,j) error = cg(i,j); bestc = 2^c(i,j); bestg = 2^g(i,j); end end end % 创建/训练SVR cmd = [' -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -p 0.01']; model =libsvmtrain(tn_train,pn_train,cmd); %% SVR仿真预测 % [Predict_1,error_1,dec_values_1] = svmpredict(tn_train,pn_train,model); [Predict_2,error_2,dec_values_2] = libsvmpredict(tn_test,pn_test,model); % 反归一化 % predict_1 = mapminmax('reverse',Predict_1,ps2); predict_2 = mapminmax('reverse',Predict_2,ps2); %% 计算误差 [len,~]=size(predict_2); error = t_test-predict_2; error = error'; MAE1=sum(abs(error./t_test'))/len; MSE1=error*error'/len; RMSE1=MSE1^(1/2); R = corrcoef(t_test,predict_2); r = R(1,2); disp(['........支持向量回归误差计算................']) disp(['平均绝对误差MAE为',num2str(MAE1)]) disp(['均方误差为MSE:',num2str(MSE1)]) disp(['均方根误差RMSE为',num2str(RMSE1)]) disp(['决定系数 R^2为',num2str(r)]) figure(1) plot(1:length(t_test),t_test,'r-*',1:length(t_test),predict_2,'b:o') grid on legend('真实值','预测值') xlabel('样本编号') ylabel('值') string_2 = {'测试集预测结果对比'}; title(string_2) |