0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是非均匀数据重采样?哪种非均匀数据重采样方法更适合你?

冬至子 来源:菜J数据分析 作者:菜J数据分析 2023-06-20 15:21 次阅读

在数据分析和机器学习领域,我们常常需要处理非均匀数据。非均匀数据是指具有不平衡分布或样本数量不均等的数据集。为了准确建模和预测,我们需要对这些非均匀数据进行重采样。本文将详细介绍什么是非均匀数据重采样以及如何应用不同的方法来解决这一问题。

一、什么是非均匀数据重采样?

非均匀数据重采样是一种数据处理技术,用于解决数据集中存在的类别不平衡或样本数量不均等的问题。在非均匀数据中,某些类别的样本数量很少,而其他类别的样本数量很多。这种不平衡会导致建模和预测过程中的偏差,影响结果的准确性。

非均匀数据重采样的目标是通过增加少数类别的样本数量或减少多数类别的样本数量,使得数据集更加平衡。通过重采样,我们可以在保持数据分布特征的前提下,增加较少样本的可用性,从而提高模型的性能。

二、常见的非均匀数据重采样方法和Python示例

(1)过采样(Oversampling):过采样方法通过增加少数类别的样本数量来平衡数据集。其中一种常见的方法是复制少数类别的样本,使其在数据集中出现多次。然而,简单复制样本可能会导致过拟合问题。因此,一些改进的过采样方法被提出,如SMOTE(合成少数类过采样技术)和ADASYN(自适应合成)等,它们根据少数类别样本之间的距离关系合成新的样本。

使用imbalanced-learn库中的RandomOverSampler方法进行过采样:

from imblearn.over_sampling import RandomOverSampler 
X_resampled, y_resampled = RandomOverSampler().fit_resample(X, y)

使用imbalanced-learn库中的SMOTE方法进行合成少数类过采样:

from imblearn.over_sampling import SMOTE 
X_resampled, y_resampled = SMOTE().fit_resample(X, y)

完整示例:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from imblearn.over_sampling import RandomOverSampler
from sklearn.metrics import classification_report


# 加载数据集
data = pd.read_csv('your_dataset.csv')


# 分割特征和目标变量
X = data.drop('target', axis=1)
y = data['target']


# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)


# 方法1.创建RandomOverSampler对象
ros = RandomOverSampler(random_state=42)
# 对训练集进行过采样
X_train_resampled, y_train_resampled = ros.fit_resample(X_train, y_train)


# 方法2创建SMOTE对象
# smote = SMOTE(random_state=42)
# 对训练集进行过采样
# X_train_resampled, y_train_resampled = smote.fit_resample(X_train, y_train)


# 使用过采样后的数据训练模型
model = LogisticRegression()
model.fit(X_train_resampled, y_train_resampled)


# 在测试集上进行预测
y_pred = model.predict(X_test)


# 输出分类报告
print(classification_report(y_test, y_pred))

(2)欠采样(Undersampling):欠采样方法通过减少多数类别的样本数量来平衡数据集。最简单的欠采样方法是随机地删除多数类别的样本。然而,这种方法可能会丢失一些重要的信息。因此,一些更高级的欠采样方法被提出,如NearMiss和ClusterCentroids等,它们通过保留具有代表性的多数类别样本来减少样本数量。

使用imbalanced-learn库中的RandomUnderSampler方法进行欠采样:

from imblearn.under_sampling import RandomUnderSampler 
X_resampled, y_resampled = RandomUnderSampler().fit_resample(X, y)

使用imbalanced-learn库中的NearMiss方法进行近邻欠采样:

from imblearn.under_sampling import NearMiss 
X_resampled, y_resampled = NearMiss().fit_resample(X, y)

(3)混合采样(Combination Sampling):混合采样方法是过采样和欠采样的结合。它同时对多数和少数类别进行处理,以达到数据集平衡的效果。其中一种常见的混合

混采样方法是SMOTEENN(SMOTE + Edited Nearest Neighbors)方法。它首先使用SMOTE方法对少数类别进行过采样,生成一些合成样本。然后,使用Edited Nearest Neighbors(ENN)方法对多数类别进行欠采样,删除一些样本。通过这种方式,混合采样方法能够克服简单过采样和欠采样方法的一些问题,同时平衡数据集。

使用imbalanced-learn库中的SMOTEENN方法进行SMOTE + Edited Nearest Neighbors采样:

from imblearn.combine import SMOTEENN 
X_resampled, y_resampled = SMOTEENN().fit_resample(X, y)

(4)加权重采样(Weighted Resampling):加权重采样方法通过为不同类别的样本赋予不同的权重来平衡数据集。它可以用于训练模型时调整样本的重要性。常见的加权重采样方法包括基于频率的加权和基于错误率的加权。基于频率的加权根据每个类别的样本数量设置权重,使得样本数量少的类别具有更高的权重。基于错误率的加权根据每个类别的错误率来调整权重,使得错误率高的类别具有更高的权重。

import torch
from torch.utils.data import DataLoader, WeightedRandomSampler


# 假设有一个不均衡的数据集,包含10个样本和对应的类别标签
data = [
    ([1, 2, 3], 0),
    ([4, 5, 6], 1),
    ([7, 8, 9], 1),
    ([10, 11, 12], 0),
    ([13, 14, 15], 1),
    ([16, 17, 18], 0),
    ([19, 20, 21], 1),
    ([22, 23, 24], 0),
    ([25, 26, 27], 1),
    ([28, 29, 30], 1)
]


# 分割特征和目标变量
X = [sample[0] for sample in data]
y = [sample[1] for sample in data]


# 创建权重列表,根据类别进行加权
class_counts = torch.tensor([y.count(0), y.count(1)])
weights = 1.0 / class_counts.float()


# 创建WeightedRandomSampler对象
sampler = WeightedRandomSampler(weights, len(weights))


# 创建数据加载器,使用加权重采样
dataset = list(zip(X, y))
dataloader = DataLoader(dataset, batch_size=2, sampler=sampler)


# 遍历数据加载器获取批次数据
for batch_X, batch_y in dataloader:
    print("Batch X:", batch_X)
    print("Batch y:", batch_y)

三、选择适当的重采样方法

选择适当的重采样方法需要考虑数据集的特点和具体问题的需求。以下是一些建议:

(1)数据分析:在重采样之前,首先对数据集进行分析,了解每个类别的样本分布情况和特征。这有助于确定哪些类别是少数类别,哪些类别是多数类别,以及是否存在其他特殊情况(如噪声数据)。

(2)重采样策略:根据数据分析的结果选择合适的重采样策略。如果少数类别的样本数量很少,可以考虑过采样方法;如果多数类别的样本数量较多,可以考虑欠采样方法;如果两者都存在问题,可以考虑混合采样方法或加权重采样方法。

(3)验证效果:在应用重采样方法后,需要评估重采样对模型性能的影响。可以使用交叉验证或保持独立测试集的方法来评估模型的准确性、召回率、精确度等指标,并与未经过重采样的结果进行对比。

四、总结

非均匀数据重采样是解决非均匀数据集问题的重要步骤。通过过采样、欠采样、混合采样和加权重采样等方法,我们可以调整数据集的分布,提高模型的性能和准确性。选择适当的重采样方法需要基于数据分析的结果,并进行有效的评估。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模拟滤波器
    +关注

    关注

    0

    文章

    30

    浏览量

    13396
  • 机器学习
    +关注

    关注

    66

    文章

    8340

    浏览量

    132276
收藏 人收藏

    评论

    相关推荐

    以远场模型(平面波)为例,讲解时空采样定理!

    可以看出均匀线阵的相位无模糊对应时域均匀采样的奈奎斯特定理。多说一句,如果是非均匀线阵、圆阵等形式,可以理解成对应维度的
    的头像 发表于 09-30 07:16 7424次阅读
    以远场模型(平面波)为例,讲解时空<b class='flag-5'>采样</b>定理!

    labview能否对均匀采样数据进行处理

    labview能不能恢复均匀采样数据的波形,进而对其进行频谱测量、FFT?
    发表于 01-15 13:31

    如何实现均匀采样

    用NI数据采集卡,如何用LabVIEW进行均匀采样,并且对所得到的数据进行运算~请高手指点
    发表于 04-16 20:26

    labview 等角度采样

    振动数据,想实现从等时间间隔采样到等角度采样,labview怎样实现等角度采样,有具体算法吗?谢谢啦,声音与振动的工具包我也下了。
    发表于 04-20 22:47

    请问PSpice仿真瞬态分析Transient如何设置输出的Excel文件的采样时刻为均匀采样时刻?

    every: 1u s,但是导出的Excel文件发现采样时刻之间的间隔并不是严格的1us,请问怎么才能设置输出文件的时间点是均匀的?设置界面:采样时间点数据画的图:
    发表于 03-03 12:58

    关于labview中xy图中波形采样的问题

    比如在xy图中显示历史数据五万个点,但是由于数据量过大,在设置游标的过程中会出现卡顿,因此想到了利用采样方法,整体范围显示大间隔
    发表于 08-06 16:17

    请问怎么利用单片机io口实现均匀采样

    怎么利用单片机io口实现均匀采样
    发表于 10-19 07:47

    均匀采样的频谱研究

    均匀采样的一个很大的优点就是它具有抗频率混叠的性能[ ],首先从均匀采样讨论由采样而引起的频谱
    发表于 03-13 16:18 18次下载
    <b class='flag-5'>非</b><b class='flag-5'>均匀</b><b class='flag-5'>采样</b>的频谱研究

    基于采样技术改进的粒子滤波算法

    基于采样技术改进的粒子滤波算法_李小婷
    发表于 01-07 20:49 1次下载

    一种新的均匀采样信号的离散傅里叶变换方法

    针对伪随机(PN)码调制的多普勒激光雷达中固有的对外差信号不能等间隔采样的问题,提出一种新的均匀采样信号的离散傅里叶变换(DFT)方法。首
    发表于 12-23 11:40 0次下载
    一种新的<b class='flag-5'>非</b><b class='flag-5'>均匀</b><b class='flag-5'>采样</b>信号的离散傅里叶变换<b class='flag-5'>方法</b>

    如何使用概率模型进行均匀数据聚类算法的设计介绍

    针对传统K-means型算法的“均匀效应”问题,提出一种基于概率模型的聚类算法。首先,提出一个描述均匀数据簇的高斯混合分布模型,该模型允许数据
    发表于 12-13 10:57 10次下载

    空间曲线基于内在几何量的均匀采样方法

    为解决均匀参数采样在许多情况下得到质量不高的采样点,进而生成不理想的B样条拟合曲线,提出空间曲线基于内在几何量的均匀采样
    发表于 04-22 11:34 4次下载
    空间曲线基于内在几何量的<b class='flag-5'>均匀</b><b class='flag-5'>采样</b><b class='flag-5'>方法</b>

    一种空间曲线基于内在几何量的均匀采样方法

    为解决均匀参数采样在许多情况下得到质量不高的采样点,进而生成不理想的B样条拟合曲线,提出空间曲线基于内在几何量的均匀采样
    发表于 04-29 14:11 7次下载
    一种空间曲线基于内在几何量的<b class='flag-5'>均匀</b><b class='flag-5'>采样</b><b class='flag-5'>方法</b>

    任意采样滤波器设计应用说明

    电子发烧友网站提供《任意采样滤波器设计应用说明.pdf》资料免费下载
    发表于 09-14 14:31 0次下载
    任意<b class='flag-5'>重</b><b class='flag-5'>采样</b>滤波器设计应用说明

    为什么采样很重要?Pandas中重新采样的关键问题解析

    采样是时间序列分析中处理时序数据的一项基本技术。它是关于将时间序列数据从一个频率转换到另一个频率,它可以更改数据的时间间隔,通过上
    的头像 发表于 09-19 17:06 2365次阅读
    为什么<b class='flag-5'>重</b><b class='flag-5'>采样</b>很重要?Pandas中重新<b class='flag-5'>采样</b>的关键问题解析