说明:
1. 此处是台大林轩田老师主页上的hw7,对应coursera上“机器学习技法”作业三;
2. 本文给出大作业(16-18题)的代码;
3. Matlab代码;
4. 非职业码农,代码质量不高,变量命名也不规范,凑合着看吧,不好意思;
5. 对结果没把握。如有问题,欢迎指教,QQ:50834。
题目16-18仅更新主程序,函数可继续使用题目13-15中的代码。
主程序:
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 = 300;
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(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;
hist(Ein);
title('Q16: Histogram of Ein(gt)');
xlabel('t');
ylabel('Ein(gt)');
figure;
hold on;
plot(EinG,'r');
plot(EoutG,'b');
title('Q17-18: t versus E(Gt)');
xlabel('t');
ylabel('E(Gt)');
legend('Ein(Gt)', 'Eout(Gt)');