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

說明:

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

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

3. Matlab代碼;

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

5. 對結果沒把握。如有問題,歡迎指教,QQ:50834。


相比於題目13-18,題目19-20需要修改主程序和一個函數。

主程序:

clear all;
close all;

data_trn = csvread('hw7_train.dat');
data_tst = csvread('hw7_test.dat');

xtrn = data_trn(:,1:end-1);
ytrn = data_trn(:,end);
[N,k] = size(xtrn);
xtst = data_tst(:,1:end-1);
ytst = data_tst(:,end);
[Ntst,k] = size(xtst);

clear data_trn
clear data_tst

T = 1000;
node0 = [1,0,0,0,0,0,0];
Ein = zeros(T,1);
Eout = zeros(T,1);
EinG = zeros(T,1);
EoutG = zeros(T,1);
ypred_sum_trn = zeros(N,1);
ypred_sum_tst = zeros(Ntst,1);

for t = 1:T,
    global dtree_node;
    dtree_node = [];
    idx_RF = randi(N,N,1);
    
    hw7_CART_train_1branch(xtrn(idx_RF),ytrn(idx_RF), node0);

    ypred_trn = hw7_CART_pred(dtree_node, xtrn);
    Ein(t) = sum(ypred_trn ~= ytrn)/N;
    ypred_sum_trn = ypred_sum_trn+ypred_trn;
    EinG(t) = sum(sign(ypred_sum_trn) ~= ytrn)/N;
    
    ypred_tst = hw7_CART_pred(dtree_node, xtst);
    Eout(t) = sum(ypred_tst ~= ytst)/Ntst;
    ypred_sum_tst = ypred_sum_tst+ypred_tst;
    EoutG(t) = sum(sign(ypred_sum_tst) ~= ytst)/Ntst;

    clear dtree_node;
end;

figure;
hold on;
plot(EinG,'r');
plot(EoutG,'b');
title('Q19-20: t versus E(Gt)');
xlabel('t');
ylabel('E(Gt)');
legend('Ein(Gt)', 'Eout(Gt)');

函數

function hw7_CART_train_1branch(x,y,node0)

global dtree_node;
dtree_node = [dtree_node;node0];
fn_num = node0(1);

[s, dim, thresh] = hw7_deci_stump_impurity(x, y);
dtree_node(fn_num,3)=s;
dtree_node(fn_num,4)=dim;
dtree_node(fn_num,5)=thresh;

dtree_size = size(dtree_node);
nodep = [dtree_size(1)+1,fn_num,s,0,0,0,0];
dtree_node = [dtree_node;nodep];
dtree_node(fn_num,6)=dtree_size(1)+1;

dtree_size = size(dtree_node);
nodem = [dtree_size(1)+1,fn_num,-s,0,0,0,0];
dtree_node = [dtree_node;nodem];
dtree_node(fn_num,7)=dtree_size(1)+1;

end


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