我尝试使用python将我的分类数据转换为一个热矢量,最好使用numpy或theano。我不想使用sklearn(我无法安装)。
我的数据是这样的:
data=[
[ 0., 2., 2., 0., 2., 0., 1.],
[ 2., 1., 2., 2., 2., 0., 2.],
[ 0., 0., 2., 0., 2., 2., 2.],
[ 0., 2., 1., 0., 1., 2., 2.],
[ 0., 2., 2., 0., 0., 0., 2.],
[ 0., 2., 0., 0., 2., 0., 2.],
[ 0., 2., 2., 0., 2., 0., 1.],
[ 1., 2., 2., 1., 2., 1., 0.],
]
我的数据有7列,每列的值可以是0,1或2.在操作结束时,我希望有一个热矢量,它有3 ^ 7-1个零和1个值。
我尝试使用
theano.tensor.extra_ops.to_one_hot(y, nb_class, dtype=None)
但没有用,我不确定它是否适合这项任务。
我在互联网上看到的大部分例子都只适用于单列。
答案 0 :(得分:2)
我不认为它有内置功能,因为你必须告诉numpy / theano你的值只能来自{0,1,2}。
这是一个简单的numpy实现,其中
0000000映射到10 ... 0,
1000000映射到01 ... 0,
2222222映射到00 ... 1。
data=[
[ 0., 2., 2., 0., 2., 0., 2.],
[ 0., 2., 2., 0., 2., 0., 2.],
[ 0., 2., 2., 0., 2., 0., 2.],
[ 0., 2., 2., 0., 2., 0., 2.],
[ 0., 2., 2., 0., 2., 0., 2.],
[ 0., 2., 2., 0., 2., 0., 2.],
[ 0., 2., 2., 0., 2., 0., 2.],
]
data_num = 7
one_hot_dat = np.zeros((data_num, 3**7))
# vector for making indices
vec = np.asarray([3**i for i in range(7)])
# compute the corresponding index for each data point
hot_idx = np.sum(np.asarray(data)*vec, axis=1).astype(int)
one_hot_dat[range(data_num), hot_idx] = 1
# one_hot_dat[0] should give the first data point in one-hot