初学svm算法,我在matlab上用libsvm做多输入单输出预测,输入为10种特征值,出来的预测数据是同一个值,麻烦各位帮忙看一下问题出在哪里,应该怎么修改?非常感谢!
主要程序如下:
close all;
clear;
clc;
data=xlsread('数据2.xlsx','Sheet1','A1:K288');
input=data(:,1:end-1);
output=data(:,end);
N=length(output);
testNum=80;
trainNum=N-testNum
input_train = input(1:trainNum,:);
output_train =output(1:trainNum);
input_test =input(trainNum+1:trainNum+testNum,:);
output_test =output(trainNum+1:trainNum+testNum);
[mtrain,ntrain] = size(input_train);
[mtest,ntest] = size(input_test);
dataset = [input_train;input_test];
[dataset_scale,ps] = mapminmax(dataset',0,1);
dataset_scale = dataset_scale';
input_train = dataset_scale(1:mtrain,:);
input_test = dataset_scale( (mtrain+1):(mtrain+mtest),: );
mse = 10^4;
for log2c = -10:0.5:10
for log2g = -10:0.5:10
cmd = ['-v 5 -c ', num2str(2^log2c), ' -g ', num2str(2^log2g) , ' -s 3 -p 0.4'];
cv = libsvmtrain(output_train,input_train,cmd);
if (cv < mse)
mse = cv; bestc = 2^log2c; bestg = 2^log2g;
end
end
end
cmd = [' -c ',num2str(bestc),' -g ',num2str(bestg),'-s 3 -p 0.4'];
model = libsvmtrain(output_train,input_train,cmd);
[test_simu,accuracy] = libsvmpredict(output_test,input_test,model);
error=test_simu-output_test;