scikit-learn (python)中的平衡随机森林



我想知道在最近版本的scikit-learn包中是否有平衡随机森林(BRF)的实现。BRF用于数据不平衡的情况。它像普通的RF一样工作,但是对于每次自举迭代,它通过欠采样来平衡流行类。例如,给定两个类N0 = 100, N1 = 30个实例,在每次随机抽样时,它从第一个类中提取(替换)30个实例,从第二个类中提取相同数量的实例,即它在平衡数据集上训练树。要了解更多信息,请参阅本文。

RandomForestClassifier()确实有'class_weight='参数,它可能被设置为'balanced',但我不确定它是否与bootstrap训练样本的下采样有关。

您要查找的是来自imblearn的balancedbagingclassifier。

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中的任何基本估计器。下面是一个例子:

现在imblearn中有一个类叫做BalancedRandomForestClassifier。它的工作原理类似于前面提到的balancedbagingclassifier,但专门针对随机森林。

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)

相关内容

  • 没有找到相关文章

最新更新