Если вы посмотрите документацию SMOTEENN (https://imbalanced -learn.readthedocs.io / en / stable / generate / imblearn.combine.SMOTEENN.html # imblearn.combine.SMOTEENN ):
Объедините избыточную и недостаточную выборку, используя SMOTE и Edited Nearest Neighbours.
Если вы хотите получить четное число для каждого класса, вы можете попробовать использовать другие методы, такие как over_sampling.SMOTE
Например:
from sklearn.datasets import make_classification
from imblearn.combine import SMOTEENN
from imblearn.over_sampling import SMOTE
from collections import Counter
X, y = make_classification(n_samples=5000, n_features=2, n_informative=2,
n_redundant=0, n_repeated=0, n_classes=2,
n_clusters_per_class=1,
weights=[0.06, 0.94],
class_sep=0.1, random_state=0)
sme = SMOTEENN()
X_res, y_res = sme.fit_resample(X, y)
print(f'Original train dataset shape: {Counter(y)}')
# Original train dataset shape: Counter({1: 4679, 0: 321})
print(f'Resampled train dataset shape: {Counter(y_res)}\n')
# Resampled train dataset shape: Counter({0: 3561, 1: 3246})
sme = SMOTE()
X_res, y_res = sme.fit_resample(X, y)
print(f'Original train dataset shape: {Counter(y)}')
# Original train dataset shape: Counter({1: 4679, 0: 321})
print(f'Resampled train dataset shape: {Counter(y_res)}\n')
# Resampled train dataset shape: Counter({0: 4679, 1: 4679})