C_vec = [0.01 0.03 0.1 0.3 1 3 10 30]';
%为C拟定一组初值
sigma_vec = [0.01 0.03 0.1 0.3 1 3 10 30]'; %为sigma拟定一组初值
for i = 1:length(C_vec)
for j = 1:length(sigma_vec)
model = svmTrain(X,y, C_vec(i), @(x1, x2) gaussianKernel(x1, x2, sigma_vec(j))); %通过调用svmTrain函数来计算
predictions = svmPredict(model,Xval); %预测
error_val(i,j) = mean(double(predictions~=yval)); %保存误差
end
end
[minval,ind] = min(error_val(:)); %保存最小误差所在的行列
sigma = sigma_vec(J) % 0.100
sigma_vec = [0.01 0.03 0.1 0.3 1 3 10 30]'; %为sigma拟定一组初值
error_val = zeros(length(C_vec),length(sigma_vec)); %用于保存验证集误差
error_train = zeros(length(C_vec),length(sigma_vec)); %用于保存训练集误差for i = 1:length(C_vec)
for j = 1:length(sigma_vec)
model = svmTrain(X,y, C_vec(i), @(x1, x2) gaussianKernel(x1, x2, sigma_vec(j))); %通过调用svmTrain函数来计算
predictions = svmPredict(model,Xval); %预测
error_val(i,j) = mean(double(predictions~=yval)); %保存误差
end
end
[minval,ind] = min(error_val(:)); %保存最小误差所在的行列
[I,J] = ind2sub([size(error_val,1) size(error_val,2)],ind);
%在 FreeMat、 Matlab中,该函数用于把 数组中元素索引值转换为该元素在数组中对应的下标
%Example1:
IND = [3 4 5 6]
s = [3,3];
[I,J] = ind2sub(s,IND)
I = 3 1 2 3
J = 1 2 2 2
IND表示索引值,s表示数组的大小,i,j表示索引值所在的位置(按列优先)
C = C_vec(I) % 1sigma = sigma_vec(J) % 0.100