机器学习-随机森林

简介:

  • 随机森林属于集成算法,“森林”从字面理解是由多颗决策树构成的集合,而且这些子树都是经过充分生产的CART树;“随机”表示构成多颗决策树的数据是随机生成的,生成过程采用的是Booststrap抽样(有放回抽样),算法以多颗决策树投票解决分类或预测问题。

算法优点

  • 在当前所有算法中,具有极好的准确率。
  • 能够有效地运行在大数据集上。
  • 能够处理具有高维特征的输入样本,而且不需要降维。
  • 能够评估各个特征在分类问题上的重要性。
  • 对于缺省值问题也能够获得很好得结果。

建模过程

  • 利用Booststrap抽样,从原始数据集中生成k个数据集,并且每个数据集都含有N个观测和P个自变量。
  • 针对每一个数据集,构造一颗CART决策树,在构建子树的过程中,并没有将所有自变量用作节点字段的选择,而是随机选择P个字段。
  • 让每一颗决策树尽可能充分地生长,使得树4中的每个节点尽可能“纯净”,即随机森林中的每一个子树都不需要剪枝。
  • 针对k棵CART树的随机森林,对分类问题利用投票法,将最高的票类别用于最终的判断结果;对回归问题利用均值法,将其用作预测样本的最终结果。
  • 随机性变现为两方面:每棵树的训练样本是随机的,树中每个节点的分裂字段也是随机选择的,这样就使得随机森林不容易过拟合。

API

  • sklearn.ensemble.RandomForestClassifier(n_estimators=10,criterion=‘gini’,max_depth=None,min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_features=‘auto’,max_leaf_nodes=None,min_impurity_decrease=0.0,min_impurity_split=None,bootstrap=True,oob_score=False,n_jobs=1,random_state=None,verbose=0,warm_start=False,class_weight=None)
  • n_estimators:用于指定随机森林所包含的决策树个数。
  • criterion:用于指定每棵决策树节点的分割字段所使用的度量标准,用于分类的随机森林,默认的是‘gini’;用于回归的随机森林,默认是‘mse’。
  • max_depth:用于指定每棵决策树的最大深度,默认不限制树的生长深度。
  • min_samples_split:用于指定每棵决策树根节点或中间节点能够继续分割的最小样本量,默认为2。
  • min_samples_leaf:用于指定每棵决策树叶节点的最小样本量,默认为1。
  • min_weight_fraction_leaf:用于指定每棵决策树叶节点最小的样本权重,默认为None,表示不考虑叶节点的样本权值。
  • max_features:每棵决策树包含的最多分割字段数,默认为None,表示分割时使用所有的字段。
  • max_leaf_nodes:指定每棵决策树最大的叶节点个数,默认为None,表示对叶节点个数不做任何限制。
  • min_impurity_decrease:指定每棵决策树的节点是否继续分割的最小不纯度值,默认为0。
  • bootstrap:bool类型参数,可放回抽样,默认为True。
  • oob_score:bool类型参数,是否使用包外样本计算泛化误差,默认为False,包外样本是指每次bootstrap抽样时没有被抽中的样本。
  • n_jobs:用于指定计算随机森林的cpu个数,默认为1。
  • random_state:指定随机数生成器的种子,默认为None,表示使用默认的随机数生成器。
  • verbose:用于指定随机森林计算过程中是否输出日志信息,默认为0,不输出。
  • warm_start:bool类型参数,是否基于上一次的训练结果进行本次的运算,默认为False。
  • class_weight:指定因变量中类别之间的权重,默认为None,表示每个类别的权重都相等。

参考源:《从零开始学python数据分析与挖掘》-刘顺祥