sklearn.ensemble.RandomForestClassifier 随机深林参数详解

时间:2020-09-01
本文章向大家介绍sklearn.ensemble.RandomForestClassifier 随机深林参数详解,主要包括sklearn.ensemble.RandomForestClassifier 随机深林参数详解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

随机森林是一种元估计量,它适合数据集各个子样本上的许多决策树分类器,并使用平均数来提高预测准确性和控制过度拟合。子样本大小由max_samples参数bootstrap=True (default)控制,否则整个数据集用于构建每棵树

随机森林优势

  1. 随机森林算法几乎不需要输入的准备。它们不需要测算就能够处理二分特征、分类特征、数值特征的数据。随机森林算法能完成隐含特征的选择,并且提供一个很好的特征重要度的选择指标。
  2. 随机森林算法训练速度快。性能优化过程刚好又提高了模型的准确性,这种精彩表现并不常有,反之亦然。这种旨在多样化子树的子设定随机特征,同时也是一种突出的性能优化!调低给定任意节点的特征划分,能让你简单的处理带有上千属性的数据集。(如果数据集有很多行的话,这种方法同样的也可以适用于行采样)
  3. 随机森林算法很难被打败。针对任何给定的数据集,尽管你常能找到一个优于它的模型(比较典型的是神经网络或者一些增益算法 boosting algorithm),但这类算法肯定不多,而且通常建这样的模型并调试好要比随机森林算法模型要耗时的更多。这也是为何随机森林算法作为基准模型表现出色的原因。
  4. 建立一个差劲的随机森林模型真的很难!因为随机森林算法对指定使用的超参数(hyper-parameters )并不十分敏感。为了要得到一个合适的模型,它们不需要做很多调整。只需使用大量的树,模型就不会产生很多偏差。大多数的随机森林算法的实现方法的参数设置初始值也都是合理的。
  5. 通用性。随机森林算法可以应用于很多类别的模型任务。它们可以很好的处理回归问题,也能对分类问题应付自如(甚至可以产生合适的标准概率值)。虽然我从没亲自尝试,但它们还可以用于聚类 分析问题。

Extra trees,Extremely Randomized Trees,指极度随机树,和随机森林区别是:
1、随机森林应用的是Bagging模型,而ET是使用所有的训练样本得到每棵决策树,也就是每棵决策树应用的是相同的全部训练样本
2、随机森林是在一个随机子集内得到最佳分叉属性,而ET是完全随机的得到分叉值,从而实现对决策树进行分叉的。
训练随机森林时,建议使用cross_validated(交叉验证),把数据n等份,每次取其中一份当验证集,其余数据训练随机森林,并用于预测测试集。最终得到n个结果,并平均得到最终结果

class sklearn.ensemble.RandomForestClassifier(n_estimators=100, *, 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=None, random_state=None, verbose=0,
warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None)

参数详解:

  1. n_estimators:森林中决策树的数量。默认100
  2. criterion:分裂节点所用的标准,可选“gini”, “entropy”,默认“gini”。
  3. max_depth:树的最大深度。如果为None,则将节点展开,直到所有叶子都是纯净的(只有一个类),或者直到所有叶子都包含少于min_samples_split个样本。默认是None。
  4. min_samples_split:拆分内部节点所需的最少样本数:如果为int,则将min_samples_split视为最小值。如果为float,则min_samples_split是一个分数,而ceil(min_samples_split * n_samples)是每个拆分的最小样本数。默认是2。
  5. min_samples_leaf:在叶节点处需要的最小样本数。仅在任何深度的分割点在左分支和右分支中的每个分支上至少留下min_samples_leaf个训练样本时,才考虑。这可能具有平滑模型的效果,尤其是在回归中。如果为int,则将min_samples_leaf视为最小值。如果为float,则min_samples_leaf是分数,而ceil(min_samples_leaf * n_samples)是每个节点的最小样本数。默认是1。
  6. min_weight_fraction_leaf:在所有叶节点处(所有输入样本)的权重总和中的最小加权分数。如果未提供sample_weight,则样本的权重相等。
  7. max_features:寻找最佳分割时要考虑的特征数量:如果为int,则在每个拆分中考虑max_features个特征。如果为float,则max_features是一个分数,并在每次拆分时考虑int(max_features * n_features)个特征。如果为“auto”,则max_features = sqrt(n_features)。如果为“ sqrt”,则max_features = sqrt(n_features)。如果为“ log2”,则max_features = log2(n_features)。如果为None,则max_features = n_features。注意:在找到至少一个有效的节点样本分区之前,分割的搜索不会停止,即使它需要有效检查多个max_features功能也是如此。
  8. max_leaf_nodes:最大叶子节点数,整数,默认为None
  9. min_impurity_decrease:如果分裂指标的减少量大于该值,则进行分裂。
  10. min_impurity_split:决策树生长的最小纯净度。默认是0。自版本0.19起不推荐使用:不推荐使用min_impurity_split,而建议使用0.19中的min_impurity_decrease。min_impurity_split的默认值在0.23中已从1e-7更改为0,并将在0.25中删除。
  11. bootstrap:是否进行bootstrap操作,bool。默认True。如果bootstrap==True,将每次有放回地随机选取样本,只有在extra-trees中,bootstrap=False
  12. oob_score:是否使用袋外样本来估计泛化精度。默认False。
  13. n_jobs:并行计算数。默认是None。
  14. random_state:控制bootstrap的随机性以及选择样本的随机性。
  15. verbose:在拟合和预测时控制详细程度。默认是0。
  16. warm_start:不常用
  17. class_weight:每个类的权重,可以用字典的形式传入{class_label: weight}。如果选择了“balanced”,则输入的权重为n_samples / (n_classes * np.bincount(y))。
  18. ccp_alpha:将选择成本复杂度最大且小于ccp_alpha的子树。默认情况下,不执行修剪。
  19. max_samples:如果bootstrap为True,则从X抽取以训练每个基本分类器的样本数。如果为None(默认),则抽取X.shape [0]样本。如果为int,则抽取max_samples样本。如果为float,则抽取max_samples * X.shape [0]个样本。因此,max_samples应该在(0,1)中。是0.22版中的新功能。

 最主要的两个参数是n_estimators和max_features,n_estimators理论上是越大越好,但是计算时间也相应增长。所以,并不是取得越大就会越好,预测效果最好的将会出现在合理的树个数;max_features每个决策树在随机选择的这max_features特征里找到某个“最佳”特征,使得模型在该特征的某个值上分裂之后得到的收益最大化。max_features越少,方差就会减少,但同时偏差就会增加。如果是回归问题,则max_features=n_features,如果是分类问题,则max_features=sqrt(n_features),其中,n_features 是输入特征数

属性:

base_estimator_:使用的基本分类器
estimators_:子分类器的集合。
classes_:类标签(单输出问题)或类标签数组的列表(多输出问题)。
n_classes_:类数(用于单输出问题),或包含每个输出的类数的列表(用于多输出问题)。
n_features_:执行拟合(fit)时的特征数量。
n_outputs_:执行拟合 (fit) 时的输出数量。
oob_score_:使用袋外估计获得的训练数据集的分数。仅当oob_score为True时,此属性才存在。
oob_decision_function_:使用训练集上的实际估计值计算的决策函数。如果n_estimators小,则有可能在引导过程中从未遗漏任何数据点。在这种情况下,oob_decision_function_可能包含NaN。仅当oob_score为True时,此属性才存在。

方法:

apply(X)将森林中的树木应用于X,返回叶子索引。
decision_path(X)返回林中的决策路径。
fit(X,y [,sample_weight])根据训练集(X,y)建立一个森林树木。
get_params([深])获取此估计量的参数。
predict(X)预测X的类。
predict_log_proba(X)预测X的类对数概率。
predict_proba(X)预测X的类概率。
score(X,y [,sample_weight])返回给定测试数据和标签上的平均准确度。
set_params(**参数)设置此估算器的参数。

fit(x,y)时,x需要是数组或者是系数矩阵

原文地址:https://www.cnblogs.com/cgmcoding/p/13597389.html