从文件加载数据并规范化
Posted
技术标签:
【中文标题】从文件加载数据并规范化【英文标题】:Load data from file and normalize 【发布时间】:2015-03-04 03:02:00 【问题描述】:如何规范化从文件加载的数据?这就是我所拥有的。数据看起来像这样:
65535, 3670, 65535, 3885, -0.73, 1
65535, 3962, 65535, 3556, -0.72, 1
每行的最后一个值是一个目标。我想拥有相同的数据结构,但具有标准化值。
import numpy as np
dataset = np.loadtxt('infrared_data.txt', delimiter=',')
# select first 5 columns as the data
X = dataset[:, 0:5]
# is that correct? Should I normalize along 0 axis?
normalized_X = preprocessing.normalize(X, axis=0)
y = dataset[:, 5]
现在的问题是,如何正确打包 normalized_X
和 y
回来,它具有以下结构:
dataset = [[normalized_X[0], y[0]],[normalized_X[1], y[1]],...]
【问题讨论】:
np
看起来像一个模块(我假设numpy
!?)。请用它标记您的问题。这一方面可以帮助人们更好地理解问题,另一方面可以引起对此有更深入了解的人的注意。 :)
对于这个问题(我没有numpy
,所以我不知道这是否有效):dataset = [a + [b] for a, b in zip(normalized_X, y)]
(不保证!)
谢谢。差不多了。输出为:[(array([ 1. , 0.0202, 1. , 0.0455, 0.2121]), 1.0), (array([ 1. , 0.0301, 1. , 0.0255, 0.2273]), 1.0)]
。如何摆脱这个array()
并使外部元组的元素只是逗号分隔?
是的。正如我所说:numpy
。在普通的python中它会起作用。 dataset = [magic_function_to_convert_to_normal_list(a) + [b] for a, b in zip(normalized_X, y)]
^^ 但我不推荐它,因为你会失去 numpy
的魔力
【参考方案1】:
听起来您要的是np.column_stack
。例如,让我们设置一些虚拟数据:
import numpy as np
x = np.arange(25).reshape(5, 5)
y = np.arange(5) + 1000
这给了我们:
X:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
Y:
array([1000, 1001, 1002, 1003, 1004])
我们想要:
new = np.column_stack([x, y])
这给了我们:
New:
array([[ 0, 1, 2, 3, 4, 1000],
[ 5, 6, 7, 8, 9, 1001],
[ 10, 11, 12, 13, 14, 1002],
[ 15, 16, 17, 18, 19, 1003],
[ 20, 21, 22, 23, 24, 1004]])
如果您不想打字,也可以使用:
In [4]: np.c_[x, y]
Out[4]:
array([[ 0, 1, 2, 3, 4, 1000],
[ 5, 6, 7, 8, 9, 1001],
[ 10, 11, 12, 13, 14, 1002],
[ 15, 16, 17, 18, 19, 1003],
[ 20, 21, 22, 23, 24, 1004]])
但是,出于可读性考虑,我不鼓励将 np.c_
用于交互式使用以外的任何用途。
【讨论】:
正是我需要的。谢谢你。您还可以告诉我如何将打印的结果格式化为例如1, 2, 3
而不是 1.0000e+00, 2.0000e+00, 3.0000e+00
以上是关于从文件加载数据并规范化的主要内容,如果未能解决你的问题,请参考以下文章