用LIBSVM做的回归,效果很不好,找不到原因,请大家帮忙找找。
下面这个程序是挑选最佳c和g的,帮我找找错误,谢谢了。
load principal28 ; %载入数据矩阵PCA28(24*6)
[pn,minp,maxp] = premnmx(PCA28);
indices=crossvalind('kfold',24,24);
y1 =[4.9085;5.2529;4.9370;8.400;6.600;5.900;7.200;9.9494;6.2787;6.3711;7.1139;6.3617;5.4314;4.7160;7.0414;6.8751;8.4472;7.1461;8.477;8.431;7.6628;6.041;6.3824;7.6532];
tt = 2;
Count = 0;
for Gamma = -15 :3
g = 2.^Gamma;
Count = Count + 1;
GG(Count) = Gamma;
Tim = 0;
for Penalty = -5 :15
c = 2.^Penalty;
Tim = Tim + 1;
CC(Tim) = Penalty;
predict = [];
MSE =[];
d =[];
for k = 1 : 24
test = ( indices24 == k); train = ~test;
xtest = pn(test); xlearn = pn(train) ;
ytest = y1(test); ylearn = y1(train);
eval(['model = svmtrain(ylearn, xlearn, ''-s 3 ' '-t ' num2str(tt) ' -g ' num2str(g) ' -c ' num2str(c) '-p 0.1 '');'])
[predict_label,accuracy] = svmpredict(ytest, xtest, model,'-b 0 ' );
d=cat(1,d,ytest);
predict = cat(1,predict,predict_label);
end
h=1:24;
mse(Count,Tim) = sqrt(sum ((predict(h) -d(h) ).^2)/24);
MSE =cat(1,MSE,mse);
r=sqrt((sum((predict-mean(d)).^2))/(sum((d-mean(d)).^2)));
R2=1-(sum((d-predict).^2)/sum((mean(ytest)-d).^2));
SE=sqrt((sum((d-predict).^2))/24);
end
end
[AA, BB] = find( MSE == min(min(MSE )));
Gamma = GG(AA) ;
bg = 2.^Gamma;
Penalty = CC(BB);
bc = 2.^Penalty;
save bestc bc
save bestg bg