基于LSTM的article的最后一个示例,我想对我的数据应用类似的方法,在此picture中解释了如何通过索引标记感兴趣的列以及如何访问切片点并通过清晰且连续的循环编号获得绘图的最终绘图。
我有一个格式化的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循环排除感兴趣的列。我想知道我们是否有一种优雅的方法来标记那些感兴趣的列,并用Pandas将它们从整个列中排除,然后用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开始!而不是继续训练数据的最后一个周期!