这段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
相关产品推荐
相关产品推荐

