算法描述
- 从大小为n的原始样本集D中不放回得随机选取n1个样本点,得到样本集D1,根据D1训练第一个弱分类器C1。
- 采用掷硬币方式,如果是正面就选取D中剩余样本点一个一个送到C1中进行分类,遇到第一个被错分的样本加入集合D2中;如果是反面就选取一个被C1正确分类的样本点加入集合D2中。集合D2有一半样本被C1正确分类,另一半样本被C1错误分类,利用D2训练弱分类器C2。
- 取样本集D中剩余样本点,如C1和C2分类结果不同,就把该样本加入集合D3,训练弱分类器C3。
- 用这3个分类器进行分类,如果C1和C2判决结果相同,则样本标记为这个类别。如果C1和C2判决结果不同,则样本标记为C3类别。
代码思路
构造弱分类器:
.由于所用的数据只是一维的,所以弱分类器构建为直接用阈值分类,弱分类器就是找到一个阈值threshold和一个标签y,当大于threshold时,标记为y, 小于threshold时标记为-y
function [y,threshold]=classifier(D)
[m,n]=size(D);
y=1;
erro=4;
threshold=0.5;%大于阈值为y.小于为-y?怎么能写成自动判断大于还是小于
for j=1:n
f=D(1,j)+0.5;%阈值取所有可能的值,遍历一遍
er1=0; %y为1时分类错误的个数
er2=0;%y为-1时分类错误的个数
for k=1:n
if((D(1,k)&