随机森林概念:
随机森林(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))