我想知道scikit-learn软件包的最新版本中是否存在平衡随机森林(BRF)的实现。 BRF用于不平衡数据的情况。它作为普通RF工作,但对于每次自举迭代,它通过欠采样平衡流行类。例如,给定两个类N0 = 100,N1 = 30个实例,在每个随机抽样中,它从第一个类中抽取(替换)30个实例,从第二个类抽取相同数量的实例,即它在一个树上训练一个树。平衡数据集。有关详细信息please refer to this paper。
RandomForestClassifier()确实有' class_weight ='参数,可能设置为“平衡”,但我不确定它是否与靴子训练样本的下采样有关。
答案 0 :(得分:8)
我知道这已经晚了10个月,但我认为你要找的是来自BalancedBaggingClassifier的imblearn。
imblearn.ensemble.BalancedBaggingClassifier(base_estimator=None,
n_estimators=10, max_samples=1.0, max_features=1.0, bootstrap=True,
bootstrap_features=False, oob_score=False, warm_start=False, ratio='auto',
replacement=False, n_jobs=1, random_state=None, verbose=0)
有效的是,它允许你做的是在将估算器放在最顶层的同时连续对大多数类进行欠采样。您可以使用随机森林或来自scikit-learn的任何基本估算器。这是一个example。
答案 1 :(得分:0)
现在在imblearn中有一个名为BalancedRandomForestClassifier的类。它的工作方式与之前提到的BalancedBaggingClassifier相似,但专门用于随机森林。
from imblearn.ensemble import BalancedRandomForestClassifier
brf = BalancedRandomForestClassifier(n_estimators=100, random_state=0)
brf.fit(X_train, y_train)
y_pred = brf.predict(X_test)