BalancedBaggingClassifier#

class imblearn.ensemble.BalancedBaggingClassifier(estimator=None, n_estimators=10, *, max_samples=1.0, max_features=1.0, bootstrap=True, bootstrap_features=False, oob_score=False, warm_start=False, sampling_strategy='auto', replacement=False, n_jobs=None, random_state=None, verbose=0, sampler=None)[source]#

一个带有额外平衡功能的Bagging分类器。

这个Bagging的实现与scikit-learn的实现类似。它包括一个额外的步骤,在拟合时使用给定的采样器来平衡训练集。

这个分类器可以作为实现各种方法的基础,例如 精确平衡装袋 [6], 大致平衡装袋 [7], 过度装袋 [6], 或 SMOTE-装袋 [8].

更多内容请参阅用户指南

Parameters:
estimatorestimator object, default=None

基础估计器用于拟合数据集的随机子集。 如果为None,则基础估计器为决策树。

在版本0.10中添加。

n_estimatorsint, default=10

集成中基础估计器的数量。

max_samplesint or float, default=1.0

从X中抽取的样本数量,用于训练每个基础估计器。

  • 如果是整数,则抽取max_samples个样本。

  • 如果是浮点数,则绘制 max_samples * X.shape[0] 个样本。

max_featuresint or float, default=1.0

从X中抽取的特征数量,用于训练每个基础估计器。

  • 如果是整数,则绘制 max_features 特征。

  • 如果是浮点数,则绘制 max_features * X.shape[1] 特征。

bootstrapbool, default=True

样本是否是有放回地抽取。

注意

请注意,此引导程序将从重新采样的数据集中生成。

bootstrap_featuresbool, default=False

特征是否被替换绘制。

oob_scorebool, default=False

是否使用袋外样本来估计泛化误差。

warm_startbool, default=False

当设置为True时,重用之前调用的解决方案来拟合并添加更多的估计器到集成中,否则,仅拟合一个全新的集成。

sampling_strategyfloat, str, dict, callable, default=’auto’

采样信息以对数据集进行采样。

  • float 时,它对应于重采样后少数类样本数量与多数类样本数量的期望比率。因此,该比率表示为 \(\alpha_{us} = N_{m} / N_{rM}\),其中 \(N_{m}\) 是少数类样本的数量,\(N_{rM}\) 是重采样后多数类样本的数量。

    警告

    float 仅适用于二分类。对于多类分类会引发错误。

  • str 时,指定重采样所针对的类别。不同类别中的样本数量将被均衡化。可能的选择有:

    'majority': 仅对多数类进行重采样;

    'not minority': 对除少数类之外的所有类进行重采样;

    'not majority': 重新采样除多数类之外的所有类;

    'all': 对所有类别进行重采样;

    'auto': 等同于 'not minority'.

  • dict时,键对应于目标类别。值对应于每个目标类别所需的样本数量。

  • 当可调用时,函数接受 y 并返回一个 dict。键对应于目标类别。值对应于每个类别所需的样本数量。

replacementbool, default=False

sampler is None时,是否进行有放回的随机采样,对应于RandomUnderSampler

n_jobsint, default=None

在交叉验证循环中使用的CPU核心数量。 None 表示1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。更多详情请参见 术语表

random_stateint, RandomState instance, default=None

控制算法的随机化。

  • 如果是整数,random_state 是随机数生成器使用的种子;

  • 如果 RandomState 实例,random_state 是随机数生成器;

  • 如果 None,随机数生成器是 np.random 使用的 RandomState 实例。

verboseint, default=0

控制构建过程的详细程度。

samplersampler object, default=None

用于在引导之前平衡数据集的采样器(如果bootstrap=True)并fit一个基础估计器。默认情况下,使用RandomUnderSampler

在版本0.8中添加。

Attributes:
estimator_estimator

集成模型的基础估计器。

在版本0.10中添加。

estimators_list of estimators

拟合的基础估计器的集合。

sampler_sampler object

sampler参数创建的验证采样器。

estimators_samples_list of ndarray

每个基础估计器的抽取样本子集。

estimators_features_list of ndarray

每个基础估计器绘制的特征子集。

classes_ndarray of shape (n_classes,)

类别标签。

n_classes_int or list

类的数量。

oob_score_float

使用袋外估计获得的训练数据集的分数。

oob_decision_function_ndarray of shape (n_samples, n_classes)

使用训练集上的袋外估计计算的决策函数。如果n_estimators较小,可能在引导过程中从未遗漏过某个数据点。在这种情况下,oob_decision_function_可能包含NaN。

n_features_in_int

输入数据集中的特征数量。

在版本0.9中添加。

feature_names_in_ndarray of shape (n_features_in_,)

fit期间看到的特征名称。仅在X具有全部为字符串的特征名称时定义。

在版本0.9中添加。

另请参阅

BalancedRandomForestClassifier

随机森林应用随机欠采样来平衡不同的自举样本。

EasyEnsembleClassifier

在平衡自助法上训练的AdaBoost分类器集成。

RUSBoostClassifier

AdaBoost分类器在每一轮提升中使用随机欠采样来平衡每个自举样本。

注释

可以通过将带有DecisionTreeClassifiermax_features='auto'作为基础估计器,将这个分类器转换为平衡随机森林[5]

参见 使用重采样比较集成分类器

参考文献

[1]

L. Breiman, “在大数据库和在线环境中用于分类的小投票粘贴”, 机器学习, 36(1), 85-103, 1999.

[2]

L. Breiman, “Bagging predictors”, 机器学习, 24(2), 123-140, 1996.

[3]

T. Ho, “随机子空间方法用于构建决策森林”, 模式分析与机器智能, 20(8), 832-844, 1998.

[4]

G. Louppe 和 P. Geurts, “随机补丁上的集成”, 机器学习和数据库中的知识发现, 346-361, 2012.

[5]

C. 陈超, A. 廖, 和 L. 布雷曼. “使用随机森林学习不平衡数据.” 加州大学伯克利分校 110, 2004.

[6] (1,2)

R. Maclin 和 D. Opitz. “袋装和提升的实证评估。” AAAI/IAAI 1997 (1997): 546-551.

[7]

S. Hido, H. Kashima, 和 Y. Takahashi. “用于不平衡数据的粗略平衡装袋。” 统计分析与数据挖掘:ASA 数据科学期刊 2.5‐6 (2009): 412-426.

[8]

S. Wang 和 X. Yao。 “通过使用集成模型对不平衡数据集进行多样性分析。” 2009年IEEE计算智能与数据挖掘研讨会。IEEE,2009年。

示例

>>> from collections import Counter
>>> from sklearn.datasets import make_classification
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.metrics import confusion_matrix
>>> from imblearn.ensemble import BalancedBaggingClassifier
>>> X, y = make_classification(n_classes=2, class_sep=2,
... weights=[0.1, 0.9], n_informative=3, n_redundant=1, flip_y=0,
... n_features=20, n_clusters_per_class=1, n_samples=1000, random_state=10)
>>> print('Original dataset shape %s' % Counter(y))
Original dataset shape Counter({1: 900, 0: 100})
>>> X_train, X_test, y_train, y_test = train_test_split(X, y,
...                                                     random_state=0)
>>> bbc = BalancedBaggingClassifier(random_state=42)
>>> bbc.fit(X_train, y_train)
BalancedBaggingClassifier(...)
>>> y_pred = bbc.predict(X_test)
>>> print(confusion_matrix(y_test, y_pred))
[[ 23   0]
 [  2 225]]

方法

decision_function(X)

基础分类器的决策函数的平均值。

fit(X, y)

从训练集(X, y)构建一个Bagging估计器集合。

get_metadata_routing()

获取此对象的元数据路由。

get_params([deep])

获取此估计器的参数。

predict(X)

预测X的类别。

predict_log_proba(X)

预测X的类别对数概率。

predict_proba(X)

预测X的类别概率。

score(X, y[, sample_weight])

返回给定测试数据和标签的平均准确率。

set_fit_request(*[, sample_weight])

传递给fit方法的请求元数据。

set_params(**params)

设置此估计器的参数。

set_score_request(*[, sample_weight])

传递给score方法的请求元数据。

property base_estimator_#

用于旧版sklearn版本兼容性的属性。

decision_function(X)[source]#

基础分类器的决策函数的平均值。

Parameters:
X{array-like, sparse matrix} of shape (n_samples, n_features)

训练输入样本。只有当基础估计器支持时,才接受稀疏矩阵。

Returns:
scorendarray of shape (n_samples, k)

输入样本的决策函数。列对应于按排序顺序排列的类别,如它们在属性classes_中出现的顺序。回归和二元分类是特殊情况,其中k == 1,否则k==n_classes

property estimators_samples_#

每个基础估计器的抽取样本子集。

返回一个动态生成的索引列表,用于标识用于拟合集成中每个成员的样本,即袋内样本。

注意:每次调用该属性时都会重新创建列表,以便通过不存储采样数据来减少对象的内存占用。因此,获取该属性可能比预期的要慢。

fit(X, y)[source]#

从训练集(X, y)构建一个Bagging估计器集合。

Parameters:
X{array-like, sparse matrix} of shape (n_samples, n_features)

训练输入样本。只有当基础估计器支持时,才接受稀疏矩阵。

yarray-like of shape (n_samples,)

目标值(分类中的类标签,回归中的实数)。

Returns:
selfobject

拟合的估计器。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查看用户指南了解路由机制的工作原理。

在版本1.5中添加。

Returns:
routingMetadataRouter

一个封装了路由信息的MetadataRouter

get_params(deep=True)[source]#

获取此估计器的参数。

Parameters:
deepbool, default=True

如果为True,将返回此估计器及其包含的子对象的参数。

Returns:
paramsdict

参数名称映射到它们的值。

predict(X)[source]#

预测X的类别。

输入样本的预测类别被计算为具有最高平均预测概率的类别。如果基础估计器没有实现predict_proba方法,则采用投票方式。

Parameters:
X{array-like, sparse matrix} of shape (n_samples, n_features)

训练输入样本。只有当基础估计器支持时,才接受稀疏矩阵。

Returns:
yndarray of shape (n_samples,)

预测的类别。

predict_log_proba(X)[source]#

预测X的类别对数概率。

输入样本的预测类别对数概率计算为集合中基础估计器的平均预测类别概率的对数。

Parameters:
X{array-like, sparse matrix} of shape (n_samples, n_features)

训练输入样本。只有当基础估计器支持时,才接受稀疏矩阵。

Returns:
pndarray of shape (n_samples, n_classes)

输入样本的类别对数概率。类别的顺序与属性 classes_ 中的顺序相对应。

predict_proba(X)[source]#

预测X的类别概率。

输入样本的预测类别概率计算为集成中基础估计器的平均预测类别概率。如果基础估计器没有实现predict_proba方法,则采用投票方式,输入样本的预测类别概率表示预测每个类别的估计器的比例。

Parameters:
X{array-like, sparse matrix} of shape (n_samples, n_features)

训练输入样本。只有当基础估计器支持时,才接受稀疏矩阵。

Returns:
pndarray of shape (n_samples, n_classes)

输入样本的类别概率。类别的顺序与属性 classes_ 中的顺序相对应。

score(X, y, sample_weight=None)[source]#

返回给定测试数据和标签的平均准确率。

在多标签分类中,这是子集准确性,这是一个严格的度量标准,因为您要求每个样本的每个标签集都被正确预测。

Parameters:
Xarray-like of shape (n_samples, n_features)

测试样本。

yarray-like of shape (n_samples,) or (n_samples, n_outputs)

X 的真实标签。

sample_weightarray-like of shape (n_samples,), default=None

样本权重。

Returns:
scorefloat

self.predict(X) 相对于 y 的平均准确率。

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') BalancedBaggingClassifier[source]#

传递给fit方法的请求元数据。

请注意,此方法仅在 enable_metadata_routing=True 时相关(参见 sklearn.set_config)。 请参阅 用户指南 了解路由机制的工作原理。

每个参数的选项是:

  • True: 请求元数据,并在提供时传递给 fit。如果未提供元数据,则忽略该请求。

  • False: 不请求元数据,元估计器不会将其传递给 fit

  • None: 不请求元数据,如果用户提供了元数据,元估计器将引发错误。

  • str: 元数据应该使用这个给定的别名传递给元估计器,而不是原始名称。

默认情况下(sklearn.utils.metadata_routing.UNCHANGED)保留现有的请求。这允许您更改某些参数的请求,而不更改其他参数。

在版本1.3中添加。

注意

此方法仅在此估计器用作元估计器的子估计器时相关,例如在Pipeline内部使用。否则它没有效果。

Parameters:
sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

fit 方法中 sample_weight 参数的元数据路由。

Returns:
selfobject

更新后的对象。

set_params(**params)[source]#

设置此估计器的参数。

该方法适用于简单的估计器以及嵌套对象(如Pipeline)。后者具有__形式的参数,以便可以更新嵌套对象的每个组件。

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') BalancedBaggingClassifier[source]#

传递给score方法的请求元数据。

请注意,此方法仅在 enable_metadata_routing=True 时相关(参见 sklearn.set_config)。 请参阅 用户指南 了解路由机制的工作原理。

每个参数的选项是:

  • True: 请求元数据,并在提供时传递给 score。如果未提供元数据,则忽略该请求。

  • False: 不请求元数据,元估计器不会将其传递给 score

  • None: 不请求元数据,如果用户提供了元数据,元估计器将引发错误。

  • str: 元数据应该使用这个给定的别名传递给元估计器,而不是原始名称。

默认情况下(sklearn.utils.metadata_routing.UNCHANGED)保留现有的请求。这允许您更改某些参数的请求,而不更改其他参数。

在版本1.3中添加。

注意

此方法仅在此估计器用作元估计器的子估计器时相关,例如在Pipeline内部使用。否则它没有效果。

Parameters:
sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

scoresample_weight 参数的元数据路由。

Returns:
selfobject

更新后的对象。

使用imblearn.ensemble.BalancedBaggingClassifier的示例#

在不平衡数据集上拟合模型以及如何对抗偏差

Fitting model on imbalanced datasets and how to fight bias

使用采样器的Bagging分类器

Bagging classifiers using sampler

使用重采样比较集成分类器

Compare ensemble classifiers using resampling