随机森林
随机森林
随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。
Bagging
Bagging是一种集成学习思想,他的集合策略也比较简单:对于分类问题,通常使用简单投票法,得到票数最多的类别为最终的输出。由于Bagging算法每次都进行采样来训练模型,因此泛化能力很强,对于降低模型的方差很有作用。
随机森林的名称中有两个关键词,一个是“随机”,一个就是“森林”。
森林顾名思义是由多颗树组成,每棵(决策)树都是一个分类器,每一棵决策树之间是没有关联的。对于一个输入样本,K棵树会有K个分类的结果。随机森林集成了所有的分类结果,并将投票结果最多的类别指定为最终的输出。随机森林本身的主要思想在于随机性,通过随机性,提高模型的泛化能力,主要体现在以下三个方面:
- 对训练样本的随机采样
- 对属性的随机采样
- 基于随机采样的属性的决策树构造
随机森林的构造过程:
- 如果训练集大小为N,对于每棵树而言,随机且有放回地从训练集中抽取N个训练样本(bootstrap抽样方法),作为该树的训练集;每棵树的训练集都是不同的,但里面包含重复的训练样本
- 如果每个样本的特征维度为M,指定一个常数m,m<<M,随机地从M个特征中选取m个特征子集,每次树进行分裂时,从这m个特征中选择最优的;
- 每棵树都尽可能最大程度地生长,并且没有剪枝过程。
- 按照步骤1~3建立大量的决策树,这样就构成了随机森林了。
以鸢尾花为例的代码实现:
# 导入数据并划分 from sklearn import datasets from sklearn.model_selection import train_test_split iris = datasets.load_iris() X = iris.data Y = iris.target x_train,x_test,y_train,y_test = train_test_split(X,Y,test_size=0.3,random_state=0) from sklearn.ensemble import RandomForestClassifier # 训练随机森林模型 RFC = RandomForestClassifier(n_estimators=100,bootstrap='true',random_state=0,max_depth=4) RFC.fit(x_train,y_train) # 预测 RFC_pred = RFC.predict(x_test) #对模型进行评估 from sklearn import metrics RFC_accuracy = metrics.accuracy_score(y_test,RFC_pred) print('RFC_accuracy 模型综合评估矩阵如下:%.3f'% RFC_accuracy)
'''n_estimators: 代表在预测之前,你想要建立的子树数量。n_estimators过小容易欠拟合,而过大不能显著地提升模型。一般对随机森林的参数调整也都集中在n_estimators上。 bootstrap: 代表是否对样本集进行有放回抽样来构建 random_state:代表随机种子 max_depth:决策树参数,代表决策树的最大深度。如果模型的样本总量多,特征也多,可以限制最大深度;若样本量少或者特征少,则不限制最大深度。'''
随机森林优缺点:
优点:
- 在数据集上表现良好,两个随机性的引入,使得随机森林不容易陷入过拟合
- 在当前的很多数据集上,相对其他算法有着很大的优势,两个随机性的引入,使得随机森林具有很好的抗噪声能力
- 它能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化
- 可生成一个Proximities=(pij)矩阵,用于度量样本之间的相似性: pij=aij/N, aij表示样本i和j出现在随机森林中同一个叶子结点的次数,N随机森林中树的颗数
- 在创建随机森林的时候,对generlization error使用的是无偏估计
- 训练速度快,可以得到变量重要性排序(两种:基于OOB误分率的增加量和基于分裂时的GINI下降量
- 在训练过程中,能够检测到feature间的互相影响
- 容易做成并行化方法
- 实现比较简单
缺点:
- 随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合。
- 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的
思考:为什么要随机抽样训练集?为什么要有放回的抽样?

浙公网安备 33010602011771号