随机森林:基于决策树的集成学习算法
要运用集成学习,就需要一个拆分和结合的过程,首先是拆分,将总的输入数据拆分成多份数据,每个数据运用一个单独的模型,然后是结合,集合拆分后建立的各个子模型,得到最终的结果。
具体到策略上,常用的有以下两类
1. Bagging
Bagging是Boostrapping Aggregating的结合体,通过随机抽样的方式将输入数据拆分成独立的N份,针对每一份数据单独建模,示例如下
属于该策略的算法,最典型的就是RandomForset-随机森林算法。在该策略中,拆分成的数据是相互独立的,可以并行执行其建模过程,最后再进行汇总。汇总时每个子模型的权重是相等的。
2. Boosting
区别于Bagging, Boosting的数据集之间是存在依赖关系的,图示如下
属于该策略的算法,典型的有Adaboost和GBDT梯度提升树。在最后汇总时,各个子模型会拥有不同的权重。
对于随机森林而言,其核心的模型是基于CART的决策树,图示如下
具体的过程如下
1.首先基于有放回的随机抽样,抽取出N份独立的数据,因为是有放回的抽样,可以保证抽取的数据集和原始的数据集大小相同;
2.对每一份抽取的数据集构建决策树模型,因为相互独立,所以可以并行;
3.汇总多个模型的结果,对于回归问题,直接计算多个模型的算数平均数即可,对于分类问题,直接选取个数多的分类结果就好;
在scikit-learn中,使用随机森林模型的代码如下
>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.datasets import make_classification
>>> X, y = make_classification(n_samples=1000, n_features=4,n_informative=2, n_redundant=0,random_state=0, shuffle=False)
>>> clf = RandomForestClassifier(max_depth=2, random_state=0)
>>> clf.fit(X, y)
RandomForestClassifier(max_depth=2, random_state=0)
赞 (0)