ex6-1. support vector machines


1. Try different value of C


% You should try to change the C value below and see how the decision  
% boundary varies (e.g., try C = 1000)  
C = 1;  
model = svmTrain(X, y, C, @linearKernel, 1e-3, 20);  
visualizeBoundaryLinear(X, y, model);

model = svmTrain(X, y, C, @linearKernel, 1e-3, 20);
SVM 라이브러리 사용으로 코드 구현할 필요없음.

2. Gaussian Kernel


x1 = [1 2 1]; x2 = [0 4 -1]; sigma = 2;  
sim = gaussianKernel(x1, x2, sigma);

caller

function sim = gaussianKernel(x1, x2, sigma)  
% ====================== YOUR CODE HERE ======================  
sim = exp(-( (sum((x1 - x2) .^ 2)) / (2*(sigma^2)) ));

공식에 맞게 계산만함.

3. Gaussian Kernel for non-linear


gaussianKernel()을 구현해서 다음 library 함수를 사용하면 decision boundary가 나옴.

model= svmTrain(X, y, C, @(x1, x2) gaussianKernel(x1, x2, sigma));   
visualizeBoundary(X, y, model);

4. Find best C and Sigma



% Try different SVM Parameters here  
[C, sigma] = dataset3Params(X, y, Xval, yval);  

% Train the SVM  
model= svmTrain(X, y, C, @(x1, x2) gaussianKernel(x1, x2, sigma));  
visualizeBoundary(X, y, model);

caller

function [C, sigma] = dataset3Params(X, y, Xval, yval)  

% ====================== YOUR CODE HERE ======================  
% Instructions: Fill in this function to return the optimal C and sigma  
%               learning parameters found using the cross validation set.  
%               You can use svmPredict to predict the labels on the cross  
%               validation set. For example,   
%                   predictions = svmPredict(model, Xval);  
%               will return the predictions on the cross validation set.  
%  
%  Note: You can compute the prediction error using   
%        mean(double(predictions ~= yval))  
%  

x1 = [1 2 1]; x2 = [0 4 -1];   
max_min = 99999999;  

for tmp_c =[0.01, 0.03, 0.1, 0.3, 1, 3, 10, 30]  
    for tmp_sigma =    [0.01, 0.03, 0.1, 0.3, 1, 3, 10, 30]  
        model= svmTrain(X, y, tmp_c, @(x1, x2) gaussianKernel(x1, x2, tmp_sigma));   
        predictions = svmPredict(model, Xval);  
        minimun = mean(double(predictions ~= yval));  
        %fprintf('C = %f, sigma = %f minimun=%f\n', tmp_c, tmp_sigma, minimun);  
        if (minimun < max_min)  
            max_min = minimun;  
            res_c = tmp_c;  
            res_sigma = tmp_sigma;  
        end  
    end  
end  

C = res_c;  
sigma = res_sigma;

results matching ""

    No results matching ""