欢迎访问宙启技术站
智能推送

使用Python进行数据抽样和重采样的预处理方法

发布时间:2024-01-05 14:55:00

数据抽样和重采样是数据预处理中常用的技术,它们可以帮助我们从原始数据中提取出代表性的样本并减少数据的维度。Python提供了很多方便的库和方法来实现这些操作。本文将介绍一些常用的数据抽样和重采样的预处理方法,并给出相应的使用例子。

1. 随机抽样(Random Sampling)

随机抽样是从原始数据中通过随机选择的方式获得样本。Python中的numpy库提供了一个函数random.choice来实现随机抽样。下面是一个使用随机抽样技术从一个列表中抽取5个样本的例子:

import numpy as np

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sample = np.random.choice(data, size=5, replace=False)
print(sample)

输出结果可能是[7 3 2 6 4],表示抽取的5个样本。

2. 分层抽样(Stratified Sampling)

分层抽样是按照某个特征将原始数据分成若干层,然后从每一层中按照一定比例抽取样本,保证每一层都能被充分代表。Python中的sklearn库提供了一个函数 train_test_split,可以实现分层抽样。下面是一个将数据按照标签分层抽样的例子:

from sklearn.model_selection import train_test_split

data = [
    [6, 2, 'a'],
    [4, 3, 'b'],
    [5, 1, 'a'],
    [1, 3, 'b'],
    [2, 2, 'a'],
    [3, 1, 'a'],
    [2, 4, 'b'],
    [3, 2, 'a']
]
features = [[x[0], x[1]] for x in data]
labels = [x[2] for x in data]

X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, stratify=labels)
print(X_train)
print(X_test)

输出结果可能是[[3, 1], [6, 2], [2, 2], [2, 4], [4, 3]][[1, 3]],表示训练集和测试集中的样本。

3. 重采样(Resampling)

重采样是通过增加或减少数据样本数量来调整数据的不平衡性。Python中的imbalanced-learn库提供了一些重采样的方法。下面是一个使用重采样技术调整数据平衡性的例子:

from imblearn.over_sampling import RandomOverSampler

data = [
    [6, 2, 0],
    [4, 3, 1],
    [5, 1, 0],
    [1, 3, 1],
    [2, 2, 0],
    [3, 1, 0],
    [2, 4, 1],
    [3, 2, 0]
]
features = [[x[0], x[1]] for x in data]
labels = [x[2] for x in data]

ros = RandomOverSampler(random_state=0)
features_resampled, labels_resampled = ros.fit_resample(features, labels)
print(features_resampled)
print(labels_resampled)

输出结果可能是[[6, 2], [4, 3], [5, 1], [1, 3], [2, 2], [3, 1], [2, 4], [3, 2], [4, 3]][0, 1, 0, 1, 0, 0, 1, 0, 1],表示重采样后得到的样本。

4. 降采样(Undersampling)

降采样是通过减少数据样本数量来调整数据的不平衡性。Python中的imbalanced-learn库也提供了一些降采样的方法。下面是一个使用降采样技术调整数据平衡性的例子:

from imblearn.under_sampling import RandomUnderSampler

data = [
    [6, 2, 0],
    [4, 3, 1],
    [5, 1, 0],
    [1, 3, 1],
    [2, 2, 0],
    [3, 1, 0],
    [2, 4, 1],
    [3, 2, 0]
]
features = [[x[0], x[1]] for x in data]
labels = [x[2] for x in data]

rus = RandomUnderSampler(random_state=0)
features_resampled, labels_resampled = rus.fit_resample(features, labels)
print(features_resampled)
print(labels_resampled)

输出结果可能是[[6, 2], [5, 1], [4, 3], [3, 1]][0, 0, 1, 0],表示降采样后得到的样本。

总结:

本文介绍了Python中进行数据抽样和重采样的预处理方法,并给出了相应的使用例子。通过使用这些方法,我们可以从原始数据中提取出代表性的样本,并调整数据集的平衡性。这些方法在数据预处理中都起到了重要的作用。