scikit-learn RandomForestClassifier 中的子样本大小

问题描述 投票:0回答:3

如何控制用于训练森林中每棵树的子样本的大小? 根据scikit-learn的文档:

随机森林是一种元估计器,适合许多决策 数据集的各个子样本上的树分类器并使用 平均以提高预测准确性并控制过度拟合。 子样本大小始终与原始输入样本相同 大小,但如果 bootstrap=True,则通过替换来绘制样本 (默认)。

所以

bootstrap
允许随机性,但找不到如何控制子样本的数量。

machine-learning scikit-learn random-forest data-science
3个回答
3
投票

Scikit-learn 不提供此功能,但您可以通过使用树和装袋元分类器的组合(较慢)版本轻松获得此选项:

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier

clf = BaggingClassifier(base_estimator=DecisionTreeClassifier(), max_samples=0.5)

顺便说一句,Breiman 的随机森林确实不考虑子样本作为参数,完全依赖 bootstrap,因此大约使用 (1 - 1 / e) 的样本来构建每棵树。


1
投票

在0.22版本中,Scikit添加了可以调整的参数

max_samples

https://scikit-learn.org/stable/modules/ generated/sklearn.ensemble.RandomForestClassifier.html


1
投票

您实际上可以修改

forest.py
中的_generate_sample_indices函数来更改每次子样本的大小。为此,
fastai
库实际上实现了一个功能
set_rf_samples
;看起来像这样:

def set_rf_samples(n):
    """ Changes Scikit learn's random forests to give each tree a random sample of
    n random rows.
    """
    forest._generate_sample_indices = (lambda rs, n_samples:
        forest.check_random_state(rs).randint(0, n_samples, n))

您可以将此功能添加到您的代码中

© www.soinside.com 2019 - 2024. All rights reserved.