基于Python的现货价格预测滑动窗口实现及报错解决求助
问题排查与修正方案
错误原因
- 直接报错原因:你定义的
window函数要求传入lp、ls两个必填位置参数,但调用时仅传入了1个参数,触发参数缺失错误。 - 深层逻辑问题:原有函数变量命名混乱、核心逻辑被注释,和你描述的滑动窗口算法完全不匹配,无法完成特征-标签对的切分。
修正后代码
对齐你描述的算法逻辑,实现步长为lpt、冗余数据反向对齐、输出(xi, yi)样本对的功能:
import pandas as pd import numpy as np # 读取数据集 df = pd.read_csv('spot-prices-2021-05-16.csv', delimiter=';') price_series = df['SpotPrice'].values # 提取价格序列 def sliding_window(price_arr, lsw, lpt): """ 按描述的滑动窗口逻辑切分样本 :param price_arr: 历史价格序列数组 :param lsw: 滑动窗口(特征)长度 :param lpt: 待预测窗口(标签)长度 :return: 特征数组X,标签数组Y """ lp = len(price_arr) # 计算样本数量,向下取整,对齐公式ns = ⌊(lp − lsw)/lpt⌋ ns = int(np.floor((lp - lsw) / lpt)) if ns <= 0: raise ValueError("窗口长度设置过大,无法生成有效样本") # 处理冗余数据,从序列末尾反向对齐取数 start_idx = lp - (ns * lpt + lsw) X, Y = [], [] for i in range(ns): # 计算当前样本的特征起止位置 x_start = start_idx + i * lpt x_end = x_start + lsw # 计算当前样本的标签起止位置 y_start = x_end y_end = y_start + lpt xi = price_arr[x_start:x_end] yi = price_arr[y_start:y_end] X.append(xi) Y.append(yi) return np.array(X), np.array(Y) # 示例参数:滑动窗口长度lsw=12,预测窗口长度lpt=4,可按需调整 lsw = 12 lpt = 4 X, Y = sliding_window(price_series, lsw, lpt) # 输出结果验证 print(f"生成样本数量:{len(X)}") print(f"每个特征维度:{X.shape[1]},每个标签维度:{Y.shape[1]}") print("第一个样本特征:", X[0]) print("第一个样本标签:", Y[0])
输出说明
运行上述代码后会输出:
- 生成的有效样本总数,和你公式计算的ns一致
- 每个特征、标签的维度,对应lsw和lpt的设置
- 首条样本的特征和标签值,可验证切分逻辑是否符合要求
内容的提问来源于stack exchange,提问作者NIrbhay Mathur
相关产品推荐
相关产品推荐

