scikit中的子样本大小 - 学习RandomForestClassifier

时间:2016-11-28 15:19:59

标签: machine-learning scikit-learn random-forest data-science

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

  

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

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

2 个答案:

答案 0 :(得分:2)

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 :(得分:1)

实际上,您可以在forest.py中修改 _generate_sample_indices 函数以更改子样本的大小,感谢 fastai lib实现函数 set_rf_samples < / em>为此,看起来像这样

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

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