【发布时间】:2021-09-23 01:11:01
【问题描述】:
我正在使用 ASHRAE RP-1043 冷水机多传感器数据集进行时间序列分类,该数据集针对每个冷水机故障和正常情况有 65 列和 3000 多行。而且我使用过 LSTM,我不确定我在这里使用的数据结构是否适合时间序列分类。下面是我从收集的数据集中创建的数据框的图像,其中包含多个冷水机组条件的记录(7 个故障和正常)。每条记录都标有相关的类(条件)。并从不同的文件构建数据集,服务于故障条件和正常条件。
火车数据形状如下
X_train.shape,y_train.shape
((81600, 65), (81600, 8))
但是对于 LSTM 输入需要是 3D 的。所以改造成如下。 (只有 1 个时间步长) # 使其成为 3d 输入 X_train = X_train.reshape(-1,1,65) X_train.shape,y_train.shape`
((81600, 1, 65), (81600, 8))
def create_nn_model():
model = Sequential()
model.add(LSTM(100, dropout=0.2, input_shape=(X_train.shape[1],
X_train.shape[2]),return_sequences=True))
model.add(Dense(100, activation='relu'))
model.add(Dense(8,activation='softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='adam', metrics=['accuracy'])
return model
这适用于我的模型,我可以毫无错误地适应。
但是我怎样才能增加 X_train 的时间步数(100 个时间步)
scaled_x_train.reshape(-1,100,65) X_train.shape,y_train.shape
((816, 100, 65), (81600, 8))
现在 X_train 已经过改造。但由于 X_train 和 y_train 的大小不同,我无法适应这个。我曾尝试以与 X_train 相同的方式重塑 y_train,但随后我将不得不返回序列,这不是我的要求。我的数据集结构(102000 行 65 列)有什么问题吗?我可以直接拆分上图中显示的数据以进行训练和测试,还是需要进行更多操作。感谢任何帮助
【问题讨论】:
-
即使在返回序列后,您也可以执行最后一个时间步,例如,如果您有
-
@Priya 感谢您的回复。但是我的数据框结构是否正确?我有点怀疑
-
我认为你的 DataFrame 很好,所有的冷水机分别分为故障和正常两类,但是在读入模型时,你需要继承一个 Dataset 类并使用 __getitem__(index) 并采取一次只能采集一台特定冷水机组的数据样本。如果您使用 pytorch 或 MXNet,这将很容易。
-
该数据集仅属于一台冷水机,有七种故障类型和正常状态。并且有8个类标签。我觉得这应该是一个多类分类
-
我在下面添加了一个答案。
标签: time-series lstm recurrent-neural-network multiclass-classification