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

发布者:PeacefulOasis最新更新时间:2024-09-02 来源: elecfans关键字:采样方法  机器学习 手机看文章 扫描二维码
随时随地手机看文章

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


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



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


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


二、常见的非均匀数据重采样方法和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)验证效果:在应用重采样方法后,需要评估重采样对模型性能的影响。可以使用交叉验证或保持独立测试集的方法来评估模型的准确性、召回率、精确度等指标,并与未经过重采样的结果进行对比。


四、总结


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


关键字:采样方法  机器学习 引用地址:什么是非均匀数据重采样?哪种非均匀数据重采样方法更适合你?

上一篇:如何解决数据缺失问题?
下一篇:中断是什么?PLC的三大类中断事件

推荐阅读最新更新时间:2024-11-02 16:54

恩智浦借助AWS Greengrass展示安全边缘处理和机器学习强大实力
恩智浦半导体NXP Semiconductors N.V.(纳斯达克代码:NXPI)今天宣布,将在2017年度AWS re:Invent大会上,通过在恩智浦Layerscape上运行的 Amazon Web Services (AWS)服务,展示其微处理器(MPU)、微控制器(MCU)和应用处理器在多种物联网(IoT)和安全边缘处理应用中的运用。对安全边缘处理的支持可降低延迟和带宽需求,提高物联网解决方案的安全性。 当今的物联网应用都存在边缘处理和安全要求,为此,恩智浦开发了一款强大的分布式云/边缘软件平台,提供必要的安全配置、连接和处理能力,为连接AWS的边缘处理设备提供支持并创造条件。恩智浦将在AWS re:Invent大
[物联网]
亚马逊:AWS新增机器学习,云服务是未来之路
亚马逊宣布AWS将新增机器学习服务,这项服务“面向没有经验的开发者,可以完全托管”。提交至该服务的所有数据都将保密,而随着客户向其中输入更多数据,这一系统将越来越智能。   过去的多年里,机器学习技术一直在亚马逊公司内部使用,主要被用于亚马逊商城的个性化推荐。但AWS的一些大客户,包括社会活动网站Change.org,要求亚马逊提供更多的机器学习支持。   对于大多数企业,包括中小型互联网企业和几乎所有的传统企业,它们不具备自己搭建云平台的能力和优势。云就像电网集中供电一样,通过网络从hub向分支传输资源和能力。每个企业自己进行数据存储、计算、分析,就像自己用发电机发电一样,不会是主流现象。   在亚马逊之前,其
[嵌入式]
Arm公布Project Trillium项目,提供机器学习和神经网络IP
新闻摘要: 全新的Arm® IP套件为终端设备带来机器学习(ML)能力 基于高效能和高效率设计架构的 Arm 机器学习与目标检测 (Object Detection) 处理器 , 能提供最广泛的应用范围并带来最佳的用户经验 这些新产品能让移动设备具备实现每秒数万亿次的机器学习操作的能力。 北京– 2018年2月23日– Arm公司近期宣布了其Project Trillium项目,这是一套包括新的高度可扩展处理器的Arm IP组合,这些产品可以提供增强的机器学习(ML)和神经网络(NN)功能。当前的技术产品主要针对移动设备市场,将让全新的搭载机器学习功能的设备具有先进的计算能力,包括最先进的目标检测功能。 Arm I
[嵌入式]
不只会下棋,AlphaGo人工智能开始操刀做手术?
横扫围棋界后, 人工智能 企业 DeepMind 近日又在学术期刊《Nature Medcine》发表一项研究。“这项研究或将改变重度眼疾的治疗方式。” DeepMind官网自信地写道。   这篇题为《可在临床上用于视网膜疾病诊断和转诊的深度学习》的论文称,系统能诊断包括糖尿病眼病、黄斑病变等50多种眼科疾病,准确度超过专家,并且可推荐相应的诊疗措施。   DeepMind 已经成为 AI 领域的明星,其将 机器学习 和系统神经科学的前沿技术相结合,建立强大的通用学习算法,其开发的 AlphaGo 打败了世界最顶尖的围棋手。此前有外媒报道,DeepMind 欲将其算法应用到医疗保健行业,包括计划在 5年内使用机器学习处理英国国家医
[嵌入式]
STM32ADC采样时间、采样周期、采样频率计算方法
ADC转换就是输入模拟的信号量,单片机转换成数字量。读取数字量必须等转换完成后,完成一个通道的读取叫做采样周期。采样周期一般来说=转换时间+读取时间 。而转换时间=采样时间+12.5个时钟周期。采样时间是你通过寄存器告诉 STM32 采样模拟量的时间,设置越长越精确 一 STM32 ADC采样频率的确定 1. :先看一些资料,确定一下ADC的时钟: (1),由时钟控制器提供的ADCCLK时钟和PCLK2(APB2时钟)同步。CLK控制器为ADC时钟提供一个专用的可编程预分频器。 (2) 一般情况下在程序 中将 PCLK2 时钟设为 与系统时钟 相同 RCC_HCLKConfig(RCC_SYSCLK_Div1); RC
[单片机]
嵌入式人工智能/机器学习(AI/ML)以“生态+集成+定制”差异化发展
随着嵌入式处理器的能力不断提升,超小型化的硬件加速器不断被引入,以及原厂及商业的开发环境和工具不断出现, 嵌入式人工智能/机器学习(AI/ML)技术 在近几年得到了快速的发展。同时因为这些技术与千姿百态的各种应用需求十分贴近,因此正在进入差异化发展的新空间,未来其增长速度将可以比肩甚至超过需要强大资源体系的、立足良好通信条件的和基于云的人工智能应用。 人工智能并不是一个近几年才提出的名词,但是在近几年随着谷歌AlphaGo战胜人类围棋世界冠军等事件的推动,才使诸如卷积神经网络、深度学习和机器学习等技术走进了大众的视野,同时也使“人工智能=数据+算法+算力”的模型得到广泛的认同。 其结果是,在很多人的印象中,人工智能和机器学
[嵌入式]
AI会给未来的工作会带来什么样的改变?
《经济学人》去年出了一期很经典的封面,封面里将全球各大高科技平台企业如谷歌、亚马逊之许描绘成正在采油的钻井,寓意很明显,在数字经济时代,大平台正在开采数字化的石油——大数据,而开采出来的大数据则用于人工智能(AI),因为AI会是数字化时代的电。   也有人用狂歌热舞(DANCE)这个词来形容AI主导的数字经济时代。DANCE是五个英文词的缩略语,分别是大数据(data)、算法/人工智能(al-gorithms/AI)、网络(networks)、云(cloud)以及硬件呈指数级的性能改善 (exponentialimprovementsinhard-ware)。其实DANCE的五点缺一不可,恰恰是大量数据产生,算法不断更新,移动互联
[嵌入式]
人工智能和机器学习创新
互連 IP可以有效地快速整合数十个或数百个异构神经网络硬件加速器 经过实际验证的商用系统芯片( SoC )互连IP的创新供应商 ArterisIP 今天宣布,在过去两年中,有十五家公司已经批准使用ArterisIP的FlexNoC互连(FlexNoC Interconnect)或者Ncore缓存一致互连IP(Ncore Cache Coherent Interconnect IP),作为新的 人工智能 (AI)和 机器学习 系统芯片的关键元件。   有九个ArterisIP的客户公开宣布,它们已经针对数据中心、汽车、消费类产品和移动应用,设计了或者正在开发机器学习和AI 系统芯片。这九家公司是:   一、Movidius (英特尔
[嵌入式]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved