题目要求如下:
S,M,L这些字母太过抽象,这里让S=1,M=2,L=3。
首先产生数据:
1 | import numpy as np |
画出原始散点图如下:
1 | x1,x2,y = GetDataset() |
然后是设计基学习器,这里根据基学习器处理数据维度的不同,以及大于或者小于的不同,将数据标签分成1或者-1,代码如下:
1 | def BaseLearn(dim,threshnum,low_or_high): |
然后是对每次迭代中的阈值和结果进行迭代,这里对各维度和各阈值进行遍历,求出错误率最小的一组作为基学习器的结果,即树桩:
1 | def GetStump(w): |
然后进行基学习器的迭代,获得最终的学习器累加的结果:
1 | def AdaBoost(iters): |
最后输出结果和分类的散点图,这里迭代四次,可以得到1,M对应的结果,如下:
1 | val = AdaBoost(4) |
0
(0.49041462650586315, 0.49041462650586315)
可以看出(1,M)对应的索引值均大于0,所以结果其分类结果为1。