Использование sklearn с несколькими столбцами в горячем коде

Я пытался выяснить проблему с несколькими горячими закодированными nparrays.

Я использую фрейм данных, где каждый символ представляет собой однокадровую кодировку, представленную в np_array.

Например, X-объекты должны содержать все кодировки символов, причем y обозначает одну метку.

Моя функция подбора sklearn работает, когда я беру только кодировку OHE первого символа каждого образца, преобразованную в список вместо nparray. Это пример кода, который я использовал для этого:

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

Теперь это возвращает один список массивов OHE np char_0 для всех примеров:

[ [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, содержит массив numpy длиной 38 OHE.

Вот как должен выглядеть у:

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: Найден массив с dim 3. Ожидается оценщик <= 2.

1 ответ

Я нашел решение своего собственного вопроса в конце концов. Я исправил это, выполнив следующее.

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), видимо, знают, как с этим бороться.

Другие вопросы по тегам