机器学习中的数据对齐

文章目录

  • 前言
  • 数据集
  • 怎么理解数据
  • 数据对齐
  • 为什么偏偏是这样对齐?

前言

在神经网络中,我们往往会根据数据集构建训练集、测试集,有时会有验证集。但是,在构建完成后,如果直接将这些数据直接扔进模型训练,输入输出上可能会对不上。

例如,如果我的数据集是 111111 维数组作为 xxx111111 维数组作为 yyy,测试集也是等长度的 111111 维数组,这个时候完全不需要在意输入输出问题。但如果数据集是 mmm111 维数组,每条数组长度为 lil_ili1≤i≤m1\le i\le m1imiii 为整数),而且 mmmlil_ili 均不相等,最终结果却需要为每个 xxx 生成一个 y^\hat{y}y^,这就明显对不上。

因此,在这种情况下,xxxyyy 的长度需要额外的修整。该怎么做呢?

数据集

为了更好地说明这个例子,我们首先得找到一些数据集。我们其实可以直接使用最粗暴的方法:自己构建。

就举一个最简单的例子吧,我们要找一找sincos的曲线关系。这样的话,神经网络传入的维度就非常讲究。

总之,我们先构建数据集。比如说:

我们截取x∈[0,75]x\in[0, 75]x[0,75],并且把步长调整为0.10.10.1,这样每条数据就有750750750个步长。

然后,我们令y=sin⁡(x)y=\sin(x)y=sin(x)z=cos⁡(2x)+0.3z=\cos(2x)+0.3z=cos(2x)+0.3

就像这样:

import numpy as npBATCH_MAX:int = 50
TRAIN_SIZE:int = int(BATCH_MAX * 0.6)
VALID_SIZE:int = int(BATCH_MAX * 0.2)x:np.array = np.arange(0, 75, 0.1, dtype = np.float64)
SAMPLE_SIZE:int = x.shape[0]y:np.array = np.array(np.array([np.sin(x + item) + 0.03 * np.random.normal(0, 1, size = SAMPLE_SIZE) for item in range(BATCH_MAX)]).tolist()
)
z:np.array = np.array(np.array([np.cos(2 * (x + item)) + 0.3 + 0.03 * np.random.normal(0, 1, size = SAMPLE_SIZE) for item in range(BATCH_MAX)]).tolist()
)

似乎很简单。

我们来试着画一下,看看长什么样:

import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocatorPLOT_SAMPLE:int = 3
plt.figure(figsize = (18, 10))for i in range(1, PLOT_SAMPLE + 1):location = 310 + iplt.subplot(location)plt.title(f'sample{i}')plt.gca().xaxis.set_major_locator(MultipleLocator(5))plt.xlim(0, 80)plt.plot(x, y[i], label = 'sin')plt.plot(x, z[i], label = 'cos')plt.legend(loc = 'best')plt.grid(linestyle = '--')
plt.show()

可以看到效果是这样的:

数据集的样子

看上去很完美。

怎么理解数据

这种数据其实相对来说比较好理解。主要场景就是:

我从很长两段采样中取了若干段等长的数据,两段采样控制了时间序列是等同的。

虽然在这段数据中确实没有体现出时间的概念ʅ(´◔౪◔)ʃ

其中,采样的序列片段之间,存在一定的联系。

我们先假装不知道这两段之间是什么联系,总之就是看上去是有亿点点关联(´・ω・`)

既然理解了数据,接下来我们就对齐一下。

数据对齐

我们训练的时候往往需要将两条曲线放在一起才算找规律。但是,我们找到规律之后,要运用规律,只能输入一条曲线。毕竟,我们的根本任务是用一条曲线预测另外一条曲线,而不是又来两条曲线继续训练。

那么,更大的问题是,我们具体而言要怎么对齐?

时间片和时间片对齐?看着不太靠谱,因为我们是用一整段数据去预测另一整段数据,而不是截取其中的若干个时间片,然后预测下一个时间片。

其实非常可笑的是,由于三角函数的周期性非常有特点,也就是波峰波谷呈现出极强的一致性,甚至没有极大值和最大值不同的问题,所以用时间片分析算是一种误打误撞。

为了让你看出有多误打误撞,下一篇文章会讲。这里只留下一个截图:

误打误撞的拟合

是不是很可笑?

数组和数组对齐?看着确实是这个道理。

试试?

也就是说,每次只需要塞进去一条yyy和一条zzz就好了对吧。

怎么配呢?

其实如果翻看tensorflow的文档,就会发现,其实每一个常见的神经网络方法都有一个注释:

Input shape:N-D tensor with shape: `(batch_size, ..., input_dim)`.The most common situation would bea 2D input with shape `(batch_size, input_dim)`.

那这可太棒了!

既然我们每条数据都有750750750yyyzzz,那也就是说其中有一个数据就是750750750。同时,由于我们最终的目标是找到z=f(y)z=f(y)z=f(y),所以另一个数字就是111

哪怕我真的完全不懂神经网络横是什么竖是什么,这个二维的东西,最多试222次也就出来了。于是,最终目标也就是构建一个输入750750750、输出111的神经网络。

为什么偏偏是这样对齐?

当然,光是尝试成功了可不太行。我们得知道为什么是(750,1)(750,1)(750,1)

首先,我们需要知道,无论是tensorflow还是pytorch,都有一个习惯性的写法,那就是将输入整理为(n_samples, n_features)的矩阵。

别问为什么,因为这个为什么甚至能追溯到键盘为什么是WASD塞在一起,就是一个习惯问题。

那么,在接受这个习惯之后,我们应该怎么理解这个矩阵?

我们还是拿这个例子说明。首先,字面意思理解的话,前面是样本数,后面是特征数。样本数还好理解,有多少就是多少。对于一个序列片段,我们有750750750yyyzzz,那么样本数就是750750750

那,特征数是多少?

我们常说,主成分分析的时候,把众多特征减少为主要特征,并构建映射关系,说的实际上就是将x1x_1x1x2x_2x2…\ldotsxnx_nxn筛除大部分没啥用的,最后只留下少数几个。这里的xxx就是特征。

那么,对应到我们现在这里,特征是什么呢?是xxx嘛?当然不是,因为我们的目标是找到z=f(y)z=f(y)z=f(y),而不是找到z=f(x)z=f(x)z=f(x)。所以实际意义上的特征有且只有111个,即yyy

所以才是(750,1)(750,1)(750,1)

当然啦,这个案例比较简单,每个yyy都有且只有一个唯一对应的zzz。如果这里的yyy是多维的呢?比如说,他是nnn张长aaabbb的图像,两个维度的数据应该如何配置输入输出?

其实也是一样的。最终也就只有特征数是最关键的,所以,最终就是:(n,a,b)(n,a,b)(n,a,b)

当然啦,我知道后面还有很多内容,但一篇的篇幅有限,我们慢慢来。

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

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

相关文章

机器学习:更多分类回归算法之决策树、SVM、KNN

下面介绍的这几种算法,既能用于回归问题又能用于分类问题,接下来了解下吧。 决策树 可参考: 决策树(Decision Tree) | 菜鸟教程 决策树(Decision Tree)是一种常用的监督学习算法,可用…

Vue 整合 Vue Flow:从零构建交互式流程图

目录引言目的适用场景环境准备基础组件 (index.vue)自定义组件 (矩形、菱形等)RectangleNode.vue (矩形节点):DiamondNode.vue (菱形节点):ImageNode(自定义图片节点):操作实现 (#操作实现) 拖拽节点 (#拖拽节点) 连线 (多连接点) 删除节点 …

C# WPF - Prism 学习篇:搭建项目(一)

一、前期准备开发工具:Visual Studio 2022二、创建项目1、创建WPF 应用“WpfApp.StudyDemo”:2、项目结构如下: 三、安装 Prism1、选中项目“WpfApp.PrismDemo”,在右键菜单中选择“管理 NuGet 程序包(N)...”。2、在搜索框中输入…

单片机 基于rt-thread 系统 使用 CCM内存

一、开发环境 开发板:野火stm32f407 系统:rt-thread V4.1.1 二、链接脚本配置 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ****************************…

【UnityAssetBundle】AB包卸载资源

AB包的卸载高效稳定游戏开发的强制要求,它解决了资源管理中的内存泄漏问题,为动态的内容加载、热更新、大型世界的构建提供了内存保障,最终提升了游戏性能、稳定性和用户体验。卸载资源方式一(推荐使用):卸…

【万字长文】深度学习2 yolov5修改为自己的数据集

数据预处理 使用labelme可以直接导出适用于yolo模型的txt文本数据,也可以直接导出默认的json数据结构,后面我会提供代码进行转换。自行进行标注,图片与标注一一对应,更多要求不赘述。因为我做最简单的检索模型,不做切…

ubuntu18编译RealSense SDK 2.0

参考文章:https://dev.intelrealsense.com/docs/compiling-librealsense-for-linux-ubuntu-guide1、安装依赖 sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade sudo apt-get install libssl-dev libusb-1.0-0-dev libud…

算法学习笔记:9.Kruskal 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题

在图论的众多算法中,Kruskal 算法以其简洁高效的特性,成为求解最小生成树(Minimum Spanning Tree,MST)的经典方法。无论是在通信网络的优化设计、电路布线的成本控制,还是在计算机考研 408 的备考过程中&am…

Vue+Openlayers加载OSM、加载天地图

文章目录1. 介绍2. 加载底图2.1 加载默认OSM地图2.2 加载天地图1. 介绍 Openlayers官网:https://openlayers.org/ 安裝依赖:npm i ol 2. 加载底图 参考博客: vueopenlayers环境配置:https://blog.csdn.net/cuclife/article/det…

Python处理电子表格文件库之pyexcel使用详解

概要 pyexcel是一个功能强大的Python第三方库,专门用于处理各种格式的电子表格文件。核心价值在于提供了统一的接口来读取、写入和操作Excel、CSV、ODS等多种电子表格格式,极大简化了数据处理工作流程。与传统的单一格式处理库不同,pyexcel采用了插件化架构,使开发者能够通…

【网络安全】恶意 Python 包“psslib”仿冒 passlib,可导致 Windows 系统关闭

文章目录恶意 Python 包“psslib”仿冒 passlib如何避免psslib的威胁恶意 Python 包“psslib”仿冒 passlib Socket 的威胁研究团队发现了一个名为 psslib 的恶意 Python 包,旨在以提供密码安全功能为幌子突然关闭 Windows 系统。 该软件包由威胁行为者使用别名 u…

ai之对接电信ds后端服务,通过nginx代理转发https为http,对外请求,保持到达第三方后请求头不变

前置环境: 在微信小程序中嵌入H5页面(智能客服),需要让h5页面在https的域名服务器上。即通过 nginx 部署成web服务,还得配置域名和端口443访问。电信的第三方deepseek服务 ,只接收http请求,暂未…

第十四节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - Flask 后端 生产部署讲解

Vben5 系列文章目录 💻 基础篇 ✅ 第一节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 ✅ 第二节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - Python Flask 后端开发详解(附源码) ✅ 第三节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入…

Unity开发如何解决iOS闪退问题

一、iOS闪退常见原因及排查方法1. 内存问题(最常见原因) 症状表现: 设备发热后闪退 加载大型场景时崩溃 控制台出现EXC_RESOURCE RESOURCE_TYPE_MEMORY日志 解决方案: // 内存监控代码 void Update() { Debug.Log($"内存使用…

【机器学习笔记 Ⅲ】5 强化学习

强化学习(Reinforcement Learning, RL) 强化学习是机器学习的一个分支,其核心思想是让智能体(Agent)通过与环境(Environment)的交互学习最优策略(Policy),以最…

pytorch深度学习-卷积神经网络CNN-MNIST-gpu加速

一、为什么需要 CNN?从图像识别的 “麻烦” 说起假设你想让电脑识别一张图片里有没有猫。 如果用传统神经网络:一张 100100 的彩色图片,有 100100330000 个像素点,每个像素点都是一个输入神经元。传统网络需要每个输入神经元和隐藏…

【阿里巴巴JAVA开发手册】IDE的text file encoding设置为UTF-8; IDE中文件的换行符使用Unix格式,不要使用Windows格式。

问题:当使用 IDEA SSH 远程开发时,SFTP 同步的 Windows 本地编辑的 config/plugin_config 文件文本内容中 “换行符”与 Unix、Linux 的文件文本内容换行符字符集不一致,导致 docker 容器中自定义 /opt/seatunnel/bin/install_plugin 在执行以…

自动驾驶ROS2应用技术详解

自动驾驶ROS2应用技术详解 目录 自动驾驶ROS2节点工作流程自动驾驶感知融合技术详解多传感器数据同步技术详解ROS2多节点协作与自动驾驶系统最小节点集 1. 自动驾驶ROS2节点工作流程 1.1 感知输出Topic的后续处理 在自动驾驶系统中,感知节点输出的各种Topic会被…

Redis底层实现原理之订阅发布机制

文章目录1. 通知类型2. 实现原理2.1 Pub/Sub2.1.1 基础知识点2.1.2 频道和订阅者的存储通知原理2.1.3 键空间通知2.1.4 客户端消费2.1.5 缺陷2.2 Redis Stream2.2.1 基础知识点2.2.2 基础数据结构2.2.3 消费者组管理2.2.4 消息和消费者持久化2.2.5 消息生产和消费2.2.6 消费者拉…

【MATLAB代码】AOA与TDOA混合定位例程,自适应基站数量,二维,可调节锚点数量。订阅专栏后,可直接查看matlab源代码

本文给出一个matlab代码,用于在二维平面上,使用AOA的角度测量和TDOA的到达时间差的测量,来达到对未知点的精确定位。最后输出定位示意图、真实点坐标、仅AOA定位坐标与误差、仅TDOA定位的坐标与误差、AOA+TDOA混合定位的坐标与误差。订阅专栏后可直接查看源代码,粘贴到MATL…