随机森林

随机森林

  随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(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:决策树参数,代表决策树的最大深度。如果模型的样本总量多,特征也多,可以限制最大深度;若样本量少或者特征少,则不限制最大深度。'''

随机森林优缺点:

优点:

  1. 在数据集上表现良好,两个随机性的引入,使得随机森林不容易陷入过拟合
  2. 在当前的很多数据集上,相对其他算法有着很大的优势,两个随机性的引入,使得随机森林具有很好的抗噪声能力
  3. 它能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化
  4. 可生成一个Proximities=(pij)矩阵,用于度量样本之间的相似性: pij=aij/N, aij表示样本i和j出现在随机森林中同一个叶子结点的次数,N随机森林中树的颗数
  5. 在创建随机森林的时候,对generlization error使用的是无偏估计
  6. 训练速度快,可以得到变量重要性排序(两种:基于OOB误分率的增加量和基于分裂时的GINI下降量
  7. 在训练过程中,能够检测到feature间的互相影响
  8. 容易做成并行化方法
  9. 实现比较简单

缺点:

  1. 随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合。
  2. 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的

思考:为什么要随机抽样训练集?为什么要有放回的抽样?

posted @ 2022-03-21 17:19  hungry_J  阅读(21)  评论(0)    收藏  举报