机器学习的一百个概念(4)下采样

news2025/4/1 21:28:29

前言

本文隶属于专栏《机器学习的一百个概念》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见[《机器学习的一百个概念》


ima 知识库

知识库广场搜索:

知识库创建人
机器学习@Shockang
机器学习数学基础@Shockang
深度学习@Shockang

正文

在这里插入图片描述

基础概念与原理 🔍

1.1 下采样的定义

下采样(Downsampling)是机器学习中一个多义性概念,根据应用场景可分为两大类:

  1. 数据层面的下采样:在类别不平衡问题中,通过减少多数类样本数量来平衡数据分布的技术
  2. 特征层面的下采样:在深度学习中,特别是卷积神经网络(CNN)中用于降低数据维度或分辨率的操作

1.2 下采样的工作流程

在这里插入图片描述

1.3 理论基础

下采样的理论基础主要涉及以下几个方面:

  1. 统计学基础

    • 样本代表性
    • 随机性与均匀性
    • 概率分布保持
  2. 信息论基础

    • 信息熵
    • 数据压缩
    • 信息损失评估
  3. 采样理论

    • Nyquist采样定理
    • 香农采样定理
    • 混叠效应

应用场景与实现方法 💡

2.1 类别不平衡问题中的下采样

2.1.1 基本方法

在这里插入图片描述

  1. 随机下采样

    • 优点:实现简单,计算效率高
    • 缺点:可能丢失重要信息
    • 适用场景:数据量大,多数类样本具有较高冗余度
  2. 启发式下采样

    • NearMiss算法
    • Tomek Links
    • 编辑最近邻(ENN)
    • One-Sided Selection(OSS)
  3. 集成下采样

    • EasyEnsemble
    • BalanceCascade
    • UnderBagging

2.2 深度学习中的下采样

2.2.1 池化操作
  1. 最大池化(Max Pooling)
import torch.nn as nn

# 定义2x2的最大池化层
max_pool = nn.MaxPool2d(kernel_size=2, stride=2)
  1. 平均池化(Average Pooling)
# 定义2x2的平均池化层
avg_pool = nn.AvgPool2d(kernel_size=2, stride=2)
  1. 步幅卷积(Strided Convolution)
# 使用步幅为2的卷积进行下采样
conv_downsample = nn.Conv2d(in_channels=64, out_channels=128, 
                           kernel_size=3, stride=2, padding=1)

2.3 下采样的数学表达

对于图像处理中的下采样,其数学表达式为:

Y [ n ] = X [ M n ] Y[n] = X[Mn] Y[n]=X[Mn]

其中:

  • X [ n ] X[n] X[n] 是输入信号
  • M M M 是下采样因子
  • Y [ n ] Y[n] Y[n] 是下采样后的信号

高级技巧与最佳实践 🚀

3.1 自适应下采样策略

在这里插入图片描述

3.2 高级采样技术

  1. 基于密度的下采样
from sklearn.neighbors import KernelDensity

def density_based_undersampling(X, y, threshold):
    kde = KernelDensity(bandwidth=0.5)
    kde.fit(X[y==1])  # 针对多数类
    densities = kde.score_samples(X[y==1])
    return X[densities > threshold]
  1. 基于聚类的下采样
from sklearn.cluster import KMeans

def cluster_based_undersampling(X, y, n_clusters):
    majority_class = X[y==1]
    kmeans = KMeans(n_clusters=n_clusters)
    clusters = kmeans.fit_predict(majority_class)
    return majority_class[::len(majority_class)//n_clusters]

常见陷阱与解决方案 ⚠️

4.1 信息丢失问题

  1. 问题描述

    • 随机下采样可能丢失关键样本
    • 特征空间覆盖不完整
    • 决策边界变形
  2. 解决方案

    • 使用启发式采样方法
    • 实施分层采样
    • 采用集成学习策略

4.2 采样偏差

  1. 现象

    • 样本分布失真
    • 模型性能不稳定
    • 过拟合风险增加
  2. 缓解措施

    • 交叉验证
    • 多重采样
    • 数据增强

实战案例分析 💻

5.1 信用卡欺诈检测

import pandas as pd
from sklearn.utils import resample
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

# 加载数据
df = pd.read_csv('credit_card_fraud.csv')
majority = df[df.Class==0]
minority = df[df.Class==1]

# 下采样多数类
majority_downsampled = resample(majority, 
                              replace=False,
                              n_samples=len(minority),
                              random_state=42)

# 合并数据
balanced_df = pd.concat([majority_downsampled, minority])

# 训练模型
X = balanced_df.drop('Class', axis=1)
y = balanced_df['Class']
clf = RandomForestClassifier(random_state=42)
clf.fit(X, y)

5.2 图像分类中的下采样

import torch.nn as nn

class ConvNet(nn.Module):
    def __init__(self):
        super(ConvNet, self).__init__()
        self.conv1 = nn.Conv2d(3, 16, 3, padding=1)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(16, 32, 3, padding=1)
        self.fc = nn.Linear(32 * 8 * 8, 10)
        
    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))  # 下采样
        x = self.pool(F.relu(self.conv2(x)))  # 下采样
        x = x.view(-1, 32 * 8 * 8)
        x = self.fc(x)
        return x

未来发展趋势 🔮

  1. 智能采样

    • 基于强化学习的采样策略
    • 自适应采样率调整
    • 多目标优化采样
  2. 混合策略

    • 下采样与过采样结合
    • 多种采样方法集成
    • 迁移学习融合
  3. 新兴应用

    • 联邦学习中的采样策略
    • 边缘计算场景下的轻量级采样
    • 自监督学习中的采样技术

总结与建议 📝

下采样是机器学习中一个重要的数据处理技术,其成功应用需要:

  1. 深入理解问题场景

    • 数据分布特点
    • 业务需求约束
    • 计算资源限制
  2. 合理选择策略

    • 根据数据规模选择合适的采样方法
    • 考虑采样带来的影响
    • 权衡效率与效果
  3. 注重实践验证

    • 充分的实验对比
    • 严格的效果评估
    • 持续的优化改进

本文详细介绍了下采样的各个方面,从理论到实践,希望能够帮助读者更好地理解和应用这一技术。在实际应用中,建议读者根据具体场景选择合适的下采样策略,并注意避免常见陷阱。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2325219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NNI 适配 TensorRT10教程

引言 本文涉及两个框架及其版本分别为 NNI (Neural Network Intelligence) :3.0TensorRT:10.9.0.34 NNI 在文档 Speed Up Quantized Model with TensorRT里描述了如何使用 TensorRT 为NNI量化的模型实现加速,但是从NNI 的源代码https://gi…

多路径 TCP 调度的另一面

参考前面的文章 一个原教旨的多路径 TCP 和 MP-BBR 公平性推演,一直都破而不立,不能光说怎样不好,还得说说现状情况下,该如何是好。 如果 receiver 乱序重排的能力有限(拜 TCP 所赐),如果非要在多路径上传输 TCP&…

vcpkg安装指定版本的库

一.vcpkg安装 使用git将vcpkg源码克隆到本地制定目录(D:\vcpkg),并初始化 git clone https://github.com/microsoft/vcpkg.git cd vcpkg ./bootstrap-vcpkg.sh # Linux/macOS .\bootstrap-vcpkg.bat # Windows 如下图: 二.安…

【工具变量】上市公司供应链稳定性数据两个维度(2013-2023年)

供应链稳定性是指供应链在面对各种内外部因素的冲击和不确定性时,能够保持持续、顺畅运作的能力,而供应链稳定性指数是用于评估企业在其供应链管理中保持稳定性的一个重要指标。本分享数据参考钟涛(2022)、董浩和闫晴(…

Redis场景问题2:缓存击穿

Redis 缓存击穿是指在缓存系统中,大量请求(高并发访问)同时访问一个不存在于缓存中(一般是因为缓存过期或者数据未被加载到缓存)但在数据库中存在的热点数据,从而导致这些请求直接穿透缓存层,涌…

RocketMQ - 从消息可靠传输谈高可用

先稍微介绍下RocketMQ架构。 主从架构 Broker 集群:每个 Broker 分为 Master 和 Slave 角色,Master 负责读写,Slave 作为热备。 同步复制(SYNC_MASTER):消息写入 Master 后,需等待 Slave 同步完…

ES拼音分词自动补全实现

#测试拼音分词 POST /_analyze { "text":"如家酒店真不错", "analyzer": "pinyin" } #这里把拼音的首字母放到这里,也说明了这句话没有被分词,而是作为一个整体出现的 #还把每一个字都形成了一个拼音&#…

EFISH-SBC-RK3576 + 5G模组:无线工业相机与分布式AI质检‌

在智能制造与仓储物流场景中,传统有线工业相机存在部署成本高、灵活性差等痛点。‌eFish-SBC-RK3576‌ 通过 ‌5G无线传输 分布式NPU协同‌,实现跨产线、跨工厂的AI质检系统,检测效率提升300%,布线复杂度降低90%。 ‌1. 系统架构…

C/C++ 基础 - 回调函数

目录 前言 回调函数预备知识 函数指针 什么是函数指针 函数指针的语法 如何用函数指针调用函数 函数指针作为函数的参数 函数指针作为函数返回类型 函数指针数组 回调函数 什么是回调函数 为什么要用回调函数 怎么使用回调函数 总结 前言 在写项目的时候&#x…

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的消息队列:使用 RabbitMQ 实现异步处

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…

DeepSeek分析仿写选题应该怎么做?

目录 选题分析&#xff1a;AIGC在学术写作中的应用及其与作者背景的关系 1. 选题背景与意义 2. 研究问题 3. 研究方法 4. 主要发现 5. 研究贡献 6. 研究局限与未来方向 7. 结论 8. 未来研究方向 大家好这里是AIWritePaper官方账号&#xff0c;官网&#x1f449;AIWrit…

19840 Dijkstra求最短路2

19840 Dijkstra求最短路2 相较于1&#xff0c;数据增强了&#xff0c;要用堆来优化&#xff0c;也就是优先队列。 ⭐️难度&#xff1a;中等 &#x1f31f;考点&#xff1a;Dijkstra、最短路问题 &#x1f4d6; &#x1f4da; import java.util.*;public class Main {static…

Redis-08.Redis常用命令-有序集合操作命令

一.有序集合操作命令 ZADD key score 1 member1 [score2 member2]&#xff1a; zadd zset 10.0 a 10.5 b ZRANGE key start stop [WITHSCORES]: zrange zset 0 -1 为何顺序为a&#xff0c;c&#xff0c;b&#xff1f; 因为 zrange zset 0 -1 withscores zrange key start …

LLaMA-Factory使用实战

LLaMA-Factory使用实战 项目介绍 项目地址&#xff1a;https://github.com/hiyouga/LLaMA-Factory 中文文档&#xff1a;安装 - LLaMA Factory 快速开始文档&#xff1a;https://zhuanlan.zhihu.com/p/695287607&#xff08;推荐参考&#xff09; 远程服务器通过本地代理加…

读一本书,骑行万里路:与维乐 Angel Rise+骑行看世界

最近读到了一本名为《自行车改变的世界&#xff1a;女性骑行的历史》的书&#xff0c;才发现原来女性的骑行自由来得并不轻易&#xff0c;激励着每一位女性勇敢地踏上骑行之路。而我一直在使用的维乐坐垫品牌&#xff0c;除了产品专业之外&#xff0c;也一直都非常关注女性骑行…

【大模型】SpringBoot整合LangChain4j实现RAG检索实战详解

目录 一、前言 二、LangChain4j 介绍 2.1 什么是LangChain4j 2.2 LangChain4j 主要特点 2.3 Langchain4j 核心组件 三、RAG介绍 3.1 什么是RAG 3.2 RAG工作流程 3.2.1 补充说明 3.3 Embedding模型 3.3.1 RAG实际使用步骤 3.3.2 什么是Embedding 3.3.3 Embedding 技…

流动的梦境:GPT-4o 的自回归图像生成深度解析

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

北大人工智能研究院朱松纯:“中国的AI叙事” 存在认知偏差

3月29日&#xff0c;在2025中关村论坛通用人工智能论坛上&#xff0c;北京通用人工智能学院院长&#xff0c;北京大学人工智能研究院、智能学院院长朱松纯表示&#xff0c;目前&#xff0c;行业对AI的讨论几乎被大模型能力所占据&#xff0c;而基础学科、原始创新与智能本质的研…

习题1.26

解释题&#xff0c;说简单也简单&#xff0c;难在如何表达清楚。 首先解释下代码的变化 (defn expmod[base exp m](cond ( exp 0) 1(even? exp) (mod (square (expmod base (/ exp 2) m)) m):else (mod (* base (expmod base (- exp 1) m)) m)))(defn expmod[base exp m](co…

FPGA调试笔记

XILINX SSTL属性电平报错 错误如下&#xff1a; [DRC BIVRU-1] Bank IO standard Vref utilization: Bank 33 contains ports that use a reference voltage. In order to use such standards in a bank that is not configured to use INTERNAL_VREF, the banks VREF pin mu…