你以前用过 sklearn 吗?这与它的工作方式非常相似。有效地使用 smote 本身就像在数据上运行模型以生成更多虚拟数据来平衡它。
imblearn page 中的这个例子很好地描述了它:
>>> from collections import Counter
>>> from sklearn.datasets import make_classification
>>> from imblearn.over_sampling import SMOTE # doctest: +NORMALIZE_WHITESPACE
>>> 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})
>>> sm = SMOTE(random_state=42)
>>> X_res, y_res = sm.fit_resample(X, y)
>>> print('Resampled dataset shape %s' % Counter(y_res))
Resampled dataset shape Counter({0: 900, 1: 900})
特别是当您拥有训练数据 X 和目标 y 时,如果您愿意,您可以实例化一个具有随机状态的 SMOTE() 实例。然后,您将其拟合到您的数据 X_res,y_res = sm.fit_resample(X,y)。 fit_resample() 合二为一,它将 SMOTE 算法拟合到您的数据集,然后使用新的过采样数据集转换(重新采样)您的数据集。