斯坦福机器学习第七周作业中找出最佳C和sigma的代码

来源:互联网 发布:java定义数组并赋值 编辑:程序博客网 时间:2024/06/05 07:30
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拟定一组初值

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)         %   1
sigma = sigma_vec(J)  %   0.100
0 0
原创粉丝点击