提问人:Дмитрий Прохоренко 提问时间:11/13/2023 最后编辑:Дмитрий Прохоренко 更新时间:11/14/2023 访问量:61
使用 LSTM 对时间序列进行分类
Classification timeseries with LSTM
问:
我需要从多个 csv 文件中分类时间序列,并且文件中的每个数据都是 LSTM 的单独时间序列
链接到数据集 https://drive.google.com/file/d/1jN1Cr32jf3Z211I4sWJQhAkZsnq51d-m/view?usp=sharing
在每个文件中,我都有下一个数据 时间,A,B,C,D 1,3,0,2,0 2,0,1,0,0 3,0,0,0,0 4,1,0,0,0 5,0,2,0,3
我需要帮助解决一个问题,如何使用 LSTM 对这个数组中的每个对象进行分类
从数据集加载数据后,我有下一个 np 数组
X_train (21, 5, 5) y_train (21,) X_test (9, 5, 5) y_test (9,)
X_train:
[[[1 0 0 0 0]
[2 0 1 0 0]
[3 0 0 0 0]
[4 1 0 1 0]
[5 0 1 0 0]]
[[1 1 0 0 0]
[2 1 0 1 0]
[3 0 1 0 0]
[4 0 0 1 0]
[5 1 1 0 0]]
[[1 1 0 0 1]
[2 0 0 0 0]
[3 0 0 0 0]
[4 1 1 1 0]
[5 0 0 0 1]]
[[1 0 0 0 0]
[2 0 0 0 0]
[3 0 0 0 0]
[4 1 1 1 1]
[5 0 1 1 0]]
[[1 1 1 0 0]
[2 1 1 0 0]
[3 0 0 0 0]
[4 1 0 0 0]
[5 0 0 1 0]]
[[1 1 1 0 0]
[2 0 0 1 0]
[3 0 0 1 0]
[4 1 0 0 0]
[5 0 1 1 1]]
[[1 1 0 0 0]
[2 1 1 0 1]
[3 1 0 0 1]
[4 1 0 1 1]
[5 1 1 0 1]]
[[1 2 0 0 0]
[2 0 1 0 0]
[3 2 2 0 0]
[4 0 0 0 0]
[5 2 2 0 0]]
[[1 0 0 0 2]
[2 0 0 0 0]
[3 0 2 0 0]
[4 2 0 2 0]
[5 0 2 0 0]]
[[1 2 0 0 0]
[2 0 0 0 0]
[3 0 2 0 0]
[4 1 0 2 0]
[5 0 0 0 0]]
[[1 1 0 0 0]
[2 0 0 0 0]
[3 0 0 0 2]
[4 0 0 0 2]
[5 0 0 2 0]]
[[1 2 2 2 0]
[2 0 2 2 0]
[3 0 1 1 0]
[4 0 0 0 0]
[5 2 0 0 0]]
[[1 0 0 0 0]
[2 0 0 0 0]
[3 0 0 0 0]
[4 0 0 0 2]
[5 0 2 0 0]]
[[1 2 2 2 0]
[2 2 0 0 0]
[3 2 0 0 0]
[4 2 0 0 1]
[5 0 2 2 0]]
[[1 2 0 0 0]
[2 0 1 0 0]
[3 2 0 0 0]
[4 1 1 1 2]
[5 0 1 3 0]]
[[1 3 0 0 0]
[2 0 0 0 0]
[3 0 2 0 0]
[4 2 0 1 0]
[5 0 1 0 0]]
[[1 0 0 0 0]
[2 0 0 0 3]
[3 1 0 0 0]
[4 0 0 1 0]
[5 0 0 0 0]]
[[1 2 1 0 0]
[2 0 1 0 0]
[3 0 3 0 0]
[4 0 0 1 0]
[5 0 1 1 0]]
[[1 0 2 0 0]
[2 0 3 0 0]
[3 0 0 0 0]
[4 0 0 1 0]
[5 2 0 0 0]]
[[1 0 0 0 0]
[2 0 1 0 0]
[3 0 0 0 0]
[4 0 0 1 0]
[5 3 2 0 0]]
[[1 0 0 0 0]
[2 3 2 2 2]
[3 0 0 0 0]
[4 1 0 0 0]
[5 0 0 0 1]]]
y_train:
[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2]
X_test:
[[[1 0 1 0 0]
[2 0 0 0 0]
[3 0 0 0 0]
[4 0 0 0 0]
[5 0 1 0 0]]
[[1 0 0 1 0]
[2 0 0 0 0]
[3 0 0 0 0]
[4 0 0 0 0]
[5 1 1 0 0]]
[[1 0 0 0 1]
[2 0 0 1 0]
[3 0 1 0 0]
[4 1 0 1 0]
[5 0 1 0 0]]
[[1 0 2 0 0]
[2 1 0 0 0]
[3 2 0 0 0]
[4 0 0 0 0]
[5 0 2 2 0]]
[[1 2 0 0 2]
[2 0 1 2 0]
[3 0 2 0 0]
[4 2 0 1 0]
[5 0 2 0 0]]
[[1 1 1 0 0]
[2 0 2 2 2]
[3 2 0 0 0]
[4 0 2 0 0]
[5 2 1 0 0]]
[[1 0 3 0 0]
[2 0 0 0 0]
[3 0 2 0 0]
[4 1 0 2 0]
[5 0 0 0 2]]
[[1 1 2 0 0]
[2 2 2 0 0]
[3 0 0 0 3]
[4 0 0 1 0]
[5 2 0 0 1]]
[[1 3 0 2 0]
[2 0 1 0 0]
[3 0 0 0 0]
[4 1 0 0 0]
[5 0 2 0 3]]]
y_test:
[0, 0, 0, 1, 1, 1, 2, 2, 2]
但是,如果我把这个数组给 LSTM,它会尝试将所有这些数组用作一个时间序列 但我需要从文件中对每个包含的数组进行分类
我如何使用这个数组进行 LSTM 分类以及我需要为此使用的模型?
import pandas as pd
import numpy as np
# import plotly as tf
import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout
from keras.optimizers import Adam
from keras.models import load_model
from keras.callbacks import ModelCheckpoint
# import plotly.graph_objects as go
import array
X_train = []
y_train = []
X_test = []
y_test = []
files_train = pd.read_csv('dataset/dataset_train.csv')
for i in files_train['filename']:
a = np.array(pd.read_csv('dataset/train/'+i))
X_train.append(a)
for i in files_train['feature']:
y_train.append(i)
files_test = pd.read_csv('dataset/dataset_test.csv')
for l in files_test['filename']:
b = np.array(pd.read_csv('dataset/test/'+l))
X_test.append(b)
for i in files_test['feature']:
y_test.append(i)
print(X_train)
print(y_train)
print(X_test)
print(y_test)
X_test = np.array(X_test)
X_train = np.array(X_train)
y_test = np.array(y_test)
y_train = np.array(y_train)
model = Sequential()
model.add(LSTM(128, input_shape=(5,5), activation='relu',
return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(128, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(3, activation='softmax'))
opt = keras.optimizers.Adam(learning_rate=0.01)
# Compile model
model.compile(
loss='sparse_categorical_crossentropy',
optimizer=opt,
metrics=['accuracy'],
)
model.fit(X_train,
y_train,
epochs=12,
validation_data=(X_test, y_test))
(21, 5, 5)
(21,)
(9, 5, 5)
(9,)
Epoch 1/12
1/1 [==============================] - 3s 3s/step - loss: 1.0939 - accuracy: 0.4286 - val_loss: 1.0917 - val_accuracy: 0.6667
Epoch 2/12
1/1 [==============================] - 0s 47ms/step - loss: 1.0741 - accuracy: 0.3810 - val_loss: 1.0730 - val_accuracy: 0.3333
Epoch 3/12
1/1 [==============================] - 0s 46ms/step - loss: 1.1335 - accuracy: 0.3333 - val_loss: 1.1097 - val_accuracy: 0.3333
Epoch 4/12
1/1 [==============================] - 0s 51ms/step - loss: 1.1399 - accuracy: 0.2857 - val_loss: 1.0743 - val_accuracy: 0.6667
Epoch 5/12
1/1 [==============================] - 0s 48ms/step - loss: 1.0948 - accuracy: 0.5714 - val_loss: 1.0509 - val_accuracy: 0.5556
Epoch 6/12
1/1 [==============================] - 0s 50ms/step - loss: 1.0255 - accuracy: 0.4286 - val_loss: 1.0155 - val_accuracy: 0.5556
Epoch 7/12
1/1 [==============================] - 0s 49ms/step - loss: 1.0266 - accuracy: 0.4762 - val_loss: 0.9607 - val_accuracy: 0.4444
Epoch 8/12
1/1 [==============================] - 0s 44ms/step - loss: 1.0367 - accuracy: 0.4286 - val_loss: 0.8943 - val_accuracy: 0.3333
Epoch 9/12
1/1 [==============================] - 0s 48ms/step - loss: 0.9418 - accuracy: 0.4286 - val_loss: 0.9485 - val_accuracy: 0.4444
Epoch 10/12
1/1 [==============================] - 0s 46ms/step - loss: 0.9855 - accuracy: 0.4286 - val_loss: 0.8503 - val_accuracy: 0.6667
Epoch 11/12
1/1 [==============================] - 0s 50ms/step - loss: 0.8922 - accuracy: 0.5714 - val_loss: 0.9614 - val_accuracy: 0.6667
Epoch 12/12
1/1 [==============================] - 0s 46ms/step - loss: 0.8229 - accuracy: 0.5714 - val_loss: 0.7544 - val_accuracy: 0.5556
a = np.array(pd.read_csv('up.csv'))
print (a.shape)
a = a.reshape(1, 5, 5)
print (a.shape)
predict = model.predict(a)
print (predict)
/usr/local/lib/python3.11/site-packages/keras/src/optimizers/legacy/adam.py:118: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.
super().__init__(name, **kwargs)
WARNING:tensorflow:Compiled the loaded model, but the compiled metrics have yet to be built. `model.compile_metrics` will be empty until you train or evaluate the model.
WARNING:tensorflow:No training configuration found in save file, so the model was *not* compiled. Compile it manually.
WARNING:tensorflow:No training configuration found in save file, so the model was *not* compiled. Compile it manually.
(5,5)
(1, 5, 5)
1/1 [==============================] - 0s 431ms/step
[[0.5621749 0.17702557 0.26079956]]
up.csv
time,A,B,C,D
1,0,0,0,0
2,0,0,0,0
3,0,0,0,0
4,1,1,1,1
5,0,1,1,0
答: 暂无答案
评论