文章目录

随机森林–极限森林–梯度提升树(本章未写):

一:集成算法Ensemble learning

1)Bagging:训练多个学习器取平均

  • 回归取平均,分类则投票表决,颇有三个诸葛亮顶个臭皮匠的感觉

f ( x ) = 1 M ∑ m = 1 M f m ( x ) f(x)= \frac{1}{M}\sum_{m=1}^Mf_m(x) f(x)=M1m=1Mfm(x)

典型为随机森林Bagging+决策树=随机森林

  • 随机:数据采样随机,特征选择随机
  • 森林:很多决策树并行放在一起

2)Boosting:从弱学习器开始加强,通过加权来进行训练

  • Boosting颇像一个不断反省自己哪里做的不好的完美主义者

F m ( x ) = F m − 1 ( x ) + a r g m i n k ∑ i = 1 n L ( y i , F m − 1 ( x i ) + h ( x i ) ) − − 加 入 一 颗 树 , 比 原 来 强 F_m(x)=F_{m-1}(x) + argmin_k\sum_{i=1}^nL(y_i,F_{m-1}(x_i)+h(x_i))\\--加入一颗树,比原来强 Fm(x)=Fm1(x)+argminki=1nL(yi,Fm1(xi)+h(xi))

典型代表AdaBoost,XgBoost

AdaBoost + 决策树 = 提升树

GradientBoost + 决策树 = 梯度提升树

AdaBoost:

3)Stacking:聚合多个分类或回归模型(可以分阶段来做)

  • 分阶段: 第一阶段得出各自结果,第二阶段再用前一阶段结果训练

二:集成模式下的竞争:随机森林–极限森林–梯度提升树

1)大名鼎鼎的随机森林:

单个决策树随机了什么?
  • 样本是随机的:抽取的部分样本
  • 特征是随机的:抽取的部分特征
  • 参数是随机的:我佛系我自豪
  • 模型是随机的:ID3,C4.5我随机选
怎么构建?
  1. 从原始训练集随机有放回采样N个样本,M个特征,进行K次采样,得到K个随机模型。
  2. 训练其K个模型,每次分裂时根据信息增益/信息增益比/基尼指数选择最好的特征进行分裂,无剪枝操作。
  3. 生成的K棵树组成森林,回归取均值,分类则选举。
随机森林得优势:
  • 能够处理高纬度数据,特征多,并且不用做特征选择

  • 在训练完后,它能够给出哪些feature比较重要

    当破坏掉某个特征时,错误率显著上升会给感受到特征得重要性,随机森林随机采样特征可以做到。

  • 容易做成并行化方法,速度快

  • 可以进行可视化展示,便于分析

2)不极限的极限森林:

机器学习系列(三)决策树的集成算法--随机森林与极限森林--三个臭皮匠与完美主义者的较量-LMLPHP

单个决策树随机了什么?
  • 样本我不随机:抽取全部样本
  • 特征是随机的:抽取的部分特征
  • 参数是随机的:我佛系我自豪
  • 模型是随机的:ID3,C4.5我随机选
  • 分裂是随机的:相比random forest的贪婪,我佛系之后的效果可能更好
极限树与随机森林的主要区别:
  • RandomForest应用的是Bagging模型样本有随机,ExtraTree使用的所有的样本,只是特征是随机选取的,

  • 因为分裂是随机的,所以在某种程度上比随机森林得到的结果更加好;

三:附录Scikit-learn的randomForest和ExtraTrees的参数说明:

RandomForestClassifier参数列表:

  • n_estimators–n估计量: Int,默认值=100

    森林中树木的数量。*在0.22版中更改:*的默认值n_estimators0.22从10变到100。

  • criterion–标准: {“基尼”、“熵”},默认=“基尼”

    测量分割质量的功能。支持的准则是吉尼杂质的“基尼”和信息增益的“熵”。注意:这个参数是树特有的.

  • max_depth–最大深度: INT,默认值=无

    树的最大深度。如果没有,那么节点会被展开,直到所有的叶子都是纯的,或者直到所有的叶子包含的样本少于min_SAMSACTS_Spl

  • min_samples_split–最小样本分裂: 整数或浮点数,默认值=2

    拆分内部节点所需的最小样本数:如果int,那么考虑min_samples_split作为最小数目。如果浮动,那么min_samples_split是一个分数ceil(min_samples_split * n_samples)是每次分割的最小样本数。*在0.18版中更改:*添加分数的浮点值。

  • min_samples_leaf–最小样本叶: 整数或浮点数,默认值=1

    一个叶节点所需的最小样本数。任何深度的分裂点只有在它离开的时候才会被考虑。min_samples_leaf每个左、右分支的训练样本。这可能会使模型平滑,特别是在回归过程中。如果int,那么考虑min_samples_leaf作为最小数目。如果浮动,那么min_samples_leaf是一个分数ceil(min_samples_leaf * n_samples)每个节点的最小样本数。*在0.18版中更改:*添加分数的浮点值。

  • min_weight_fraction_leaf–最小重量分数叶: 浮点数,默认值为0.0

    (所有输入样本的)权重之和的最小加权分数,需要在一个叶节点上。当不提供样品重量时,样品具有相同的重量。

  • max_features–最多选取特征数: {“自动”、“sqrt”、“log 2”}、int或Float,默认值=“AUTO”

    在寻找最佳分割时要考虑的功能数量:如果int,那么考虑max_features每次分裂都有特征。如果浮动,那么max_features是一个分数int(max_features * n_features)特征在每次分割时都会考虑。如果“自动”,那么max_features=sqrt(n_features).如果“sqrt”,那么max_features=sqrt(n_features)(与“自动”相同)。如果“log 2”,则max_features=log2(n_features).如果没有,那么max_features=n_features.注意:除非找到节点样本的至少一个有效分区,否则对拆分的搜索不会停止,即使它需要有效地检查max_features特征。

  • max_leaf_nodes–最大叶节点: INT,默认值=无

    种树max_leaf_nodes以最好的方式。最佳节点被定义为杂质的相对减少。如果没有,那么叶节的数量是无限的。

  • min_impurity_decrease–最小杂质减少: 浮点数,默认值为0.0

    如果这种拆分导致大于或等于此值的杂质减少,则节点将被拆分。加权杂质减少方程如下:N_t / N * (impurity - N_t_R / N_t * right_impurity - N_t_L / N_t * left_impurity)哪里N是样本的总数,N_t是当前节点上的样本数,N_t_L是左子中的样本数,以及N_t_R是正确的孩子中的样本数。N, N_t, N_t_RN_t_L都引用加权和,如果sample_weight都通过了。新版本0.19。

  • min_impurity_split–最小杂质分裂: 浮动,默认=无

    树木生长早期停止的阈值。如果一个节点的杂质超过阈值,它就会分裂,否则它就是一片叶子。自0.19版以来已不再推荐:min_impurity_split已经被反对赞成min_impurity_decrease在0.19。的默认值min_impurity_split在0.23中从1e-7变为0,在0.25中将被移除。使用min_impurity_decrease相反。

  • **bootstrap–引导:**Bool,默认值=True

    创建树时是否使用引导示例。如果为false,则使用整个数据集构建每个树。

  • **oob_scoreOOB评分:**Bool,默认值=false

    是否使用包外样本来估计泛化精度.

  • n_jobs–并行度: INT,默认值=无

    并行运行的作业数。fit, predict, decision_pathapply都是平行的。None指1,除非在joblib.parallel_backend背景。-1意味着使用所有处理器。看见术语表更多细节。

  • random_state–随机状态: INT或RandomState,默认值=无

    控制在构建树时使用的样本引导的随机性(如果bootstrap=True)以及在每个节点上寻找最佳拆分时要考虑的特性的抽样(如果max_features < n_features)。看见术语表关于细节。

  • verbose–控制构建数过程的冗长度: Int,默认值=0

    在拟合和预测时控制详细。

  • warm_start–暖启动: Bool,默认值=false

    当设置为True,重用以前调用的解决方案来拟合,并在集合中添加更多的估计器,否则,只需适应一个全新的林。看见词汇.

  • class_weight–类别权重: {“平衡”、“平衡子样本”}、dict或dicts列表,默认值=无

    与表单中的类关联的权重{class_label: weight}。如果不给,所有的课程都应该有一个重量。对于多输出问题,可以提供与y列相同的DECTS列表。注意,对于多输出(包括多标签),应该为每个列的每个类定义其自己的DECT中的权重。例如,对于四类多标签分类权重应该是[{0:1,1:1},{0:1,1:5},{0:1,1:1},{0:1,1:1}],而不是[{1:1},{2:5},{3:1},{4:1}]。“平衡”模式使用y的值自动调整权重,与输入数据中的类频率成反比,如下所示n_samples / (n_classes * np.bincount(y))“Balance_subSample”模式与“Balance”模式相同,只是根据每棵树的引导样本计算权重。对于多输出,y的每一列的权重将乘以.请注意,如果指定了SAMPLE_WART,这些权重将与SAMPLE_WART(通过FIT方法传递)相乘

  • ccp_alpha–CCPα: 非负浮点数,默认值为0.0

    复杂度参数用于最小成本-复杂度剪枝。具有最大成本复杂度的子树,该子树小于ccp_alpha将被选中。默认情况下,不执行剪枝。看见最小成本-复杂度剪枝关于细节。新版本0.22。

  • max_samples–最大样本数: INT或Float,默认值=无

    如果引导为真,则从X中抽取样本数来训练每个基估计器。如果无(默认),则绘制X.shape[0]样本。如果int,则绘制max_samples样本。如果浮动,然后画max_samples * X.shape[0]样本。因此,max_samples应该在间隔内(0, 1).

ExtraForestClassifier参数列表:

09-01 10:07