scikit-learn 中的平衡随机森林 (python)
Balanced Random Forest in scikit-learn (python)
我想知道在最新版本的 scikit-learn 包中是否有平衡随机森林 (BRF) 的实现。 BRF用于数据不平衡的情况。它像普通 RF 一样工作,但对于每次引导迭代,它通过欠采样来平衡普遍性 class。例如,给定两个 classes N0 = 100 和 N1 = 30 个实例,在每次随机抽样时,它从第一个 class 抽取(带替换)30 个实例,从第二个 class 抽取相同数量的实例class,即它在平衡数据集上训练树。更多信息 please refer to this paper.
RandomForestClassifier() 确实有 'class_weight=' 参数,可能设置为 'balanced',但我不确定它是否与引导训练样本的下采样有关。
您要查找的是BalancedBaggingClassifier from 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)
实际上它允许你做的是连续欠采样你的多数 class 同时在顶部安装一个估计器。您可以使用随机森林或 scikit-learn 中的任何基本估计器。这是一个 example.
imblearn 中现在有一个 class,叫做 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)
我想知道在最新版本的 scikit-learn 包中是否有平衡随机森林 (BRF) 的实现。 BRF用于数据不平衡的情况。它像普通 RF 一样工作,但对于每次引导迭代,它通过欠采样来平衡普遍性 class。例如,给定两个 classes N0 = 100 和 N1 = 30 个实例,在每次随机抽样时,它从第一个 class 抽取(带替换)30 个实例,从第二个 class 抽取相同数量的实例class,即它在平衡数据集上训练树。更多信息 please refer to this paper.
RandomForestClassifier() 确实有 'class_weight=' 参数,可能设置为 'balanced',但我不确定它是否与引导训练样本的下采样有关。
您要查找的是BalancedBaggingClassifier from 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)
实际上它允许你做的是连续欠采样你的多数 class 同时在顶部安装一个估计器。您可以使用随机森林或 scikit-learn 中的任何基本估计器。这是一个 example.
imblearn 中现在有一个 class,叫做 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)