目前,我正在Sklearn中为我的不平衡数据实现RandomForestClassifier。我不太清楚RF在Sklearn中的工作原理。以下是我的担忧:
Follwoing是Sklearn中RandomForestClassifier的描述。
“随机森林是一种元估计器,它可以在数据集的各个子样本上拟合多个决策树分类器,并使用平均值来提高预测精度和控制过度拟合。子样本大小为始终与原始输入样本大小相同,但如果bootstrap = True(默认),则使用替换绘制样本。“
我之前发现了一个类似的问题。但这个问题的答案并不多。
How can SciKit-Learn Random Forest sub sample size may be equal to original training data size?
谢谢! 程
答案 0 :(得分:7)
没有明显的方法,但您可以在sklearn.ensemble.forest
中进行采样方法。
通过使用set_rf_samples(n)
,您可以强制树对n行进行子采样,并调用reset_rf_samples()
对整个数据集进行采样。
from sklearn.ensemble import forest
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))
def reset_rf_samples():
""" Undoes the changes produced by set_rf_samples.
"""
forest._generate_sample_indices = (lambda rs, n_samples:
forest.check_random_state(rs).randint(0, n_samples, n_samples))
参考:fast.ai