随机森林概念:

随机森林(Random Forest,简称RF)是Bagging的一个扩展变体。RF在以决策树为基学习器构建 Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。

                                                  Bagging+决策树 = RF 

具体来说,传统决策树在选择划分属性时是在当前结点的属性集合(假定有d个属性)中选择一个最优属性。

而在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数k控制了随机性的引入程度:若令k=d,则基决策树的构建与传统决策树相同;若令k=1,则是随机选择一个属性用于划分。每棵树任其生长,不进行剪枝

对于随机森林的理解:

将若干个弱分类器的分类结果进行投票选择,从而组成一个强分类器,这就是随机森林bagging的思想。

随机森林中有许多的分类树。我们要将一个输入样本进行分类,我们需要将输入样本输入到每棵树中进行分类。

影响RF分类性能的主要因素:

森林中单颗树的分类强度 (Strength):每颗树的分类强度越大,则随机森林的分类性能越好。

森林中树之间的相关度 (Correlation):树之间的相关度越大,则随机森林的分类性能越差。

随机森林的构建方法总结:

1. 从原始样本集m个样本中使用bootstrap (有放回的随机抽样)采样法选出m个样本;

2. 从所有n个属性中随机选择K个属性 (若k=n则基决策树的构建与传统的决策树相同,若K=1则是选择一个属性用于划分),一般令k的值为log2n;

3. 选择最佳分割属性 (ID3, C4.5, CART)作为节点创建决策树;

4. 每颗决策树都进行最大程度地生长,且不进行剪枝;

5. 重复以上4步S次, 建立S颗决策树,即形成随机森林;

6. 在分类问题中通过多数投票法决定输出属于哪一分类;在回归问题中输出所有决策树输出的平均值。

随机森林的优缺点:

优点:

在当前所有算法中,具有极好的准确率。

训练可以高度并行化,能够有效地运行在大数据集上,提高运行速率。

能够处理具有高维特征的输入样本,而且不需要降维。 能够评估各个特征在分类问题上的重要性 (特征选择中,Sklearn 为我们提供了很好的工具)。

对部分特征的缺失不敏感。

由于采用有放回随机抽样,训练出来的模型方差小,泛化能力强。

缺点:

取值比较多的特征对RF的决策会产生更大的影响,有可能影响模型的效果。

Bagging改进了预测的准确率,但损失了解释性。

在某些噪音比较大的特征上,RF模型还是容易陷入过拟合。

代码实现:

from sklearn.ensemble import RandomForestClassifier

X = np.array([1,2,3,4,5,6,7,8,9,10])
y = [-1,-1,-1,1,1,1,1,-1,-1,-1,]

rf = RandomForestClassifier(n_estimators=10,max_depth=1)
#                            决策树的数量       每颗树的深度
rf.fit(X.reshape(-1,1),y)
print(rf.score(X.reshape(-1,1),y))