LSTM股价预测模型用MinMaxScaler归一化时报Timestamp类型错误如何解决
错误原因
核心问题为代码执行顺序错误,MinMaxScaler仅支持对数值类型数据做归一化运算,你传入的final_dataset中包含Timestamp类型的日期数据,无法转换为浮点型参与运算,因此抛出类型错误。
具体执行顺序问题如下:
- 你提前执行了
final_dataset=new_dataset.values,此时new_dataset还未删除Date列,final_dataset中已经存入了Timestamp格式的日期数据 - 后续执行的
new_dataset.drop("Date",axis=1,inplace=True)仅修改了new_dataset本身,不会同步更新已经完成赋值的final_dataset变量
修复方案
调整代码执行顺序,先完成日期列的处理再生成final_dataset,同时可删除冗余的MinMaxScaler重复初始化代码,修正后的代码片段如下:
import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline from keras.models import Sequential from keras.layers import LSTM,Dropout,Dense from matplotlib.pylab import rcParams rcParams['figure.figsize']=20,10 from sklearn.preprocessing import MinMaxScaler # 先处理日期列,再生成数据集 new_dataset.index=new_dataset.Date new_dataset.drop("Date",axis=1,inplace=True) scaler=MinMaxScaler(feature_range=(0,1)) final_dataset=new_dataset.values scaled_data=scaler.fit_transform(final_dataset) train_data=final_dataset[0:987,:] valid_data=final_dataset[987:,:] x_train_data,y_train_data=[],[] for i in range(60,len(train_data)): x_train_data.append(scaled_data[i-60:i,0]) y_train_data.append(scaled_data[i,0]) x_train_data,y_train_data=np.array(x_train_data),np.array(y_train_data) x_train_data=np.reshape(x_train_data,(x_train_data.shape[0],x_train_data.shape[1],1))
补充校验建议
可以在做归一化前执行print(new_dataset.dtypes),确认所有字段均为int/float等数值类型,避免其他非数值字段导致同类错误。
内容的提问来源于stack exchange,提问作者Black040
相关产品推荐
相关产品推荐

