SMOTE(Synthetic Minority Over-sampling Technique,即“合成少数过采样技术”)是一种用于处理不平衡数据集的算法。它通过创建合成样本来增加少数类的样本数量,而不是简单地复制现有样本,这有助于提高模型对于少数类的识别能力,从而改善模型的整体性能。
SMOTE 的工作原理:
- 从少数类中随机选择一个样本点,称为“O”(代表原点)。
- 寻找“O”点的K个最近邻居(K-Nearest Neighbors)。
- 在“O”点与其K个最近邻居之间,沿着连接这些点的线段随机选择位置来创建新的合成样本。
- 重复上述过程,直到达到所需的样本平衡。
SMOTE 的使用步骤:
- 安装和导入库:使用Python的
imblearn
库来实现SMOTE。 - 准备数据:将数据分为特征集(X)和目标变量(y)。
- 应用SMOTE:使用SMOTE类从
imblearn
库对少数类进行过采样。 - 训练模型:使用过采样后的数据集来训练你的模型。
- 评估模型:评估模型性能,注意检查过采样是否改善了模型对少数类的预测能力。
Python 示例代码(Demo):
# 导入所需的库
from imblearn.over_sampling import SMOTE
from sklearn.datasets import make_classification
from collections import Counter
# 创建一个不平衡的数据集
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))
# 初始化SMOTE对象
smote = SMOTE(random_state=42)
# 应用SMOTE进行过采样
X_resampled, y_resampled = smote.fit_resample(X, y)
# 打印过采样后的数据集分布情况
print('Resampled dataset shape %s' % Counter(y_resampled))
# 接下来可以使用X_resampled和y_resampled来训练你的模型