網(wǎng)站首頁 編程語言 正文
撰寫背景
面向數(shù)據(jù)分析的小白,水平有限,錯誤難免,歡迎指正。
什么是數(shù)據(jù)滑窗
進行機器學習時,一般都要涉及到劃分訓練集和測試集的步驟。特別地,在做數(shù)據(jù)預測時,一般把預測的依據(jù)(也就是歷史數(shù)據(jù))稱作X,把需要預測的數(shù)據(jù)稱為y。即首先把原始數(shù)據(jù)劃分為train_X, train_y這兩個訓練數(shù)據(jù)集和test_X, test_y這兩個測試數(shù)據(jù)集。
對于時間序列數(shù)據(jù)的預測,往往是建立由好幾個歷史數(shù)據(jù)預測下一時刻的未來數(shù)據(jù),這時候為了充分利用全部數(shù)據(jù),應該對原始數(shù)據(jù)集進行滑窗操作,如下圖所示。
這里展示的是多個特征的時間序列,其中每一行數(shù)據(jù)均屬于同一時刻。假設(shè),我們要以H( humidity)、PT(pressure)、PE(power)三個特征為預測依據(jù),取當前和上三個時刻共四個時刻的已知數(shù)據(jù)對下一時刻的PE(功率)進行預測,那么對于X數(shù)據(jù)集的滑窗就應該如上圖所示,而對y數(shù)據(jù)集的滑窗應該如下圖所示。
下面給出滑窗實例。
代碼實現(xiàn)
滑窗函數(shù)
def sliding_window(DataSet, X_width, y_width, gap = 1, multi_vector = None, X_data = True): ''' DataSet has to be as a DataFrame ''' if X_data: if multi_vector: a,b = DataSet.shape else: a = DataSet.shape[0] b = 1 c = (a-X_width-y_width-a%gap)/gap X = np.reshape(DataSet.iloc[0:X_width,:].values,(1,X_width,b)) for i in range(len(DataSet) - X_width - y_width): i += 1 if i > c: break j = i * gap tmp = DataSet.iloc[j:j + X_width,:].values tmp = np.reshape(tmp,(1,X_width,b)) X = np.concatenate([X,tmp],0) return X else: if multi_vector: print('y_data-error:expect 1D ,given %dD'%DataSet.shape[1]) return; else: a = DataSet.shape[0] c = (a-X_width-y_width-a%gap)/gap y = np.reshape(DataSet.iloc[X_width:X_width + y_width,0].values,(1,y_width)) for i in range(len(DataSet) - X_width - y_width): i += 1 if i > c: break j = i * gap + X_width tmp = DataSet.iloc[j:j + y_width,:].values tmp = np.reshape(tmp,(1,y_width)) y = np.concatenate([y,tmp]) return y
單特征時間序列
單特征時間序列是指僅有一個特征的一維時間序列,如股票收盤價、風電場風速數(shù)據(jù)、日營業(yè)額等。對單特征時間序列滑窗操作如下:
#DataSet訓練數(shù)據(jù)集 #X_width使用的歷史數(shù)據(jù)長度 #y_width要預測的數(shù)據(jù)長度 #X_data是否是X數(shù)據(jù)集 train_X = sliding_window(DataSet, X_width, y_width) train_y = sliding_window(DataSet, X_width, y_width, X_data = None)
假設(shè)訓練數(shù)據(jù)集是一個100*1的序列,使用24個數(shù)據(jù)預測未來的1個數(shù)據(jù),那么滑窗操作就將原數(shù)據(jù)做了這樣的變換:
多特征時間序列
多特征時間序列指時間序列的特征不止一個,如上文所舉的H、PT、PE三特征序列。這種數(shù)據(jù)一般使用在待預測的數(shù)據(jù)跟多個特征相關(guān)性較高的場合中,如氣象數(shù)據(jù)嵌入的風速預測、股市數(shù)據(jù)嵌入的收盤價格預測等。進行多特征時間序列滑窗操作如下:
#DataSet訓練數(shù)據(jù)集 #X_width使用的歷史數(shù)據(jù)長度 #y_width要預測的數(shù)據(jù)長度 #multi_vector是否為多特征 #X_data是否是X數(shù)據(jù)集 train_X = sliding_window(DataSet, X_width, y_width, multi_vector = True) test_y = sliding_window(DataSet, X_width, y_width, multi_vector = True, X_data = None)
假設(shè)訓練數(shù)據(jù)集是一個100*3的序列,使用24個數(shù)據(jù)預測未來的1個數(shù)據(jù),那么滑窗操作就將原數(shù)據(jù)做了這樣的變換:
注意事項
DataSet必須是DataFrame格式。
y數(shù)據(jù)集只能是一維。
總結(jié)
原文鏈接:https://blog.csdn.net/Chace_B/article/details/119487958
相關(guān)推薦
- 2023-03-26 C#?cefSharep控件的使用詳情_C#教程
- 2022-10-09 ASP.NET?Core?5.0中的Host.CreateDefaultBuilder執(zhí)行過程解析_
- 2022-04-23 Windows中將Nginx添加為服務的問題_nginx
- 2023-01-19 GO語言的控制語句詳解包括GO語言的指針語法_Golang
- 2023-01-09 React應用框架Dva數(shù)據(jù)流向原理總結(jié)分析_React
- 2022-03-06 使用用C++做一顆會跳動的愛心實例代碼_C 語言
- 2022-05-13 html頁面 加載完成后再刷新 一次
- 2022-06-16 golang?gorm更新日志執(zhí)行SQL示例詳解_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支