概述
第一次写文章的菜鸟,如果有错误,欢迎指正。
基本情况介绍:最近在做轨迹预测方面的工作,数据是某个路段的一条条独立的轨迹数据,每条轨迹大概200个样本点,我打算用10个时间步来预测下一个时间步的某个特征。代码是在jupyter notebook中编写的。
存在问题:每条轨迹样本点太短,单独训练一条轨迹或者每条轨迹依次导入模型训练 显然不现实;那么如果首尾拼接起来呢,如上面所说 用连续十个时间步预测下一个时间步,在数据的交界处,组成是个时间步的数据是由两段轨迹组成,这样似乎给模型训练带来不必要的小问题。
所用到的数据表格形式:
time | x | y | vx | vy | ax | ay |
1 | ||||||
2 | ||||||
3 | ||||||
4 |
我的思路是将每条轨迹(对应每个样本数据)分别放到xlsx文件的一个 sheet中,每个样本的数据个数可以不一样,然后分别读取到一个变量中,处理成我们想要的样子,最后再拼接起来。
首先读取数据
dataset = pd.ExcelFile("文件名.xlsx") #csv文件是没有sheet的
sheet=dataset.sheet_names#读取xlsx文件中每张表的名称
for name in sheet: #一个for循环遍历所有的表
locals()[name]=dataset.parse(name) #将每张表的数据放到对应名称的变量中(注意要用locals)
for i in range(1,23): #后面的23,其实是表的数量+1
dataset=locals()['dataset_' + str(i)]
#locals的作用可以自己查一下,后面[]内的是表 名,dataset_1,dataset_2,....,这些变量在上面已经赋值了,现在将其放入‘dataset’这个变量中
dataset.set_index(["time"], inplace=True)#设置表中‘time’所在列为索引
locals()['dataset_' + str(i)]=dataset#最后将dataset的数据再返回‘dataset_i'中,方便后面调用
归一化,并构建输入输出
for i in range(1,189): # 后面的为表的个数+1
dataset=locals()['dataset_' + str(i)]#数据读取到'dataset_i'中
columns = ['x','y','vx','vy','ax','ay'] #将表格中每列的数据归一化
for col in columns:
scaler = MinMaxScaler()
dataset[col] = scaler.fit_transform(dataset[col].values.reshape(-1,1))
locals()['x_' + str(i)]=dataset#构建输入特征数据,保存到'x_i'中
locals()['y_' + str(i)]=dataset.drop(columns=['vx','vy','ax','ay'], axis=1) #构建输出数据,保存到'y_i'中
如何构建十个时间步 输入数据 以及预测的特征数据(这部分引用的B站up主唐国梁Tommy一个视频里的内容,方便大家理解。视频地址:TensorFlow 2.0 基于LSTM多变量_共享单车使用量预测_哔哩哔哩_bilibili)
构建一个函数
def create_dataset(X, y, seq_len=10): # seq_len序列长度就是一个输入样本的长度,在这里就是,用前十个时间步的数据,来预测第十一个时间步的某个特征
features = []
targets = []
for i in range(0, len(x) - seq_len, 1):
data = x.iloc[i:i+seq_len] #输入数据,实际上是第(i+1)到第(i+seq_len)的数据,共有seq_len个数据
label = y.iloc[i+seq_len] # 标签数据,实际上是第(i+seq_len+1)个数据,也就是上面那段数据的后一个时间步的数据
# 保存到features和labels
features.append(data)
targets.append(label)
# 返回
return np.array(features), np.array(targets)
处理所有的‘x_i’和'y_i',然后拼接在一起
train_dataset, train_labels = create_dataset(x_1,y_1, seq_len=10)#调用上面构建的函数,为什么要把x_1和y_1单独拿出来呢,是为了方便后面的拼接,不知道有没有其他方便的算法
for i in range(2,151): #这里大概总样本数据的0.8作为训练集
dataset=locals()['x_' + str(i)]#将’x_i'和'y_i'的数据赋给一个中间变量,方便后面调用
labels=locals()['y_' + str(i)]
input_dataset, output_labels = create_dataset(dataset,labels, seq_len=10)
train_dataset = np.r_[train_dataset,input_dataset]
#这里得上下拼接用r,c为左右拼接
train_labels = np.r_[train_labels,output_labels]#最后两行代码,就随着for循环,将’x_i‘和‘y_i’中的数据不断拼接到train_dataset 和train_labels中
这样就构建好训练集啦,根据自己的数据特点,进行修改即可。
最后
以上就是健康花卷为你收集整理的关于如何用LSTM算法处理多样本数据(tensorflow)的全部内容,希望文章能够帮你解决关于如何用LSTM算法处理多样本数据(tensorflow)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复