【问题标题】:Numpy Array with different types of features for sci-kitLearn dataset API in Python具有不同类型特征的 Numpy 数组,用于 Python 中的 sci-kitLearn 数据集 API
【发布时间】:2016-04-12 12:40:38
【问题描述】:

我正在尝试使用 sci-kitLearn 对从 json 文件解析的数据集执行机器学习。要在 sci-kitLearn 中使用数据集 API,我需要一个形状为 (n_samples * n_features) 的 Numpy 数组。

我将此数据编码为嵌套 Python 列表,其中列表大小为“X”(大量样本),每个元素的类型为 [int, float, int](3 个特征)。

例如:[ [int, float, int] , [int, float, int] , ... ]

我需要将其转换为一个 numpy 数组,该数组将与 sci-kitLearn 数据集一起正常工作,但我似乎无法创建一个支持每列不同类型的 numpy 数组。

Numpy 数组通常是同质的,但我很难相信数据集中不同类型的特征/列仍然是使用此 API 的缺陷,而且我已经看到使用不同类型特征的示例。

加载您自己的数据集的文档很差:http://scikit-learn.org/stable/tutorial/basic/tutorial.html。任何帮助创建 numpy 数组和/或使用数据集 API 将不胜感激。

我的代码贴在下面(尽管问题是接下来要做什么):

with open('bc_mp_at_blockchain.json') as data_:
mp_json = json.load(data_)

with open('bc_tv_at_blockchain.json') as data:
    tv_json = json.load(data)

# access dictionary of length 1 that list of values
list_of_mpdata = mp_json['values']
list_of_tvdata = tv_json['values']

# ensure both sets of data start on the same day
assert ( list_of_mpdata[0]['x'] == list_of_tvdata[0]['x'] )

#concatenate lists as necessary
combined_list = []
for mp_dict, tv_dict in zip(list_of_mpdata, list_of_tvdata) :
    combined_list.append([ mp_dict['x'], mp_dict['y'], tv_dict['y'] ])

# combined_list is now a list of [int,float,int] lists

【问题讨论】:

  • 回答你关于特性的问题,我认为这并不重要——所有的值都可以用浮点数表示。您能否提供您尝试使用的 scikit-learn 方法的链接?
  • 该函数接受 n_samples * n_features 数组作为浮点数(我每天都使用这个)。
  • 现在一切正常。完全的用户错误。我的错:|

标签: python arrays numpy dataset scikit-learn


【解决方案1】:

如果您有一个列表列表,您可以将其转换为带有np.array(combined_list)numpy 数组。这将是外部列表的长度在第一个维度(向下)中的形状,例如

>>> a = np.array([[1,2,3],[1,2,3]])
>>> a.shape
(2, 3)

如果我理解正确,这应该是 scikit 的正确 n_samples*n_features 顺序,但如果不是,您可以使用以下方法转置数组:

>>> a = a.T
>>> a.shape
(3, 2)

【讨论】:

  • 这不起作用。我列表中的值变得混乱。示例:[[ 1.23100650e+09 0.00000000e+00 0.00000000e+00]。转换没有正确进行,但是我确保元素的类型是 [int, float, int]
  • 转换不正确的原因是什么?您能否提供输入数据的示例(例如 mp_dict['x'], mp_dict['y'], tv_dict['y'] 的值是什么)
  • 示例输入数据元素:[1410718505, 475.49, 33003201] & 示例输出数据元素:[1.23100650e+09 0.00000000e+00 0.00000000e+00]
  • 使用np.array([1410718505, 475.49, 33003201]) 给出array([ 1.41071850e+09, 4.75490000e+02, 3.30032010e+07]) 所以我怀疑错误在其他地方?
  • 哇,这完全是我的错误。假设我正在阅读的实际文件的顺序不正确。值是正确的。谢谢!
【解决方案2】:

你可以用numpy.array(combined_list)创建一个numpy数组,所有的值都会被转换成floatIntfloat 的转换通常不会影响任何机器学习分析。

【讨论】:

  • 这不起作用。我列表中的值变得混乱。示例:[[ 1.23100650e+09 0.00000000e+00 0.00000000e+00]。转换没有正确进行,但是我确保元素的类型是 [int, float, int]。我也尝试过使用 dtype 参数但没有成功。对此的建议可能会有所帮助。
  • numpy.array([[[1410718505, 475.49, 33003201]]]) 创建一个形状为 (1,3) 的 numpy 浮点数组,其值为 [[1.41071850e+09, 4.75490000e+02, 3.30032010e+07]] 你能举一个不能按预期工作的例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 2018-12-01
  • 2020-12-17
  • 1970-01-01
相关资源
最近更新 更多