当前位置: 首页 > news >正文

【机器学习】常见采样方法详解

        在机器学习领域,数据采样(Sampling)是一项至关重要的技术。它不仅影响模型的训练效率,还直接关系到模型的性能与泛化能力。本文将从基础概念出发,逐步深入介绍机器学习中常见的采样方法,帮助读者全面理解并应用这些技术。

目录

    1.    什么是数据采样
    2.    简单随机采样
    3.    系统采样
    4.    分层采样
    5.    聚类采样
    6.    过采样与欠采样
    7.    Bootstrapping采样
    8.    SMOTE及其变种
    9.    总结与应用建议


1. 什么是数据采样

数据采样是指从原始数据集中按照一定的方法选择部分数据用于分析或模型训练的过程。在机器学习中,采样主要用于以下几个方面:

  • 减小数据规模:处理海量数据时,通过采样减少计算资源消耗。
  • 处理数据不平衡:在分类任务中,某些类别样本稀少,通过采样平衡类别分布。
  • 提升模型泛化:通过不同的采样策略增强模型的鲁棒性。
  • Bootstrapping与集成学习:用在如随机森林等集成模型中,生成多样化的训练集。

理解并正确应用不同的采样方法,是提升机器学习模型性能的关键步骤之一。

2. 简单随机采样

概述

**简单随机采样(Simple Random Sampling)**是一种最基本的采样方法,在这种方法中,每个样本被选中的概率相同,且相互独立。

应用场景

  • 数据量适中,计算资源允许时。
  • 数据分布均匀,无明显类别不平衡。
优点
  • 实现简单,理论基础扎实。
  • 在数据分布均匀的情况下,能够有效代表总体。
缺点
  • 不适用于数据类别不平衡的情况,可能导致少数类样本进一步稀少。
  • 随机性可能导致代表性不足,尤其在小样本情况下。
示例

假设有一个包含1000个样本的数据集,采用简单随机采样方式抽取200个样本用于训练。

import random 
data = list(range(1000)) 
sampled_data = random.sample(data, 200)

3. 系统采样

概述

**系统采样(Systematic Sampling)**是一种在预先确定的间隔(k)下,从有序数据集中选取样本的方法。首先随机选择一个起始点,然后每隔k个样本选择一个。

应用场景

  • 数据已经按照某种顺序排列,如时间序列数据。
  • 希望快速采样,减少计算开销。
优点
  • 实现简单,效率高。
  • 适用于处理有序数据,如时间序列。
缺点
  • 如果数据存在周期性,与采样间隔k有共性的周期,可能导致样本偏差。
  • 不如简单随机采样具有较好的随机性。
示例

从一个按时间顺序排列的1000个样本的数据集中,每隔5个样本选取一个,共200个样本。

import random 
data = list(range(1000)) 
k = 5 
start = random.randint(0, k-1) 
sampled_data = data[start::k]

4. 分层采样

概述

**分层采样(Stratified Sampling)**是一种在不同的子群体(层)中分别进行采样的方法,确保每个层都有足够的代表性。常用于处理类别不平衡的数据。

应用场景

  • 数据集存在明显的类别或群体划分。
  • 需要确保各类别样本比例的代表性。
优点
  • 能有效处理类别不平衡问题。
  • 每个层内的代表性更强,提升模型的泛化能力。
缺点
  • 需要预先了解数据的层结构。
  • 对层的划分方法敏感,划分不当可能影响采样效果。
示例

在一个二分类数据集中,正负类样本比例为1:9。通过分层采样,确保训练集中两类样本比例与整体数据一致。

from sklearn.model_selection import train_test_split 
X = [...] # 特征 
y = [...] # 标签 
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, stratify=y, random_state=42 )

5. 聚类采样

概述

**聚类采样(Cluster Sampling)**将总体划分为若干个集群(Cluster),然后随机选择部分集群中的全部样本作为样本集。这种方法适用于总体较大且分布分散的情况。

应用场景

  • 数据分布具有明显的聚类特性,如地理数据。
  • 采样成本较高,选择部分集群能够降低开销。
优点
  • 采样效率高,减少计算资源消耗。
  • 易于实施,尤其在地理等空间数据中应用广泛。
缺点
  • 如果集群内部异质性大,可能导致样本代表性不足。
  • 需要合理划分集群,避免样本偏差。
示例

假设有多个地区的数据,通过聚类采样选择部分地区的数据进行训练。

from sklearn.cluster import KMeans 
import numpy as np 
data = np.array([...]) # 特征 
kmeans = KMeans(n_clusters=10, random_state=42).fit(data) 
clusters = kmeans.labels_ selected_clusters = random.sample(range(10), 3) 
sampled_data = data[np.isin(clusters, selected_clusters)]

6. 过采样与欠采样

在处理类别不平衡的数据集时,常采用过采样(Oversampling)和欠采样(Undersampling)方法来平衡各类别的样本数量。

6.1 欠采样(Undersampling)

欠采样通过减少多数类样本数量,使其与少数类样本数量接近。

优点
  • 简单易行,减少计算开销。
  • 可能提高模型对少数类的敏感度。
缺点
  • 可能丢失有用的多数类信息,导致模型性能下降。
  • 对于原本数据量较少的少数类,可能过于稀缺。
示例

在一个二分类数据集中,通过随机删除多数类样本,达到类别平衡。

from imblearn.under_sampling 
import RandomUnderSampler 
rus = RandomUnderSampler(random_state=42) 
X_res, y_res = rus.fit_resample(X, y)

6.2 过采样(Oversampling)

过采样通过增加少数类样本数量,使其与多数类样本数量接近。常见方法包括复制现有少数类样本或生成合成样本。

优点
  • 保留多数类全部信息,避免信息丢失。
  • 通过合成样本提高模型对少数类的识别能力。
缺点
  • 简单复制可能导致过拟合。
  • 合成样本方法(如SMOTE)复杂度较高。
示例

通过随机复制少数类样本,实现类别平衡。

from imblearn.over_sampling import RandomOverSampler 
ros = RandomOverSampler(random_state=42) 
X_res, y_res = ros.fit_resample(X, y)

7. Bootstrapping采样

概述

Bootstrapping是一种自助采样方法,通过有放回地从原始数据集中随机抽取样本,生成多个不同的训练集。这种方法广泛应用于统计推断和集成学习中,如随机森林。

应用场景

  • 估计模型的稳定性与泛化能力。
  • 集成学习中的基学习器训练。
优点
  • 增强模型的泛化能力,减少过拟合。
  • 易于并行化,实现高效训练。
缺点
  • 可能引入重复样本,增加计算冗余。
  • 对原始数据分布的依赖较强,样本多样性有限。
示例

在随机森林中,每棵决策树通过Bootstrapping采样生成不同的训练集。

from sklearn.ensemble import RandomForestClassifier 
rf = RandomForestClassifier(n_estimators=100, bootstrap=True, random_state=42) 
rf.fit(X, y)

8. SMOTE及其变种

8.1 介绍

**SMOTE(Synthetic Minority Over-sampling Technique)**是一种通过插值生成少数类合成样本的过采样方法。它通过在特征空间中对少数类样本进行插值,生成新的合成样本,缓解类别不平衡问题。

8.2 优点

  • 生成的合成样本更加多样化,减少过拟合风险。
  • 能有效提升模型对少数类的识别能力。

8.3 缺点

  • 可能在边界区域生成噪声样本,影响模型性能。
  • 对高维数据效果不佳,计算复杂度较高。

8.4 示例

使用SMOTE生成合成少数类样本。

from imblearn.over_sampling import SMOTE 
smote = SMOTE(random_state=42) 
X_res, y_res = smote.fit_resample(X, y)

8.5 SMOTE的变种

为了克服SMOTE的一些局限性,研究者提出了多种变种方法,如Borderline-SMOTE、ADASYN等。

  • Borderline-SMOTE:仅对边界区域的少数类样本进行过采样,避免在内部区域生成无意义样本。
  • ADASYN(Adaptive Synthetic Sampling):根据困难度自动调整某些少数类样本的过采样力度,注重生成难以分类的样本。
示例:使用Borderline-SMOTE
from imblearn.over_sampling import BorderlineSMOTE 
bsmote = BorderlineSMOTE(random_state=42) 
X_res, y_res = bsmote.fit_resample(X, y)

9. 总结与应用建议

在机器学习中,数据采样方法的选择对模型性能具有重要影响。以下是一些应用建议:

  • 了解数据分布:在选择采样方法前,需深入了解数据的分布特征,如类别比例、样本数量等。
  • 平衡与代表性的权衡:过采样和欠采样方法需要在平衡类别和保持数据代表性之间找到合适的平衡点。
  • 多尝试不同方法:不同采样方法适用于不同场景,多尝试并交叉验证可找到最佳方案。
  • 结合集成学习:如Bootstrapping与随机森林等结合,提升模型稳定性与泛化能力。
  • 注意过拟合:特别是在过采样方法中,需警惕合成样本导致的过拟合问题,通过正则化等手段加以缓解。

相关文章:

【机器学习】常见采样方法详解

在机器学习领域,数据采样(Sampling)是一项至关重要的技术。它不仅影响模型的训练效率,还直接关系到模型的性能与泛化能力。本文将从基础概念出发,逐步深入介绍机器学习中常见的采样方法,帮助读者全面理解并…...

使用瑞芯微RK3588的NPU进行模型转换和推理

使用边缘设备进行算法落地时,通常要考虑模型推理速度,NVIDA系列平台可以使用TensorRT和CUDA加速,瑞芯微RK3588的板子上都是Arm的手机GPU,虽然没有类似CUDA的加速计算方式,但是提供了NPU进行加速推理,本文说…...

Flutter项目试水

1基本介绍 本文章在构建您的第一个 Flutter 应用指导下进行实践 可作为项目实践的辅助参考资料 Flutter 是 Google 的界面工具包,用于通过单一代码库针对移动设备、Web 和桌面设备构建应用。在此 Codelab 中,您将构建以下 Flutter 应用。 该应用可以…...

【算法学习】DFS与BFS

目录 一,深度优先搜索 1,DFS 2,图的DFS遍历 (1),递归实现(隐士栈) (2),显示栈实现(非递归) 二,广度优先搜索 1,BFS 2,图的BF…...

100.16 AI量化面试题:监督学习技术在量化金融中的应用方案

目录 0. 承前1. 解题思路1.1 应用场景维度1.2 技术实现维度1.3 实践应用维度 2. 市场预测模型2.1 趋势预测2.2 模型训练与评估 3. 风险评估模型3.1 信用风险评估 4. 投资组合优化4.1 资产配置模型 5. 回答话术 0. 承前 本文通过通俗易懂的方式介绍监督学习在量化金融中的应用&a…...

基于deepseek api和openweather 天气API实现Function Calling技术讲解

以下是一个结合DeepSeek API和OpenWeather API的完整Function Calling示例,包含意图识别、API调用和结果整合: import requests import json import os# 配置API密钥(从环境变量获取) DEEPSEEK_API_KEY os.getenv("DEEPSEE…...

线性数据结构解密:数组的定义、操作与实际应用

系列文章目录 01-从零开始掌握Python数据结构:提升代码效率的必备技能! 02-算法复杂度全解析:时间与空间复杂度优化秘籍 03-线性数据结构解密:数组的定义、操作与实际应用 文章目录 系列文章目录前言一、数组的定义与特点1.1 数组…...

CentOS搭建PPPOE服务器

一、安装软件包 yum -y install rp-pppoe 二、配置服务器 1.修改配置文件 打开/etc/ppp/pppoe-server-options文件 nano /etc/ppp/pppoe-server-options 编辑为以下内容: # PPP options for the PPPoE server # LIC: GPL require-pap require-chap login …...

【报错】解决 RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE 报错问题

解决 RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE 报错问题 写在最前面问题描述可能的原因分析解决方案该命令的作用 结论 写在最前面 在多用户使用的服务器上,导致的环境变量的冲突和不匹配问题, 代码没有问题,但程序运行异常。…...

【C语言】C语言 文具店商品库存管理系统(源码+数据文件)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 系列文章目录 目录 系列文章目录一、设计要求1. 项…...

LangChain系列: 使用工具和工具包构建代理实战教程

让我们在LangChain中构建简单代理示例,以帮助我们理解代理的基本概念和构建块。通过保持简单,我们可以更好地掌握这些代理背后的基本思想,使我们能够在未来构建更复杂的代理。 什么是代理 LangChain官方文档有非常好的章节来介绍其代理的高级…...

布隆过滤器(简单介绍)

布隆过滤器(Bloom Filter) 是一种高效的概率型数据结构,用于快速判断一个元素是否可能存在于某个集合中。它的核心特点是空间效率极高,但存在一定的误判率(可能误报存在,但不会漏报)。 核心原理…...

C++ 利器:inline 与 nullptr

探秘 C 利器:inline 与 nullptr 引言 在 C 的浩瀚海洋中,有着许多实用且强大的特性,它们如同夜空中闪烁的繁星,照亮了开发者前行的道路。今天,我们要深入探索其中两颗耀眼的星星:inline 关键字和 nullptr …...

给一个单体项目加装Feign

1.导入pom坐标 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>4.1.2</version> </dependency> 2.主函数注解 EnableFeignClients public cl…...

可以使用Deepseek R1模型的平台集锦

最近Deepseek掀起了AI浪潮&#xff0c;就在今天百度文心一言和ChatGPT宣布要在近期实施免费开放&#xff0c;日渐减少的用户。Deepseek这么火爆&#xff0c;其官网却一直遭受攻击&#xff0c;访问速度很慢。自己本地部署&#xff0c;又负担不起硬件费用&#xff0c;相比之下&am…...

“探索1688平台:高效获取店铺商品信息的实用指南“

在电商领域&#xff0c;获取店铺所有商品信息对于商家进行数据分析、库存管理、竞品分析等方面具有重要意义。1688平台作为中国领先的B2B电商平台&#xff0c;提供了丰富的API接口供开发者使用&#xff0c;其中就包括获取店铺所有商品信息的接口。本文将详细介绍如何使用该接口…...

在fedora41中安装钉钉dingtalk_7.6.25.4122001_amd64

在Fedora-Workstation-Live-x86_64-41-1.4中安装钉钉dingtalk_7.6.25.4122001_amd64.deb 到官网下载钉钉Linux客户端com.alibabainc.dingtalk_7.6.25.4122001_amd64.deb https://page.dingtalk.com/wow/z/dingtalk/simple/ddhomedownload#/ 一、直接使用dpkg命令安装deb包报错…...

数据结构:图论入门

图论起源于欧拉对哥尼斯堡七桥问题的解决. 他构建的图模型将陆地用点来表示, 桥梁则用线表示, 如此一来, 该问题便转化为在图中能否不重复地遍历每条边的问题. 图论的应用 地图着色 在地图着色问题中, 我们用顶点代表国家, 将相邻国家之间用边相连. 这样, 问题就转化为用最少…...

有限状态系统的抽象定义及CEGAR分析解析理论篇

文章目录 一、有限状态系统的抽象定义及相关阐述1、有限状态系统定义2、 有限状态系统间的抽象关系&#xff08;Abstract&#xff09;2.1 基于函数的抽象定义2.2 基于等价关系的抽象定义 二、 基于上面的定义出发&#xff0c;提出的思考1. 为什么我们想要/需要进行抽象2. 抽象是…...

Apache Hive用PySpark统计指定表中各字段的空值、空字符串或零值比例

from pyspark.sql import SparkSession from pyspark.sql.functions import col, coalesce, trim, when, lit, sum from pyspark.sql.types import StringType, NumericType# 初始化SparkSession spark SparkSession.builder \.appName("Hive Data Quality Analysis"…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...