您的位置:首页 > 其它

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

2016-08-12 19:26 656 查看

机器学习(周志华) 参考答案 第八章 集成学习 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个分类误差。

这是某次结果列表

编号1234567891011121314151617分类属性阀值
样本
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器学习