目录
一、实验内容
二、实验过程
1、算法思想
2、算法原理
3、算法分析
三、源程序代码
四、运行结果及分析
五、实验总结
随机森林是专为决策树分类器设计的集成方式,是装袋法的一种拓展。
随机森林与装袋法采用相同的样本抽取方式。装袋法中的决策树每次从所有属性中选取一个最优的属性作为其分支属性。
而随机森林算法每次从所有属性中随机抽取F个属性,然后从这F个属性中选取一个最优的属性作为其分支属性,从而使模型的泛化能力更强。
随机森林指的是利用多棵决策树对样本进行训练并预测的一种分类器。随机森林的基本单元是决策树,每棵决策树都是一个分类器,多个决策树以随机的方式建立起的森林就是随机森林。
对于一个输入样本,N棵树会有N个分类结果,而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出。
(1)对于一个样本容量为N的样本,我们做有放回的抽取N次,每次抽取1个样本,那么最终就形成了N个样本。用这N个样本训练,得到一个决策树,这一个决策树就作为决策树根节点处的样本。
(2)当每个样本有M个属性时,在决策树的每个节点需要分裂时,随机从这M个属性中选取出m个属性,满足条件m << M。然后从这m个属性中采用某种策略(比如说信息增益)来选择1个属性作为该节点的分裂属性。
(3)重复步骤(2),持续分裂属性到无法再继续分裂为止,也就是说到达了叶子节点。注意整个决策树形成过程中没有进行剪枝。
(4)按照步骤1~3建立大量的决策树,这样就构成了随机森林了。
from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_blobs
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.tree import DecisionTreeClassifier
from matplotlib import pyplot
X, y = make_blobs(n_samples=1000, n_features=6, centers=50,
random_state=0)
pyplot.scatter(X[:, 0], X[:, 1], c=y)
pyplot.show()
clf = DecisionTreeClassifier(max_depth=None, min_samples_split=2,
random_state=0)
scores = cross_val_score(clf, X, y)
print("DecisionTreeClassifier result:",scores.mean())
clf = RandomForestClassifier(n_estimators=10, max_depth=None,
min_samples_split=2, random_state=0)
scores = cross_val_score(clf, X, y)
print("RandomForestClassifier result:",scores.mean())
clf = ExtraTreesClassifier(n_estimators=10, max_depth=None,
min_samples_split=2, random_state=0)
scores = cross_val_score(clf, X, y)
print("ExtraTreesClassifier result:",scores.mean())
随机森林集成模型中构建树的时候,样本由训练集有放回抽样得到。此外,在构建树的过程中,节点分割时,选择的分割点不是所有属性中的最佳分割点,而是属性的一个随机子集中的最佳分割点。
由于这种随机性,相对于单个非随机树,随机森林的偏离通常会有所增大,但是由于取了平均,其方差也会减小,通常能够补偿偏差的增加,从而产生一个总体上更好的模型。