机器学习貌似进入了疲惫期,虽然才连看了一周不到,但是发现要学的太多了。介于这样,于是今天学习adaboost的时候就偷了懒,记住和理解了主要的思想,没看公式推导。
adaboost是一种集成学习算法。适用于二分类。是一个多分类器。由于多种分类器集成会比单一算法更有泛化性,并且不容易overfitting,集成算法算是比较有优势的算法,近期也是广受运用。
boosting的想法比较简单,利用多种弱学习分类器(error小于0.5但是不是很低很精确)进行分类,最后得到weighted average。这种算法最后往往得到比较好的结果,比较小的误差。
它是一个循环迭代的过程。假设原始training set为D,一共有T个分类器(即总共循环T次),初始权重值均分(即为1/m),m为training set的大小。 每次在循环中都会先重建一次D为Dt+1,为的是将前一轮训练得到的误差权重乘入training set中,这样在此次训练分类时,就可以迫使分类器将权值高的点进行比较好的分类。然后计算误差,alpha值和权重到下一轮中。当然如果这轮分类器的误差大于0.5,则不使用改分类器(因为这时分类器已经不是弱学习分类器了)。直到循环结束。得到sign函数值。
为什么能保证每次循环以后结果会变好?其实对点的分类误差并不一定减少,但每一次有出错的点都会增加比重,那么就会迫使下一个分类器去重点划分比重较高的点,结果就会一次比一次好,alpha值会一直增加。
boosting比较不容易overfitting的原因在于,每增加一个假设h(x),即一个分类器,计算的到的confidence就会相应增高,confidence增加表明分类更明确,类别之间的margin越来越大,类别之间更清晰。
boosting 在weak learner uses ANN(artificial neural network)with many layers and nodes 下可能会overfitting。boosting在调用神经网络算法的时候,神经网络可能会overfitting,导致boosting overfitting。并且在pink noise(uniform noise)下容易overfitting。