集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类系统(multi-classifier system)、基于委员会的学习(committee-based learning)等。
个体学习器通常由一个现有的学习算法从训练数据产生,比如决策树算法、BP神经网络算法等。个体学习器一般不称为基学习器,常称为“组件学习器”(component learner)或直接称为个体学习器。
Boosting是一族可将弱学习器提升为强学习器的算法。这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合。
Bagging(Bootstrap AGGregatING)是并行式集成学习方法最著名的的代表,它直接基于自助采样法,给定包含m个样本的数据集,先随机取出一个样本放入采样集中,再把该样本放回初始数据集使得下次采样时该数据仍然有可能被采样,这样,经过m次随机采样操作,得到含m个样本的采样集,初始样本集中有的样本在采样集多次出现,有的从未出现。照这样,我们科采样出T个含有m个训练样本的采样集,然后基于每个采样集训练一个基学习器,再将这个基学习器结合。
注:上述弱学习器常指泛化性能略优于随机猜测的学习器,例如在二分类问题中精度略高于50%的分类器。反之,强学习器则是泛化性能比较好的学习器。
四、结合策略(平均法,投票法和学习法)
随机森林(Random Forest,简称RF)是Bagging 的一个扩展变体。RF在以决策树为基学习器构建的Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。具体来说,传统决策树在选择划分属性时是在当前借点的属性集合(假设有d个属性)中选择一个最优属性;而在RF中,对基决策树的每一个节点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集选择一个最优属性用于划分。
随机森林可以用来解决由于单棵决策树会产生的过拟合问题,随机森林是一种多功能的机器学习算法,能够执行回归和分类任务。同时,它也是一种数据降维手段,用于处理缺失值、异常值以及其他数据探索中的一些问题。
随机森林的每一棵树都会给出自己的分类选择,并由此进行“投票”,森林整体的输出结果将会是票数最多的分类选项;
而在回归问题中,随机森林的输出将会是所有决策树输出的平均值,随机森林的随机主要体现在生成树过程的随机性,针对数据集随机采样,根据采样数据集随机选属性生成树,最后组合成森林。
可以作为一种数据降维手段,能较好的处理缺失值,异常以及其他数据探索中遇到的问题。
优点:
随机森林不但能解决单棵决策树产生的过拟合问题,同时它也是一种数据降维手段,能较好的处理缺失值,异常以及其他数据探索中的问题。
缺点:
1.随机森林在解决回归问题时并没有像它在处理分类问题时表现的性能优异,这是因为它不能给出一个连续性的输出。当进行回归时,随机森林不能够作出超越数据范围的预测,这可能导致在对还有特定噪声的数据进行建模时出现过度拟合。
2.对于许多统计建模者来说,随机森林给人的感觉像是在一个黑盒子--你几乎无法控制模型内部运行,只能在不同的参数和随机种子之间进行尝试。
import panadas as semble import RandomForestClassifierdataad_excel('sale.xlsx')select_var=~lumns.isin(["prod_name"])pre_X=data.ix[:,select_var]pre_Y=data.FLAG.valuesmodel=RandomForestClassfiler(n_estimators=50,criterion='gini',max_features='sqrt',min_samples_leaf=1,n_jobs=4,)model.fit(pre_X,pre_Y)print(model.feature_importances_)for each in zip(lunms,model.feature_importance_):print(each)
1.n_estimators=10:决策树的个数,越多越好,但是性能就会越差,至少达到100左右,可以达到可接受的性能和误差率。
2.bootstrap=True:是否有放回的采样。
4.n_jobs=1:并行job个数。这个在ensemble中非常重要,尤其是bagging,因为可以并行而提高性能。1=不并行;n:n个并行;-1:CPUYOUDUOS有多少个CORE,就启动多少个job。
5.warm_start=False:热启动,决定是否使用上次调用该类的结果然后增加新的。
6.class_weight=None:各个lable的权重
1.predict_proba(x):给出带有概率值的结果.每个点所有的label的概率和为1.
2.predict(x):直接给出预测结果。内部还是调用的predict_proba(),根据概率的结果看哪个类型的预测值最高就是哪个类型。
3.predict_log_proba(x):和predict_proba基本上一样,只是把结果给做了log()处理。
本文发布于:2024-02-01 17:02:30,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170677814938130.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |