BalancedBatchGenerator#

class imblearn.keras.BalancedBatchGenerator(X, y, *, sample_weight=None, sampler=None, batch_size=32, keep_sparse=False, random_state=None)[source]#

在训练Keras模型时创建平衡的批次。

创建一个keras Sequence,它被提供给fit。采样器定义了在创建批次之前用于平衡数据集的采样策略。采样器应该有一个属性sample_indices_

在版本0.4中添加。

Parameters:
Xndarray of shape (n_samples, n_features)

原始不平衡数据集。

yndarray of shape (n_samples,) or (n_samples, n_classes)

关联目标。

sample_weightndarray of shape (n_samples,)

样本权重。

samplersampler object, default=None

一个具有属性sample_indices_的采样器实例。 默认情况下,使用的采样器是 RandomUnderSampler

batch_sizeint, default=32

每次梯度更新的样本数量。

keep_sparsebool, default=False

是否保留输入的稀疏性(即Xysample_weight)。默认情况下,返回的批次将是密集的。

random_stateint, RandomState instance or None, default=None

控制算法的随机化:

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

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

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

Attributes:
sampler_sampler object

用于平衡数据集的采样器。

indices_ndarray of shape (n_samples, n_features)

采样过程中选择的样本的索引。

示例

>>> from sklearn.datasets import load_iris
>>> iris = load_iris()
>>> from imblearn.datasets import make_imbalance
>>> class_dict = dict()
>>> class_dict[0] = 30; class_dict[1] = 50; class_dict[2] = 40
>>> X, y = make_imbalance(iris.data, iris.target, sampling_strategy=class_dict)
>>> import tensorflow
>>> y = tensorflow.keras.utils.to_categorical(y, 3)
>>> model = tensorflow.keras.models.Sequential()
>>> model.add(
...     tensorflow.keras.layers.Dense(
...         y.shape[1], input_dim=X.shape[1], activation='softmax'
...     )
... )
>>> model.compile(optimizer='sgd', loss='categorical_crossentropy',
...               metrics=['accuracy'])
>>> from imblearn.keras import BalancedBatchGenerator
>>> from imblearn.under_sampling import NearMiss
>>> training_generator = BalancedBatchGenerator(
...     X, y, sampler=NearMiss(), batch_size=10, random_state=42)
>>> callback_history = model.fit(training_generator, epochs=10, verbose=0)

方法

on_epoch_begin()

在每个epoch开始时调用的方法。

on_epoch_end()

在每个epoch结束时调用的方法。

property num_batches#

PyDataset中的批次数量。

Returns:

PyDataset中的批次数量或None表示数据集是无限的。

on_epoch_begin()[source]#

在每个epoch开始时调用的方法。

on_epoch_end()[source]#

在每个epoch结束时调用的方法。

使用 imblearn.keras.BalancedBatchGenerator 的示例#

Porto Seguro: 使用Keras在小批量中平衡样本

Porto Seguro: balancing samples in mini-batches with Keras