当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python sklearn RandomForestClassifier用法及代码示例


本文简要介绍python语言中 sklearn.ensemble.RandomForestClassifier 的用法。

用法:

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, 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)

随机森林分类器。

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

在用户指南中阅读更多信息。

参数

n_estimators整数,默认=100

森林中的树数量。

criterion{“gini”, “entropy”},默认=”gini”

测量分割质量的函数。支持的标准是用于基尼杂质的“gini” 和用于信息增益的“entropy”。注意:此参数为tree-specific。

max_depth整数,默认=无

树的最大深度。如果没有,则扩展节点直到所有叶子都是纯的或直到所有叶子包含少于min_samples_split 个样本。

min_samples_splitint 或浮点数,默认=2

拆分内部节点所需的最小样本数:

  • 如果是 int,则将 min_samples_split 视为最小数字。
  • 如果是浮点数,那么 min_samples_split 是一个分数,而 ceil(min_samples_split * n_samples) 是每个拆分的最小样本数。
min_samples_leafint 或浮点数,默认=1

叶节点所需的最小样本数。只有在左右分支中的每个分支中至少留下min_samples_leaf 训练样本时,才会考虑任何深度的分割点。这可能具有平滑模型的效果,尤其是在回归中。

  • 如果是 int,则将 min_samples_leaf 视为最小数字。
  • 如果是浮点数,那么 min_samples_leaf 是分数,而 ceil(min_samples_leaf * n_samples) 是每个节点的最小样本数。
min_weight_fraction_leaf浮点数,默认=0.0

需要在叶节点处的权重总和(所有输入样本的)的最小加权分数。当未提供sample_weight 时,样本具有相同的权重。

max_features{“auto”, “sqrt”, “log2”}, int 或浮点数,默认=”auto”

寻找最佳分割时要考虑的特征数量:

  • 如果是 int,则在每次拆分时考虑 max_features 特征。
  • 如果是浮点数,那么 max_features 是一个分数,并且在每次拆分时都会考虑 round(max_features * n_features) 特征。
  • 如果 “auto”,那么 max_features=sqrt(n_features)
  • 如果“sqrt”,则max_features=sqrt(n_features)(与“auto”相同)。
  • 如果 “log2”,那么 max_features=log2(n_features)
  • 如果没有,那么 max_features=n_features

注意:在找到至少一个节点样本的有效分区之前,对拆分的搜索不会停止,即使它需要有效地检查超过 max_features 的特征。

max_leaf_nodes整数,默认=无

以best-first 方式用max_leaf_nodes 种植树。最佳节点定义为杂质的相对减少。如果 None 则无限数量的叶节点。

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

bootstrap布尔,默认=真

构建树时是否使用引导样本。如果为 False,则使用整个数据集来构建每棵树。

oob_score布尔,默认=假

是否使用out-of-bag 个样本来估计泛化分数。仅当 bootstrap=True 时可用。

n_jobs整数,默认=无

并行运行的作业数量。 fitpredictdecision_pathapply 都在树上并行化。 None 表示 1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。有关更多详细信息,请参阅术语表。

random_stateint、RandomState 实例或无,默认=无

控制构建树时使用的样本引导的随机性(如果 bootstrap=True )和在每个节点寻找最佳分割时要考虑的特征采样(如果 max_features < n_features )。有关详细信息,请参阅词汇表。

verbose整数,默认=0

控制拟合和预测时的详细程度。

warm_start布尔,默认=假

当设置为 True 时,重用上一次调用的解决方案以适应并向集成添加更多估计器,否则,只需适应一个全新的森林。请参阅词汇表。

class_weight{“balanced”, “balanced_subsample”},字典或字典列表,默认=无

{class_label: weight} 形式的类关联的权重。如果没有给出,所有的类都应该有一个权重。对于multi-output 问题,可以按照与 y 的列相同的顺序提供字典列表。

请注意,对于多输出(包括多标签),应为其自己的字典中的每一列的每个类定义权重。例如,对于four-class,多标签分类权重应该是 [{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}] 而不是 [{1:1}, {2:5}, {3:1}, {4:1}]。

“balanced” 模式使用 y 的值自动调整与输入数据中的类频率成反比的权重,如 n_samples / (n_classes * np.bincount(y))

“balanced_subsample” 模式与“balanced” 模式相同,只是权重是根据每棵生长的树的引导样本计算的。

对于multi-output,y 的每一列的权重将相乘。

请注意,如果指定了 sample_weight,这些权重将乘以 sample_weight(通过 fit 方法传递)。

ccp_alpha非负浮点数,默认=0.0

用于最小Cost-Complexity 修剪的复杂度参数。将选择具有最大成本复杂度且小于ccp_alpha 的子树。默认情况下,不进行剪枝。有关详细信息,请参阅最小 Cost-Complexity 修剪。

max_samplesint 或浮点数,默认=无

如果 bootstrap 为 True,则从 X 抽取的样本数以训练每个基本估计器。

  • 如果无(默认),则绘制 X.shape[0] 样本。
  • 如果是 int,则绘制 max_samples 样本。
  • 如果浮点数,则绘制 max_samples * X.shape[0] 样本。因此,max_samples 应该在区间 (0.0, 1.0] 中。

属性

base_estimator_DecisionTreeClassifier

用于创建拟合sub-estimators 集合的子估计器模板。

estimators_DecisionTreeClassifier列表

拟合sub-estimators 的集合。

classes_ndarray 形状 (n_classes,) 或此类数组的列表

类标签(单输出问题)或类标签数组列表(multi-output 问题)。

n_classes_int 或列表

类数(单输出问题),或包含每个输出的类数的列表(multi-output 问题)。

n_features_int

已弃用:属性 n_features_ 在版本 1.0 中已弃用,并将在 1.2 中删除。

n_features_in_int

拟合期间看到的特征数。

feature_names_in_ndarray 形状(n_features_in_,)

拟合期间看到的特征名称。仅当 X 具有全为字符串的函数名称时才定义。

n_outputs_int

执行fit 时的输出数。

feature_importances_ndarray 形状 (n_features,)

基于杂质的特征重要性。

oob_score_浮点数

使用out-of-bag 估计获得的训练数据集的分数。此属性仅在oob_score 为 True 时存在。

oob_decision_function_ndarray 形状 (n_samples, n_classes) 或 (n_samples, n_classes, n_outputs)

使用 out-of-bag 估计训练集计算的决策函数。如果 n_estimators 很小,则可能在引导期间从未遗漏数据点。在这种情况下,oob_decision_function_ 可能包含 NaN。此属性仅在oob_score 为 True 时存在。

注意

控制树大小的参数的默认值(例如 max_depthmin_samples_leaf 等)会导致完全生长和未修剪的树在某些数据集上可能非常大。为了减少内存消耗,应该通过设置这些参数值来控制树的复杂性和大小。

每次拆分时,特征总是随机排列。因此,即使使用相同的训练数据 max_features=n_featuresbootstrap=False ,如果在搜索最佳拆分期间枚举的几个拆分的标准改进相同,则找到的最佳拆分可能会有所不同。要在拟合期间获得确定性行为,必须修复 random_state

参考

1
  1. Breiman,“Random Forests”,机器学习,45(1),5-32,2001。

例子

>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.datasets import make_classification
>>> X, y = make_classification(n_samples=1000, n_features=4,
...                            n_informative=2, n_redundant=0,
...                            random_state=0, shuffle=False)
>>> clf = RandomForestClassifier(max_depth=2, random_state=0)
>>> clf.fit(X, y)
RandomForestClassifier(...)
>>> print(clf.predict([[0, 0, 0, 0]]))
[1]

相关用法


注:本文由纯净天空筛选整理自scikit-learn.org大神的英文原创作品 sklearn.ensemble.RandomForestClassifier。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。