You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

这段Python机器学习代码中NumPy数组的reshape操作解析

时间序列预测数据预处理代码解析

这段代码是为循环神经网络(如LSTM)做时间序列预测的前置数据处理,核心是把一维时序数据转换成模型可接受的输入格式,下面逐部分解析:

1. 提取原始训练数据

training_set = dataset_train.iloc[:,1:2].values

从dataset_train这个DataFrame中提取第2列(索引范围1:2,左闭右开)的数据,转换为NumPy数组,这是后续处理的原始时间序列数据(比如股票价格、每日销量这类时序数据)。

2. 特征缩放

from sklearn.preprocessing import MinMaxScaler
sc = MinMaxScaler(feature_range=(0,1))
training_set_scaled = sc.fit_transform(training_set)

使用MinMaxScaler将原始数据缩放到0-1区间。循环神经网络对数据数值范围敏感,缩放后能避免数值差异导致的模型训练不稳定,fit_transform同时完成数据拟合(学习数据的最大值和最小值)和转换(将数据映射到目标区间)。

3. 确定训练集样本范围

Train_cap=(int(0.7*len(dataset_train)+60))

计算训练样本的最大索引:取原始数据集长度的70%,再加60。加60是因为后续要使用前60个时间步的数据预测下一个值,前60个数据无法生成有效训练样本,所以需要预留这部分数据。

4. 构造时序训练样本

X_train = []
y_train = []
for i in range(60,Train_cap):
    X_train.append(training_set_scaled[i-60:i,0])
    y_train.append(training_set_scaled[i,0])
X_train,y_train = np.array(X_train),np.array(y_train)

构造模型的输入特征X_train和预测标签y_train:

  • 对每个时间点i,用它之前连续60个时间步的数据(i-60到i-1)作为输入特征,当前时间点i的数据作为要预测的标签。
  • 循环结束后将列表转为NumPy数组,此时X_train的形状为(样本总数, 60),每个样本是长度为60的一维数组;y_train是(样本总数,)的一维数组。

5. 核心代码:重塑输入形状(你重点关注的行)

X_train = np.reshape(X_train,(X_train.shape[0],X_train.shape[1],1))

这行代码的作用是调整X_train的维度,使其符合循环神经网络的输入要求:

  • 循环神经网络(如LSTM)要求输入数据的格式为**(样本数量, 时间步长, 特征数)**。
  • 参数说明:
    • X_train.shape[0]:训练样本的总数;
    • X_train.shape[1]:每个样本包含的时间步长(这里是60);
    • 1:每个时间步对应的特征数量(这里只有1个特征,比如仅价格)。
  • 如果不做这个重塑,模型会因输入维度不匹配报错,因为它无法识别一维的时序输入,必须明确特征维度。

内容的提问来源于stack exchange,提问作者Mario

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 23:50:30