您的位置:首页 > 编程语言 > MATLAB

机器学习技法作业三题目19-20

2016-09-28 10:40 1596 查看
说明:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器学习 Matlab
相关文章推荐