使用sklearn与多个热编码列

时间:2017-11-08 19:07:56

标签: arrays numpy one-hot-encoding

我一直试图找出多个热编码nparray的问题。

我正在使用一个数据框,其中每个字符都是np_array中表示的单一编码。

例如,X要素应包含字符的所有编码,y为单个标签。

当我只对每个样本的第一个字符进行OHE编码,转换为列表而不是nparray时,我的sklearn拟合函数才有效。这是我用来完成此任务的代码示例:

X = df[['char_0']]
X_testing = X.values
empty_list = list()
for entry in X_testing:
    empty_list.append(entry[0].tolist())

现在,这将为所有示例返回char_0的OHE np数组的单个列表:

[ [example0_char0] , [example1_char0] , ... , [examplen_char0] ]

这就是X应该是这样的:

index, char_0, char_1, ... , char_n
0, [encoding_char0], [encoding_char1], ... , [encoding_charn]
1, [encoding_char0], [encoding_char1], ... , [encoding_charn]
etc.

其中每个encoding_char都包含一个长度为38 OHE的numpy数组。

这就是y的样子:

index, label
0, 1
1, 1
etc.

我可以,但这就是我的X样子:

array([[ array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
    0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
    0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]),
    array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
    0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
    1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]),
    ...,

我很困惑,不知道该怎么做:

  • 我应该将每个特征编码转换为一个列表(或者它们应该保留为np数组吗?)
  • 我可以一次训练多个编码的算法吗?或者只能同时适应单个OHE,而不是所有字符?

我想说你可以给出Feature1,Feature2,Feature3,其中每个特征都是整个OHE数组。 但是,每次我尝试它时都会出现类似于:

的错误
  • ValueError:使用序列设置数组元素。
  • ValueError:找到带有暗淡的数组3.预期估计值< = 2.

1 个答案:

答案 0 :(得分:0)

毕竟我找到了解决自己问题的方法。我通过执行以下操作来修复它。

X = df.loc[:, 'char_0':'char_n']

X = X.values

X = np.array(X)
print(X.shape)

It turned out it was an array of dimensions:
(nsamples * ncolumns * OHElength)

nsamples, nx, ny = X.shape
X = X.reshape((nsamples,nx*ny))

所以这只是返回一个带尺寸的df(nsamples * ncols列表乘以一个热编码中的字符数)。

Sklearn(和Tensorflow)显然知道如何处理这个问题。