EasyEnsemble分类器#

class imblearn.ensemble.EasyEnsembleClassifier(n_estimators=10, estimator=None, *, warm_start=False, sampling_strategy='auto', replacement=False, n_jobs=None, random_state=None, verbose=0)[source]#

平衡增强学习者的集合,也称为EasyEnsemble。

该算法被称为EasyEnsemble [1]。分类器是由在不同平衡自举样本上训练的AdaBoost学习器组成的集成。平衡是通过随机欠采样实现的。

更多内容请参阅用户指南

在版本0.4中添加。

Parameters:
n_estimatorsint, default=10

集成中AdaBoost学习器的数量。

estimatorestimator object, default=AdaBoostClassifier()

内部集成中使用的基础AdaBoost分类器。请注意,您可以通过传递自己的实例来设置内部学习器的数量。

在版本0.10中添加。

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

是否进行随机有放回抽样。

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

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

Attributes:
estimator_estimator

集成模型的基础估计器。

在版本0.10中添加。

estimators_list of estimators

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

estimators_samples_list of arrays

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

estimators_features_list of arrays

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

classes_array, shape (n_classes,)

类别标签。

n_classes_int or list

类的数量。

n_features_in_int

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

在版本0.9中添加。

feature_names_in_ndarray of shape (n_features_in_,)

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

在版本0.9中添加。

另请参阅

BalancedBaggingClassifier

Bagging分类器,其中每个基础估计器都在平衡的bootstrap上进行训练。

BalancedRandomForestClassifier

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

RUSBoostClassifier

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

注释

该方法在[1]中描述。

支持通过独立采样每个类别来进行多类重采样。

参考文献

[1] (1,2)

X. Y. 刘, J. 吴 和 Z. H. 周, “探索性欠采样用于类别不平衡学习,” 发表于 IEEE 系统、人与控制论汇刊, B 部分 (控制论), 卷 39, 第 2 期, 页码 539-550, 2009 年 4 月.

示例

>>> 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 EasyEnsembleClassifier
>>> 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)
>>> eec = EasyEnsembleClassifier(random_state=42)
>>> eec.fit(X_train, y_train)
EasyEnsembleClassifier(...)
>>> y_pred = eec.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$') EasyEnsembleClassifier[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$') EasyEnsembleClassifier[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.EasyEnsembleClassifier 的示例#

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

Compare ensemble classifiers using resampling