【问题标题】:Multidimensional Input for Machine Learning机器学习的多维输入
【发布时间】:2021-08-01 12:10:39
【问题描述】:

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

【问题讨论】:

  • my_data 变量具有非数字数据(标题行和时间戳列)的 NaN 值,最多可添加 6 列。

标签: python numpy neural-network


【解决方案1】:

不确定您要解压缩的确切位(看起来您尝试使用 pandas 导入一个版本,使用 numpy 导入一个版本),但错误是因为您的 my_data.shape = (3, 6),作为标题和时间戳列不会被np.genfromtxt 解释,这会导致v, w, x, y, z = my_data 出现too many values to unpack 错误

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 导入可能更容易,因为它更容易处理混合数据,只需重置索引或从您的 read_csv 调用中删除 index_col

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

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

【讨论】:

  • 谢谢,这解决了我的问题。只需 2 个快速问题。 .T 有什么作用?有没有办法让我也包括时间戳?
  • @Zerox .T 转置行和列,因为默认情况下,它会尝试将两行解压缩到您的 5 个变量中,而您希望解压缩 5 列;)我将编辑时间戳位的答案
  • 熊猫解决方案正是我想要的。非常感谢!
  • @Zerox 没有问题!很高兴它有帮助 =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 2016-09-26
  • 2017-08-14
  • 2020-03-01
  • 2021-05-09
  • 2021-01-18
  • 2018-03-23
相关资源
最近更新 更多