机器学习(周志华) 参考答案 第八章 集成学习 8.5

机器学习(周志华) 参考答案 第八章 集成学习 8.5

机器学习(周志华西瓜书) 参考答案 总目录

  • http://blog.csdn.net/icefire_tyh/article/details/52064910

机器学习(周志华) 参考答案 第八章 集成学习

  • http://blog.csdn.net/icefire_tyh/article/details/52194771

5.试编程实现Bagging,以决策树桩为学习器,在西瓜数据集3.0α上训练一个Bagging集成,并与8.6进行比较。
Bagging采用可重复抽样的方式来生成子样本,然后通过子样本训练一个分类器,最终将所有分类器对样本进行预测,选择分类较多的一个。
这里用随机数的方式来模拟抽样,试了几种分布的随机数,泊松分布还算比较好,所以采用参数为1的泊松分布,然后将所有权值缩小到和为1。
由于每次都是随机数,所以每次结果不相同。当用12个分类器时,可能会出现0,1,2个分类误差。
这是某次结果列表

编号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 分类属性 阀值
样本
1 含糖率 0.2045
2 含糖率 0.1795
3 含糖率 0.2045
4 密度 0.3815
5 含糖率 0.2045
6 含糖率 0.101
7 密度 0.3815
8 含糖率 0.2045
9 密度 0.3815
10 含糖率 0.2045
11 密度 0.3515
12 密度 0.3815

但从训练误差来说Bagging并不如AdaBoost。Bagging可以很大程度上降低方差,但却不降低训练误差。AdaBoost同时降低训练误差与方差,但没有Bagging那么好的多样性。
下面是Bagging的代码,决策树与参数选择的代码没变。参考8.3

global x y py; 
global tree  ptr;

x = xlsread('C:\Users\icefire\Desktop\ml\西瓜3.xlsx', 'sheet1', 'A7:Q8');
y = xlsread('C:\Users\icefire\Desktop\ml\西瓜3.xlsx', 'sheet1', 'A9:Q9');
y = -2*y+3;

[m,n]=size(y);
set=1:1:n;
%记录累积分类器的分类
sy=zeros(1,17);
%样本的权值,初始相同
st=ones(1,17)/17;
fenlei={'好','坏'};
shuxing={'密度','含糖率'};
%记录每次累积分类器的分类
res=cell(12,19);
%产生12个分类器
for i=1:12
    %随机权值并缩小
    st=abs(poissrnd(1,1,17));
    st=st/sum(st);

    tree=zeros(1,100);
    ptr = 0;
    py=zeros(1,17);
    %生成决策树,返回根节点的最优属性与阀值
    [minn,threshold]=TreeGenerate(0,set,st,1);
    sy=sy+py.*st;
    for j=1:17
       res{i,j}=fenlei{fix((3-sign(sy(j)))/2)}; 
    end
    res{i,18}=shuxing{minn};
    res{i,19}=threshold;
end

你可能感兴趣的:(机器学习(周志华西瓜书))