一、集成学习概念
集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类系统(multi-classifier system)、基于委员会的学习(committee-based learning)等。
二、个体学习器概念
个体学习器通常由一个现有的学习算法从训练数据产生,比如决策树算法、BP神经网络算法等。个体学习器一般不称为基学习器,常称为“组件学习器”(component learner)或直接称为个体学习器。
三、boosting bagging
Boosting是一族可将弱学习器提升为强学习器的算法。这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合。
Bagging(Bootstrap AGGregatING)是并行式集成学习方法最著名的的代表,它直接基于自助采样法,给定包含m个样本的数据集,先随机取出一个样本放入采样集中,再把该样本放回初始数据集使得下次采样时该数据仍然有可能被采样,这样,经过m次随机采样操作,得到含m个样本的采样集,初始样本集中有的样本在采样集多次出现,有的从未出现。照这样,我们科采样出T个含有m个训练样本的采样集,然后基于每个采样集训练一个基学习器,再将这个基学习器结合。
注:上述弱学习器常指泛化性能略优于随机猜测的学习器,例如在二分类问题中精度略高于50%的分类器。反之,强学习器则是泛化性能比较好的学习器。
四、结合策略(平均法,投票法和学习法)
- 平均法
- 简单平均法
- 加权平均法
- 投票法
- 绝对多数投票法
- 相对多数投票法
- 加权投票法
- 学习法
五、随机森林思想
随机森林(Random Forest,简称RF)是Bagging 的一个扩展变体。RF在以决策树为基学习器构建的Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。具体来说,传统决策树在选择划分属性时是在当前借点的属性集合(假设有d个属性)中选择一个最优属性;而在RF中,对基决策树的每一个节点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集选择一个最优属性用于划分。
随机森林可以用来解决由于单棵决策树会产生的过拟合问题,随机森林是一种多功能的机器学习算法,能够执行回归和分类任务。同时,它也是一种数据降维手段,用于处理缺失值、异常值以及其他数据探索中的一些问题。
随机森林的每一棵树都会给出自己的分类选择,并由此进行“投票”,森林整体的输出结果将会是票数最多的分类选项;
而在回归问题中,随机森林的输出将会是所有决策树输出的平均值,随机森林的随机主要体现在生成树过程的随机性,针对数据集随机采样,根据采样数据集随机选属性生成树,最后组合成森林。
六、随机森林的推广
可以作为一种数据降维手段,能较好的处理缺失值,异常以及其他数据探索中遇到的问题。
七、优缺点
优点:
随机森林不但能解决单棵决策树产生的过拟合问题,同时它也是一种数据降维手段,能较好的处理缺失值,异常以及其他数据探索中的问题。
缺点:
1.随机森林在解决回归问题时并没有像它在处理分类问题时表现的性能优异,这是因为它不能给出一个连续性的输出。当进行回归时,随机森林不能够作出超越数据范围的预测,这可能导致在对还有特定噪声的数据进行建模时出现过度拟合。
2.对于许多统计建模者来说,随机森林给人的感觉像是在一个黑盒子--你几乎无法控制模型内部运行,只能在不同的参数和随机种子之间进行尝试。
八、sklearn参数
- 随机森林Python实现:
import panadas as pd
from sklearn.ensemble import RandomForestClassifier
data=pd.read_excel('sale.xlsx')
select_var=~data.columns.isin(["prod_name"])
pre_X=data.ix[:,select_var]
pre_Y=data.FLAG.values
model=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(pre_X.colunms,model.feature_importance_):
print(each)
-
sklearn中随机森林的参数
- 决策树的参数
- criterion:“gini” or "entropy"(default="gini")是计算属性的gini(基尼不纯度)还是entropy(信息增益),来选择最合适的节点。
- splitter:"best" or "random"(deflaut="best")随机选择属性还是选择不纯度最大的属性,建议用默认
- max_feature:选择最适合属性划分的特征不能超过此值。当为整数时,即最大特征数;当为小数时,训练集特征数×小数。
- max_depth:(default=None)设置树的最大深度,默认为None,这样建树时会使每一个叶节点只有一个类别,或者是达到min_samples_split。
- min_sample_split:根据属性划分节点时每个划分最小的样本数
- min_samples_leaf:叶子节点最小的样本数
- min_leaf_nodes:(default=None)叶子树的最大样本数。
- min_weight_fraction_leaf:()default=0)叶子节点所需要的最小权值
- verbose:(default=0)是否显示任务进程
- 二、随机森林特有的参数:
1.n_estimators=10:决策树的个数,越多越好,但是性能就会越差,至少达到100左右,可以达到可接受的性能和误差率。
2.bootstrap=True:是否有放回的采样。
3.oob_score=False:oob(out of band ,带外)数据,即:在某次决策树训练中没有被bootstrap选中的数据。
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()处理。