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