今天终于完成了分类器的学习,SVM基本不怎么会,很是头疼,先放一下吧,有机会问问大神讲解一下。接下来的几天进行监督学习回归部分的学习,先看看adaboost的理解。
我们再决定一个重要的事情时,往往不是听取一个人的意见,听取大家的意见,然后投票表决最终结果。这一个特点也可以应用于机器学习的算法中来,每一个人都是弱的分类器,若是指一个人的力量很小,很多人汇集在一起就构成了强分类器。好比政府的投票系统。
有一个有趣的现象,若每个人都有51%的几率选择正确,则汇集很多人的投票信息之后选择正确的人比选择错误的人多很多,我们认为多数人的选择是正确的,选择错误的人很难扳回来,因为差的人数太多了,投票的人越多,这种现象越得到加强。9个人选A,11个人选B,A和B没什么区别,9000个人选A,11000个人选B,这样A和B就差很多了,我们认为B是正确的。多个弱分类器好比多个人,分类器越多分类结果越得到加强,这样就解释了多个弱分类器可以构成强分类器。
对一组训练样本分类N次,每一次结合更新的权值。
每次听取一个分类器的意见和比重alpha的乘积,最后N个分类器的意见听取结束后最终结果作为预测结果。
每一个阈值分类器为低级分类器,每个循环选择最佳阈值分类器。
算法关键流程(写一点关键步骤,详细步骤参见博客http://www.csdn123.com/html/topnews201408/87/6287.htm或者搜索adaboost的原理与推导):
每一轮最佳阈值分类器
误差率就是被选错的样本权值之和,选择一个误差率最小的,并且误差率高于50%的不要。
然后计算这个阈值分类器在最终分类器中的权重
em越大am越小,说明不好的分类器所占权重越小。
然后更新每个样本的权值
接下来上代码:
step1:
读取简单测试数据:
#读取简单数据
def loadData():
datamat = matrix([[1, 2.1],
[2, 1.1],
[1.3, 1],