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='sqrt', 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, monotonic_cst=None)#
一个随机森林分类器。
随机森林是一种元估计器,它在数据集的各种子样本上拟合多个决策树分类器,并使用平均来提高预测准确性和控制过拟合。 森林中的树使用最佳分割策略,即相当于将
splitter="best"
传递给底层的:class:~sklearn.tree.DecisionTreeRegressor
。 如果bootstrap=True
(默认),则子样本大小由max_samples
参数控制,否则整个数据集用于构建每棵树。有关基于树的集成模型之间的比较,请参见示例:ref:
sphx_glr_auto_examples_ensemble_plot_forest_hist_grad_boosting_comparison.py
。在:ref:
User Guide <forest>
中阅读更多内容。- Parameters:
- n_estimatorsint, default=100
森林中的树木数量。
Changed in version 0.22:
n_estimators
的默认值在0.22中从10更改为100。- criterion{“gini”, “entropy”, “log_loss”}, default=”gini”
测量分割质量的函数。支持的标准是“gini”用于基尼不纯度,“log_loss”和“entropy”都用于香农信息增益,参见:ref:
tree_mathematical_formulation
。 注意:此参数是树特定的。- max_depthint, default=None
树的最大深度。如果为None,则节点将扩展直到所有叶子纯净或所有叶子包含的样本少于min_samples_split。
- min_samples_splitint or float, default=2
分割内部节点所需的最小样本数:
如果是int,则将
min_samples_split
视为最小数量。如果是float,则
min_samples_split
是一个分数,ceil(min_samples_split * n_samples)
是每次分割的最小样本数。
Changed in version 0.18: 添加了分数的浮点值。
- min_samples_leafint or float, default=1
叶节点所需的最小样本数。任何深度的分割点只有在左右分支中至少留下
min_samples_leaf
训练样本时才会被考虑。这可能会对模型产生平滑效果,特别是在回归中。如果是int,则将
min_samples_leaf
视为最小数量。如果是float,则
min_samples_leaf
是一个分数,ceil(min_samples_leaf * n_samples)
是每个节点的最小样本数。
Changed in version 0.18: 添加了分数的浮点值。
- min_weight_fraction_leaffloat, default=0.0
叶节点所需的权重总和的最小加权分数。当未提供sample_weight时,样本具有相等的权重。
- max_features{“sqrt”, “log2”, None}, int or float, default=”sqrt”
查找最佳分割时要考虑的特征数量:
如果是int,则在每次分割时考虑
max_features
特征。如果是float,则
max_features
是一个分数,在每次分割时考虑max(1, int(max_features * n_features_in_))
特征。如果是“sqrt”,则
max_features=sqrt(n_features)
。如果是“log2”,则
max_features=log2(n_features)
。如果为None,则
max_features=n_features
。
Changed in version 1.1:
max_features
的默认值从“auto”更改为“sqrt”。注意:分割的搜索不会停止,直到找到至少一个有效的节点样本分区,即使这需要实际检查超过
max_features
的特征。- max_leaf_nodesint, default=None
以最佳优先方式生长具有
max_leaf_nodes
的树。最佳节点定义为相对减少的不纯度。如果为None,则叶节点数量无限制。- min_impurity_decreasefloat, default=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
是右子节点的样本数。如果传递了
sample_weight
,则N
、N_t
、N_t_R
和N_t_L
都指加权总和。Added in version 0.19.
- bootstrapbool, default=True
构建树时是否使用自举样本。如果为False,则使用整个数据集构建每棵树。
- oob_scorebool or callable, default=False
是否使用袋外样本估计泛化分数。默认情况下,使用:func:
~sklearn.metrics.accuracy_score
。提供一个签名为metric(y_true, y_pred)
的可调用对象以使用自定义度量。仅在bootstrap=True
时可用。- n_jobsint, default=None
并行运行的作业数量。
fit
、predict
、decision_path
和:meth:apply
都在树上并行化。None
表示1,除非在:obj:joblib.parallel_backend
上下文中。-1
表示使用所有处理器。有关更多详细信息,请参见:term:Glossary <n_jobs>
。- random_stateint, RandomState instance or None, default=None
控制构建树时使用的样本的自举随机性(如果
bootstrap=True
)以及在每个节点查找最佳分割时要考虑的特征的采样(如果max_features < n_features
)。有关详细信息,请参见:term:Glossary <random_state>
。- verboseint, default=0
控制拟合和预测时的详细程度。
- warm_startbool, default=False
当设置为
True
时,重用上一次拟合调用的解决方案并向集成中添加更多估计器,否则,只是拟合一个全新的森林。有关详细信息,请参见:term:Glossary <warm_start>
和:ref:tree_ensemble_warm_start
。- class_weight{“balanced”, “balanced_subsample”}, dict or list of dicts, default=None
以
{class_label: weight}
形式与类关联的权重。如果未给出,则假定所有类的权重为1。对于多输出问题,可以按y的列顺序提供字典列表。注意,对于多输出(包括多标签)权重应为每列的每个类定义自己的字典。例如,对于四类多标签分类,权重应为[{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”相同,只是权重基于每棵树生长的自举样本计算。
对于多输出,y的每列的权重将相乘。
注意,如果指定了sample_weight(通过fit方法传递),这些权重将与sample_weight相乘。
- ccp_alphanon-negative float, default=0.0
用于最小成本复杂度修剪的复杂度参数。选择成本复杂度最大但小于
ccp_alpha
的子树。默认情况下,不执行修剪。有关详细信息,请参见:ref:minimal_cost_complexity_pruning
。Added in version 0.22.
- max_samplesint or float, default=None
如果bootstrap为True,从X中抽取的样本数量以训练每个基估计器。
如果为None(默认),则抽取
X.shape[0]
样本。如果是int,则抽取
max_samples
样本。如果是float,则抽取
max(round(n_samples * max_samples), 1)
样本。因此,max_samples
应在区间(0.0, 1.0]
内。
Added in version 0.22.
- monotonic_cstarray-like of int of shape (n_features), default=None
- 指示对每个特征施加的单调性约束。
1: 单调增加
0: 无约束
-1: 单调减少
如果monotonic_cst为None,则不施加约束。
- 单调性约束不支持:
多类分类(即当
n_classes > 2
时),多输出分类(即当
n_outputs_ > 1
时),在具有缺失值的数据上训练的分类。
约束适用于正类的概率。
在:ref:
User Guide <monotonic_cst_gbdt>
中阅读更多内容。Added in version 1.4.
- Attributes:
- estimator_
DecisionTreeClassifier
用于创建拟合子估计器集合的子估计器模板。
Added in version 1.2:
base_estimator_
重命名为estimator_
。- estimators_list of DecisionTreeClassifier
拟合的子估计器集合。
- classes_ndarray of shape (n_classes,) or a list of such arrays
类标签(单输出问题),或类标签数组的列表(多输出问题)。
- n_classes_int or list
类的数量(单输出问题),或包含每个输出类数量的列表(多输出问题)。
- n_features_in_int
在:term:
fit
期间看到的特征数量。Added in version 0.24.
- feature_names_in_ndarray of shape (
n_features_in_
,) 在:term:
fit
期间看到的特征名称。仅在X
具有全为字符串的特征名称时定义。Added in version 1.0.
- n_outputs_int
执行
fit
时的输出数量。feature_importances_
ndarray of shape (n_features,)杂质特征重要性。
- oob_score_float
使用袋外估计获得的训练数据集得分。仅当
oob_score
为True时存在此属性。- oob_decision_function_ndarray of shape (n_samples, n_classes) or (n_samples, n_classes, n_outputs)
使用袋外估计在训练集上计算的决策函数。如果n_estimators较小,可能某个数据点在自举过程中从未被遗漏。在这种情况下,
oob_decision_function_
可能包含NaN。仅当oob_score
为True时存在此属性。estimators_samples_
list of arrays子集,每个基估计器绘制的样本。
- estimator_
See also
sklearn.tree.DecisionTreeClassifier
决策树分类器。
sklearn.ensemble.ExtraTreesClassifier
极端随机树分类器集成。
sklearn.ensemble.HistGradientBoostingClassifier
基于直方图的梯度提升分类树,对于大数据集(n_samples >= 10_000)非常快。
Notes
控制树大小的参数(例如
max_depth
、min_samples_leaf
等)的默认值会导致完全生长且未修剪的树,这在某些数据集上可能非常大。为了减少内存消耗,应通过设置这些参数值来控制树的复杂性和大小。在每次分割时,特征总是随机排列。因此,即使在相同的训练数据、
max_features=n_features
和bootstrap=False
下,如果标准的改进对于在搜索最佳分割期间枚举的多个分割是相同的,找到的最佳分割也可能会有所不同。要在拟合期间获得确定性行为,必须固定random_state
。References
[1]Breiman, “Random Forests”, Machine Learning, 45(1), 5-32, 2001.
Examples
>>> 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]
- apply(X)#
将森林中的树应用于X,返回叶子索引。
- Parameters:
- X{array-like, sparse matrix},形状为 (n_samples, n_features)
输入样本。内部,其dtype将被转换为
dtype=np.float32
。如果提供稀疏矩阵,它将被转换为稀疏的csr_matrix
。
- Returns:
- X_leavesndarray,形状为 (n_samples, n_estimators)
对于X中的每个数据点x和森林中的每棵树,返回x最终所在的叶子索引。
- decision_path(X)#
返回森林中的决策路径。
Added in version 0.18.
- Parameters:
- X{array-like, sparse matrix},形状为 (n_samples, n_features)
输入样本。内部会将其 dtype 转换为
dtype=np.float32
。如果提供的是稀疏矩阵,它将被转换为稀疏的csr_matrix
。
- Returns:
- indicator形状为 (n_samples, n_nodes) 的稀疏矩阵
返回一个节点指示矩阵,其中非零元素表示样本经过这些节点。矩阵为 CSR 格式。
- n_nodes_ptr形状为 (n_estimators + 1,) 的 ndarray
indicator[n_nodes_ptr[i]:n_nodes_ptr[i+1]] 的列给出了第 i 个估计器的指示值。
- property estimators_samples_#
子集,每个基估计器绘制的样本。
返回一个动态生成的索引列表,标识用于拟合集成中每个成员的样本,即,袋内样本。
注意:为了不存储采样数据,从而减少对象的内存占用,每次调用该属性时都会重新创建列表。因此,获取该属性可能比预期的要慢。
- property feature_importances_#
杂质特征重要性。
数值越高,特征越重要。 特征的重要性计算为其带来的准则总减少量的(归一化)值。它也被称为基尼重要性。
警告:基于杂质的特征重要性对于高基数特征(许多唯一值)可能会产生误导。请参阅
sklearn.inspection.permutation_importance
作为替代方法。- Returns:
- feature_importances_ndarray of shape (n_features,)
该数组的值总和为1,除非所有树都是单节点树,仅由根节点组成,在这种情况下,它将是一个零数组。
- fit(X, y, sample_weight=None)#
构建一个从训练集(X, y)中生成的树的森林。
- Parameters:
- X{array-like, sparse matrix},形状为 (n_samples, n_features)
训练输入样本。内部,其 dtype 将被转换为
dtype=np.float32
。如果提供稀疏矩阵,它将被转换为稀疏的csc_matrix
。- yarray-like,形状为 (n_samples,) 或 (n_samples, n_outputs)
目标值(在分类中为类标签,在回归中为实数)。
- sample_weightarray-like,形状为 (n_samples,),默认=None
样本权重。如果为 None,则样本权重相等。在每个节点中搜索分割时,会忽略那些会创建子节点净零或负权重的分割。在分类的情况下,如果任何单个类在任一子节点中携带负权重,也会忽略这些分割。
- Returns:
- selfobject
拟合的估计器。
- get_metadata_routing()#
获取此对象的元数据路由。
请查看 用户指南 以了解路由机制的工作原理。
- Returns:
- routingMetadataRequest
MetadataRequest
封装的 路由信息。
- get_params(deep=True)#
获取此估计器的参数。
- Parameters:
- deepbool, 默认=True
如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。
- Returns:
- paramsdict
参数名称映射到它们的值。
- predict(X)#
预测X的类别。
输入样本的预测类别是通过森林中的树木投票决定的,权重为它们的概率估计。也就是说,预测的类别是树木中概率估计均值最高的类别。
- Parameters:
- X{array-like, sparse matrix},形状为 (n_samples, n_features)
输入样本。内部将其dtype转换为
dtype=np.float32
。如果提供稀疏矩阵,它将被转换为稀疏的csr_matrix
。
- Returns:
- yndarray,形状为 (n_samples,) 或 (n_samples, n_outputs)
预测的类别。
- predict_log_proba(X)#
预测X的类别对数概率。
输入样本的预测类别对数概率是通过森林中树木的平均预测类别概率的对数计算的。
- Parameters:
- X{array-like, sparse matrix},形状为 (n_samples, n_features)
输入样本。内部将其dtype将转换为
dtype=np.float32
。如果提供稀疏矩阵,它将被转换为稀疏的csr_matrix
。
- Returns:
- pndarray,形状为 (n_samples, n_classes),或此类数组的列表
输入样本的类别概率。类别的顺序对应于属性 classes_ 中的顺序。
- predict_proba(X)#
预测X的类别概率。
输入样本的预测类别概率是通过森林中树的平均预测类别概率计算的。 单个树的类别概率是叶中相同类别样本的比例。
- Parameters:
- X{array-like, sparse matrix},形状为 (n_samples, n_features)
输入样本。内部会将其dtype转换为
dtype=np.float32
。如果提供稀疏矩阵,它将被转换为稀疏的csr_matrix
。
- Returns:
- pndarray,形状为 (n_samples, n_classes),或此类数组的列表
输入样本的类别概率。类别的顺序对应于属性 classes_ 中的顺序。
- score(X, y, sample_weight=None)#
返回给定测试数据和标签的平均准确率。
在多标签分类中,这是子集准确率,这是一个严格的指标,因为你要求每个样本的每个标签集都被正确预测。
- Parameters:
- X形状为 (n_samples, n_features) 的类数组
测试样本。
- y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组
` X`的真实标签。
- sample_weight形状为 (n_samples,) 的类数组,默认=None
样本权重。
- Returns:
- scorefloat
self.predict(X)
相对于y
的平均准确率。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') RandomForestClassifier #
Request metadata passed to the
fit
method.Note that this method is only relevant if
enable_metadata_routing=True
(seesklearn.set_config
). Please see User Guide on how the routing mechanism works.The options for each parameter are:
True
: metadata is requested, and passed tofit
if provided. The request is ignored if metadata is not provided.False
: metadata is not requested and the meta-estimator will not pass it tofit
.None
: metadata is not requested, and the meta-estimator will raise an error if the user provides it.str
: metadata should be passed to the meta-estimator with this given alias instead of the original name.
The default (
sklearn.utils.metadata_routing.UNCHANGED
) retains the existing request. This allows you to change the request for some parameters and not others.Added in version 1.3.
Note
This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a
Pipeline
. Otherwise it has no effect.- Parameters:
- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
Metadata routing for
sample_weight
parameter infit
.
- Returns:
- selfobject
The updated object.
- set_params(**params)#
设置此估计器的参数。
该方法适用于简单估计器以及嵌套对象(例如
Pipeline
)。后者具有形式为<component>__<parameter>
的参数,以便可以更新嵌套对象的每个组件。- Parameters:
- **paramsdict
估计器参数。
- Returns:
- selfestimator instance
估计器实例。
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') RandomForestClassifier #
Request metadata passed to the
score
method.Note that this method is only relevant if
enable_metadata_routing=True
(seesklearn.set_config
). Please see User Guide on how the routing mechanism works.The options for each parameter are:
True
: metadata is requested, and passed toscore
if provided. The request is ignored if metadata is not provided.False
: metadata is not requested and the meta-estimator will not pass it toscore
.None
: metadata is not requested, and the meta-estimator will raise an error if the user provides it.str
: metadata should be passed to the meta-estimator with this given alias instead of the original name.
The default (
sklearn.utils.metadata_routing.UNCHANGED
) retains the existing request. This allows you to change the request for some parameters and not others.Added in version 1.3.
Note
This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a
Pipeline
. Otherwise it has no effect.- Parameters:
- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
Metadata routing for
sample_weight
parameter inscore
.
- Returns:
- selfobject
The updated object.
Gallery examples#
sphx_glr_auto_examples_model_selection_plot_successive_halving_iterations.py