機器學習中的數據對齊

文章目錄

  • 前言
  • 數據集
  • 怎么理解數據
  • 數據對齊
  • 為什么偏偏是這樣對齊?

前言

在神經網絡中,我們往往會根據數據集構建訓練集、測試集,有時會有驗證集。但是,在構建完成后,如果直接將這些數據直接扔進模型訓練,輸入輸出上可能會對不上。

例如,如果我的數據集是 111111 維數組作為 xxx111111 維數組作為 yyy,測試集也是等長度的 111111 維數組,這個時候完全不需要在意輸入輸出問題。但如果數據集是 mmm111 維數組,每條數組長度為 lil_ili?1≤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_1x1?x2x_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
英文地址,請注明出處:http://en.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…