如何将向量中的数字和分类值组合为LSTM的输入? - python

import pandas as pd
import numpy as np

rands = np.random.random(7)
days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
dates = pd.date_range('2018-01-01', '2018-01-07')

df = pd.DataFrame({'date': dates, 'days': days, 'y': rands})

df_days_onehot = pd.get_dummies(df.days)[days]
df[days] = df_days_onehot
df['target'] = df.y.shift(-1)

df.drop('days', axis=1, inplace=True)
df.set_index('date', inplace=True)

X = df.iloc[:, :-1].values
y = df.iloc[:, -1].values

我在上面共享了一个代码示例。我的问题是如何将数字变量和分类变量结合起来作为LSTM的输入?

输入向量应如何?

是否应该像[0.123,0,1,0,0 ...](如代码中的X)dim =(1,8)?
它应该像[0.123,[0,1,0,0 ...]] dim(1,2)
还是有特定的方式将输入传递给ANN或RNN等。如果是,它是什么,为什么我们应该使用它们(优点/缺点)?

我阅读了有关嵌入的内容,但由于我想学习所有这些背后的逻辑,因此对我来说解释还不够。

像这样

model = Sequential()
model.add(LSTM(64, batch_input_shape=(batch_size, look_back, 1), stateful=True, return_sequences=True))
model.add(Dropout(0.3))
model.add(LSTM(32, batch_input_shape=(batch_size, look_back, 1), stateful=True))
model.add(Dropout(0.3))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer=adam)
model.fit(trainX, trainY, epochs=100, batch_size=batch_size, verbose=2, shuffle=False)

任何指导,链接,解释或帮助都将适用...祝您有愉快的一天。

参考方案

通常,在处理各种范围的输入(例如标准化等)时,可以查看多种预处理。热门表示无疑是表示类别的一种好方法。

当类别元素过多时,会使用嵌入,这会使一种热编码变得非常大。它们提供了编码给定输入的向量表示形式(可能是可训练的)。您可以在下面的链接中阅读有关它们的更多信息。嵌入的使用在NLP中非常普遍。

https://towardsdatascience.com/deep-learning-4-embedding-layers-f9a02d55ac12

除此之外,您还可以利用Keras建模支持多个输入层这一事实。

对于您的特定情况,这是一个虚构的示例,可以帮助您入门。同样,我添加了一些密集的隐藏层只是为了说明这一点。应该自我解释

X1 = rands  
X2 = df_days_onehot
Y = np.random.random(7)

float_input = Input(shape=(1, ))
one_hot_input = Input(shape=(7,) )

first_dense = Dense(3)(float_input)
second_dense = Dense(50)(one_hot_input)

merge_one = concatenate([first_dense, second_dense])
dense_inner = Dense(10)(merge_one)
dense_output = Dense(1)(dense_inner)


model = Model(inputs=[float_input, one_hot_input], outputs=dense_output)


model.compile(loss='mean_squared_error',
              optimizer='adam',
              metrics=['accuracy'])

model.summary()

model.fit([X1,X2], Y, epochs=2)

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

Python ThreadPoolExecutor抑制异常 - python

from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED def div_zero(x): print('In div_zero') return x / 0 with ThreadPoolExecutor(max_workers=4) as execut…

如何用'-'解析字符串到节点js本地脚本? - python

我正在使用本地节点js脚本来处理字符串。我陷入了将'-'字符串解析为本地节点js脚本的问题。render.js:#! /usr/bin/env -S node -r esm let argv = require('yargs') .usage('$0 [string]') .argv; console.log(argv…