Boost NN与bagging实验对比
一、Boost
Boosting算法是将“弱学习算法“提升为“强学习算法”的过程,主要思想是“三个臭皮匠顶个诸葛亮”。一般来说,找到弱学习算法要相对容易一些,然后通过反复学习得到一系列弱分类器,组合这些弱分类器得到一个强分类器。Boosting算法要涉及到两个部分,加法模型和前向分步算法。加法模型就是说强分类器由一系列弱分类器线性相加而成。一般组合形式如下:
其中, 就是一个个的弱分类器,是弱分类器学习到的最优参数,就是弱学习在强分类器中所占比重,P是所有和的组合。这些弱分类器线性相加组成强分类器。
:
1、Boost改变了训练数据的权值,也就是样本的概率分布,其思想是将关注点放在被错误分类的样本上,减小上一轮被正确分类的样本权值,提高那些被错误分类的样本权值。
2、采用加权多数表决的方法,加大分类误差率小的弱分类器的权重,减小分类误差率大的弱分类器的权重。
二、 Bagging
Bagging即套袋法,其算法过程如下:
A)从原始样本集中抽取训练集.每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中).共进行k轮抽取,得到k个训练集.(k个训练集相互独立)
B)每次使用一个训练集得到一个模型,k个训练集共得到k个模型.(注:根据具体问题采用不同的分类或回归方法,如决策树、神经网络等)
C)对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果.
三、 实验方案
注:M1,M2真实存在,M为最基础的boost做法,M0为程序实现方法。
:
:
参考github地址boostNN的实现
(https://github.com/Jeanselme/AdaBoost_Neural_Network)
:
:
四、 实验参数与结果
参数:boost_round(多少个弱分类器)和boost_mode(不同的boost MODE M1,M2,M见3)两个参数。
boost M与bagging 算法结果对比:
103,107为选的单模型名字。
boost中不同的值会对最终分类结果产生影响:
求解公式为:
五、 数据分析
分析boost与bag数据预测结果异同点:
Boost
Valid数据集上有标签的准确率360/1688=0.213
Recall:360/434=0.829
原始\预测 | 有标签(1688) | Null(7204) |
---|---|---|
有标签(434) | 360 | 74 |
Null(8458) | 1328 | 7130 |
bagging
Valid数据集上360/1720=0.209
Recall:361/434=0.831
原始\预测 | 有标签(1720) | Null(7172) |
---|---|---|
有标签(434) | 361 | 73 |
Null(8458) | 1359 | 7099 |
对有标签分析:
在boost1688条有标签中有1389条(82%)和bagging预测结果完全相同,118条(6.9%)boost和bagging标签有值不对应,11.1%boost预测有标签,bagging为空。
在bagging1720条有标签中有1389条(80.7%)和boost预测结果完全相同,118条(6.8%)bagging和boost标签有值不对应,12.5%bagging预测有标签,boost为空。
boost和bagging预测结果的相似度较高,在80%以上。
六、 总结
- boost和bagging性能差别不大。
Bagging通过降低基分类器的方差,改善了泛化误差, 其性能依赖于基分类器的稳定性;如果基分类器不稳定,bagging有助于降低训练数据的随机波动导致的误差;如果稳定,则集成分类器的误差主要由基分类器的偏倚引起
bagging的每个预测函数都没有权重;而boosting根据每一次训练的训练误差得到该次预测函数的权重
bagging的各个预测函数可以并行生成;而boosting只能顺序生成。(对于神经网络这样极为耗时的学习方法,bagging可通过并行训练节省大量时间开销)