Основываясь на последнем примере этой статьи для LSTM, я хотел бы применить аналогичный подход к моим данным, который я объяснил на этой картинке , как я маркирую заинтересованные столбцы с помощью индексации и как я хотел бы получить доступ к точке среза и получить окончательный график по чистому и непрерывному номеру цикла.
У меня есть отформатированный файл csv , который выглядит как матрица [NxM], где N = 40 общее количество циклов (отметок времени) и M = 1440 пикселей. Для каждого цикла у меня есть 1440 пикселей, соответствующих 1440 пикселям. как следующее:
timestamps[row_index] | feature1 | feature2 | ... | feature1439 | feature1440 |
-----------------------------------------------------------------
1 | 1.00 | 0.32 | 0.30 | 0.30 | 0.30 |
2 | 0.35 | 0.33 | 0.30 | 0.30 | 0.30 |
3 | 1.00 | 0.33 | 0.30 | 0.30 | 0.30 |
... | .... | .... | .... | .... | .... |
| -1.00 | 0.26 | 0.30 | 0.30 | 0.30 |
| 0.67 | 0.03 | 0.30 | 0.30 | 0.30 |
30 | 0.75 | 0.42 | 0.30 | 0.30 | 0.30 |
________________________________________________________________________________
31 | -0.36 | 0.42 | 0.30 | 0.30 | 0.30 |
... | .... | .... | .... | .... | .... |
40 | 1.00 | 0.34 | 0.30 | 0.30 | -1.00 |
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
df = pd.read_csv('Train.csv', header=None)
# I'm not sure what the label-column is, so i use df[0]
# and exclude this colums in the data via df.loc[:,df.columns!=0]
trainX,testX,trainY,testY = train_test_split(df.loc[:,df.columns!=0],df[0], test_size=0.2, shuffle=False)
Задача 1 До сих пор я просто мог исключить свои заинтересованные столбцы, используя этот цикл for. Мне было интересно, если у нас есть изящный способ обозначить эти заинтересованные столбцы и исключить их из целых столбцов с помощью панд и заменить его на df[0]
?!
import pandas as pd
data_train = pd.read_csv("D:\train.csv", header=None)
#select interested columns to predict 980 out of 1440
j=0
index=[]
for i in range(1439):
if j==2:
j=0
continue
else:
index.append(i)
j+=1
Y_train= data_train[index]
data_train = data_train.values
print("data_train size: {}".format(Y_train.shape))
Задача 2 Я бы хотел разделить набор данных на набор поездов и тестовый набор таким образом, чтобы:
Поезд содержит [1-30] меток времени. Информация
Тестовый набор содержит [31-40] меток времени. Информация
Проблема в том, что я не смог добиться правильного непрерывного графика после обучения NN, скорее всего, из-за неправильной техники разделения данных, которую я использовал с помощью train_test_split
, но никогда не пробовал TimeSeriesSplit
следующим образом:
trainX, testX, trainY, testY = train_test_split(trainX,trainY, test_size=0.2 , shuffle=False)
учитывая, что я использовал shuffle=False
и ожидаю, что 0,2 из конца данных будет считаться тестовыми данными, и я могу получить их правильно, но все равно не могу получить доступ к числу циклов, которое считаются тестовыми данными, поэтому, когда я строю график, он начинается с 0! вместо продолжения последнего цикла данных поезда!
![img](https://i.imgur.com/8nLoteC.jpg)