什么是数据重采样?
数据重采样是一种用于调整数据集大小或分布的技术。它涉及通过增加或减少数据点的数量来修改现有数据集。数据重采样主要用于解决类不平衡等问题,其中一个类的样本明显少于另一个类,或者为训练机器学习模型准备数据。
以下是数据重采样的一些方法:
- 类不平衡校正:它有助于纠正分类任务中的类不平衡问题。它确保每个类在数据集中有适当的表示,防止模型偏向多数类。
- 模型训练和验证:重采样技术可以帮助确保模型在具有均衡类分布的数据集上进行训练和验证。它导致更可靠和无偏见的模型评估。
- 增强泛化:它可以通过提供更多的学习示例来提高模型泛化到新的、看不见的数据的能力,特别是对于代表性不足的类。
数据重采样技术
重采样有两种主要技术:
- 过采样
- 欠采样
过采样包括:
- 随机过采样:在该方法中,少数类的随机实例被复制以匹配多数类中的实例的数量。虽然简单,但它可能导致过拟合。
- SMOTE(合成少数过采样技术):SMOTE通过在现有实例之间插值来生成少数类的合成样本。它创建新的数据点,这些数据点是特征空间中相邻数据点的组合。
- ADASYN(自适应合成采样):ADASYN是SMOTE的扩展,专注于通过赋予它们更多权重来为难以学习的实例生成合成样本。
欠采样包括:
- 随机欠采样:从多数类中随机删除实例,以匹配少数类中的实例数。如果删除的实例太多,可能会导致信息丢失。
- 簇质心:该方法识别多数类中的聚类并将其替换为聚类的质心,有效地减少了多数类中的实例数量。
使用Python进行数据重采样
现在,让我们看看如何通过实现数据重采样技术,使用Python对数据集进行重采样。
首先创建一个不平衡的数据集,然后实现SMOTE来重新采样数据,将其转换为平衡的数据集。
import numpy as np
import pandas as pd
# Install imbalanced-learn using: pip install imbalanced-learn
from imblearn.over_sampling import SMOTE
# Create a sample imbalanced dataset with two classes (0 and 1)
np.random.seed(42)
X = np.random.rand(100, 2)
y = np.array([0] * 90 + [1] * 10)
# Apply SMOTE to generate synthetic samples for the minority class
smote = SMOTE(sampling_strategy='auto')
X_resampled, y_resampled = smote.fit_resample(X, y)
# Print the class distribution after SMOTE
print("Class Distribution after SMOTE:")
print(pd.Series(y_resampled).value_counts())
输出
Class Distribution after SMOTE:
0 90
1 90
dtype: int64
在这段代码中,我们创建了一个带有两个类(0和1)的示例不平衡数据集。然后,我们应用来自不平衡学习库的SMOTE为少数类生成合成样本。sampling_strategy参数设置为auto,这确保创建的合成样本数等于大多数类中的样本数,从而平衡类分布。
总结
因此,数据重采样是一种用于调整数据集大小或分布的技术。它涉及通过增加或减少数据点的数量来修改现有数据集。重采样主要用于解决类不平衡等问题,其中一个类的样本明显少于另一个类,或者为训练机器学习模型准备数据集。