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

Arn*_*ein 9 classification random-forest scikit-learn

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

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

mam*_*oku 10

我知道这已经晚了10个月,但我认为你要找的是来自imblearnBalancedBaggingClassifier.

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)
Run Code Online (Sandbox Code Playgroud)

有效的是,它允许你做的是连续地对你的大多数类进行欠采样,同时在顶部拟合估算器.您可以使用随机森林或来自scikit-learn的任何基本估算器.这是一个例子.


小智 5

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)
Run Code Online (Sandbox Code Playgroud)