機器學習技法作業二題目19-20

說明:

1. 此處是臺大林軒田老師主頁上的hw6,對應coursera上“機器學習技法”作業二;

2. 本文給出大作業(19-20題)的代碼;

3. Matlab代碼;

4. 非職業碼農,代碼質量不高,變量命名也不規範,湊合着看吧,不好意思;

5. 如有問題,歡迎指教,QQ:50834。


題目19-20,分爲主程序和一個函數。

主程序:

<pre name="code" class="plain">clear all;
close all;

data = csvread('hw6_lssvm_all.dat');
Nsum = length(data);
xtrn = [ones(400,1),data(1:400,1:end-1)];
ytrn = data(1:400,end);
xtst = [ones(Nsum-400,1), data(401:end,1:end-1)];
ytst = data(401:end,end);
clear data;
clear Nsum

[N,k]=size(xtrn);
[Ntst,dummy]=size(xtst);

lambdas = [0.001,1,1000];
gammas = [32,2,0.125];
K = ones(N,N);
Ein = ones(length(gammas),length(lambdas));
Eout = ones(length(gammas),length(lambdas));
for i = 1:length(gammas)
    gamma = gammas(i);
    K = hw6_RBFKernel(xtrn, xtrn, gamma);

    for j = 1:length(lambdas)
        lambda = lambdas(j);
        beta = pinv(lambda * eye(N) + K) * ytrn;
        
        ytrnpred = sign(K'*beta);
        Ein(i,j) = sum(ytrn~=ytrnpred)/N;
        
        Kpred = hw6_RBFKernel(xtrn, xtst, gamma);
        ytstpred = sign(Kpred'*beta);
        Eout(i,j) = sum(ytst~=ytstpred)/Ntst;
        
    end;
end;

fprintf('==== *Q19-20* ====\n');
fprintf(' Ein              ');
for j = 1:length(lambdas),
    fprintf('Lambda = 10^(%2.0f)   ', log10(lambdas(j)));
end;
fprintf('\n');

for i = 1:length(gammas),
    fprintf('Gamma = 2^(%2.0f)', log2(gammas(i)));
    for j = 1:length(lambdas),
        fprintf('%19.4f', Ein(i,j));
    end;
    fprintf('\n');
end;

fprintf('\n Eout             ');
for j = 1:length(lambdas),
    fprintf('Lambda = 10^(%2.0f)   ', log10(lambdas(j)));
end;
fprintf('\n');

for i = 1:length(gammas),
    fprintf('Gamma = 2^(%2.0f)', log2(gammas(i)));
    for j = 1:length(lambdas),
        fprintf('%19.4f', Eout(i,j));
    end;
    fprintf('\n');
end;


函數:

function K = hw6_RBFKernel(x1,x2,g)

N1 = length(x1);
N2 = length(x2);
K = zeros(N1,N2);
for i = 1:N1,
    for j = 1:N2,
        K(i,j) = exp(-g*(x1(i,:)-x2(j,:))*(x1(i,:)-x2(j,:))');
    end;
end;

end

結果輸出:

==== *Q19-20* ====
 Ein              Lambda = 10^(-3)   Lambda = 10^( 0)   Lambda = 10^( 3)   
Gamma = 2^( 5)             0.0000             0.0000             0.0000
Gamma = 2^( 1)             0.0000             0.0000             0.0000
Gamma = 2^(-3)             0.0000             0.0300             0.2425


 Eout             Lambda = 10^(-3)   Lambda = 10^( 0)   Lambda = 10^( 3)   
Gamma = 2^( 5)             0.4500             0.4500             0.4500
Gamma = 2^( 1)             0.4400             0.4400             0.4400
Gamma = 2^(-3)             0.4600             0.4500             0.3900


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章