机器学习的多维输入

时间:2021-05-11 06:17:15

标签: python numpy neural-network

我有一个 csv 文件,其中包含以下形式的数据:

Timestamp,Signal_1,Signal_2,Signal_3,Signal_4,Signal_5
2021-04-13 11:03:13+02:00,3,3,3,12,12
2021-04-13 11:03:14+02:00,3,3,3,12,12

现在我想创建一个神经网络来进行时间序列预测,所以为了做到这一点,我想将内容转换为一个 numpy 数组,以便我可以分配训练/测试集。 输入和输出应该是 5 维的(应该预测所有信号组)。目前我的代码如下所示:

import pandas
from matplotlib import pyplot
from sklearn.model_selection import train_test_split
from numpy import genfromtxt
filename = 'test.csv'
data = pandas.read_csv(filename , header=0, index_col=0)
my_data = genfromtxt('test.csv', delimiter=',')
print(data.shape)

print(type(my_data))
v, w, x, y, z = my_data

我知道缺少测试和训练部分的实际分配,但即使在这个阶段我也收到错误 ValueError: too many values to unpack (expected 5)

1 个答案:

答案 0 :(得分:1)

不确定您要解压的确切部分(看起来您尝试使用 Pandas 导入一个版本,而使用 numpy 导入一个版本),但错误是因为您的 my_data.shape = (3, 6),因为np.genfromtxt 不解释标头和时间戳列,这会导致 too many values to unpack

处出现 v, w, x, y, z = my_data 错误
array([[nan, nan, nan, nan, nan, nan],
       [nan,  3.,  3.,  3., 12., 12.],
       [nan,  3.,  3.,  3., 12., 12.]])

对于 numpy my_data 数组,您可以索引以删除第一行和第一列并转置以使其正确向上:

v, w, x, y, z = my_data[1:, 1:].T

这将为您提供一维数组:

>> v
array([3., 3.])

>> w
array([3., 3.])

>> x
array([3., 3.])

>> y
array([12., 12.])

>> z
array([12., 12.])

注意顺便说一句,如果您尝试使用 Pandas 数据框 data(即 v, w, x, y, z = data)做同样的事情,您实际上会得到分配的列标题字符串,而不是列本身。在这种情况下,您需要:

v, w, x, y, z = data.values.T

如果您也需要时间戳,使用 Pandas 导入可能更容易,因为它可以更轻松地处理混合数据,只需重置索引或从 index_col 调用中删除 read_csv

data = pandas.read_csv(filename, header=0)
u, v, w, x, y, z = df.values.T

这将为您提供 u 中的时间戳。