集成学习算法的整理

集成学习–常更新,常总结,常扭头看

  • 集成学习(ensemble learning):先产生一组“个体学习器”,再将它们的分类结果结合起来。(所以研究集成,是两个方向:怎么产生,怎么结合)
  • 集成学习对个体学习器的要求:好而不同(精度高,分类偏好不同)
  • adaBoosting:先从初始训练集中训练出一个基学习器(base learner),以分类错误的样本在后续的训练中得到更高的关注为原则,对训练样本分布进行调整。然后训练下一个基学习器,循环,直到基学习器的数目达到预设值,然后将所有的基学习器进行加权结合。
    详细解释,见知乎:https://zhuanlan.zhihu.com/p/59121403
    大概流程:
  1. 初始化每个样本的权值,
  2. 学习器进行预测,得到预测标签,
  3. 计算第一个学习器的权重(用于最后集成),
  4. 调整样本的权重,
  5. 学习器进行预测(由于学习器是弱学习器,具有高度的不稳定性,重复预测的结果会有较大的差异性)
  6. 计算第二个学习器的权重,
  7. 调整样本的权重,
    ···
  8. 直到学习器的数目达到预定值
  9. 依据每个学习器的权重,进行最后的加权集合

另外一种解释:
百度百科:https://baike.baidu.com/item/adaboost/4531273#4

  1. 先通过对N个训练样本的学习得到第一个弱分类器;
  2. 将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器 ;
  3. 将1和2都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器;
  4. 最终经过提升的强分类器。即某个数据被分为哪一类要由各分类器权值决定。

(个人:用大量的难以正确分类的样本给一个弱学习器,会产生什么样的结果,给一个强学习器会产生什么结果,可以试一下。用最正常的样本加上难以正确分类的样本,是不是就能够达到小样本高精度的效果,试一下试一下,要注意筛选掉无论如何都测不对的问题样本
(对强学习器尝试了一下,可以起到用少样本较高精度的作用。方法是,开始用很少的训练数据,把每次测试错误的样本都加入到训练数据中,经过对不同样本的测试,构建起训练集。该训练集能起到少样本较高精度的作用。问题在于该训练集的构成,需要大量的样本。而且比起直接用大量的样本作为训练数据来说,虽然速度运行快了很多,但是精度还是有少量的下降)

  • Bagging:给定包含m个样本的数据集,对这个数据集进行可重复地抽取m个样本组成新的数据集。依此,可以抽取出若干个新的数据集,然后用每一个数据集训练出一个基学习器,最后将各个基学习器的分类结果进行简单投票。(该方法不适用于稳定学习器,想kNN,SVM等。对于稳定学习器,直接把所有数据当训练样本是更合适的。对于不稳定学习器,像神经网络等,可能会有小幅度提升)

  • 随机森林(Random Forest, RF):RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。传统决策树在选择划分属性时是在当前结点的属性集合中选择一个最优属性。而在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。

  • 平均法与加权平均法:当个体学习器的性能(主要指精度)相差不大时,宜采用平均法;相差较大时,宜采用加权平均法。(深表赞同)

  • 置信度与类概率:不同类型的类概率不能混用,不能直接进行比较,应该输出标签后,进行投票处理。对一些能在预测出类别标记的同时产生分类置信度的学习器,其分类置信度可转化为类概率使用。虽然分类器估计的类概率一般都不太准确,但是基于类概率进行结合却往往比直接基于类标记进行结合性能更好。(已经完成了kNN,SVM的类概率输出,希望再继续完成ELM的概率输出)(嘿,也完成了,隔时空击掌。对概率归一化后,不同学习器的概率可以累加使用)

  • Stacking:先从初始数据集训练出一个初级学习器,然后”生成“一个新数据集用于训练次级学习器。在这个新的数据集中,初级学习器的输出被当作样例输入特征,而初始样本的标记仍被当作样例标记。有研究表明,将初级学习器的输出概率作为次级学习器的输入属性,用多响应线性回归作为次级学习算法效果较好。(拿概率作为特征,试了一下,反而精度低了。使用的时候,在训练数据里做一个十折,输出概率训练样本)

  • 学习器多样性的度量:考虑个体学习器两两相似/不相似性。例:两个个体学习器的精度相差不大,此时,两个学习器分类正确的样本有越多的不同,多样性就越大;两个学习器分类错误的样本有越多的不同,多样性也越大。(可以编写一个测试多样性的程序,要求以两个学习器的精度,预测标签,实际标签为输入,以多样性的值K为输出,多样值函数有两项构成:第一项,两个学习器的精度相差越多精度K值越小;第二项,两个学习器分类正确的样本有越多的不同,K值越大)(关键在于怎么比较多个学习器之间的差异性)(组件的学习器各自关注一类重要的特征,再进行集成,会不会差异性好一些?比起之间把所有特征放一起,会怎么样)

  • 稳定学习器与不稳定学习器:对样本扰动敏感的学习器是不稳定学习器,例如:神经网络,决策树;对样本扰动不敏感的学习器是稳定学习器,例如:LDA,SVM,朴素贝叶斯,kNN。

后续:
SVM和ELM是挺好的强学习器,样本饱和量低,精度高,速度快。kNN样本饱和量大,饱和后精度也很可观,但是速度奇慢,而且不能建立提前的模型。LDA和RF训练样本饱和量大,精度不低,所需时间也不短。(精度仅针对我这批分类数据,时间应该是通用的)
(以上的时间描述不太准确。对于维度低,数据量小的数据,kNN的速度是超过SVM的)
(之前一直觉得kNN有些笨,要把所有的距离都判断一遍,才能知道哪个是最近的,人就能很快找到。现在想清楚了,人在走迷宫中时,也是一样,运气差就需要把所有的路都走一遍才能出去。如果人的视野在空中,可以看到迷宫的全貌,就能一下找到最优路径。所以关键问题在于维度不够,kNN不能迅速找到最近,因为它缺少一个空中视野,一个关键维度。通过这个关键维度,可以很快知道哪个最近,哪个次最近等。人是怎么判断最近的呢?以目标为中心,视野开始扩大,搜寻到的第一个就是最近的。如果在程序中,怎么判断扩大的视野圆已经接触到第一个点呢?)

集成如果不使用kNN,整个训练模型都可以提前构造,在实际应用中,训练的时间就是加载模型的时间,还是很快的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值