首页 > 解决方案 > 机器学习的多维输入

问题描述

我有一个 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

现在我想创建一个 NN 来进行时间序列预测,所以为了做到这一点,我想将内容转换为 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)

标签: pythonnumpyneural-network

解决方案


不确定您要解压缩哪个位(看起来您尝试使用 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.]])

对于 numpymy_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


推荐阅读