Укажите длину горячего энкодера в scikt - PullRequest
0 голосов
/ 29 января 2020

В этом случае вывод

from sklearn.preprocessing import OneHotEncoder
data = [[1], [3], [5]]
encoder = OneHotEncoder(sparse=False)
encoder.fit(data)
print(encoder.fit_transform(data))

равен

[[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]]

Можно ли получить вывод?

[[1. 0. 0. 0. 0.] [0. 0. 1. 0. 0.] [0. 0. 0. 0. 1.]]

1 Ответ

0 голосов
/ 29 января 2020

Это не то, что вы просили, но вывод совпадает с предоставленными вами данными. Этот код является модифицированной версией, Как можно выполнить горячее кодирование в Python? .

Код:

import numpy as np


data = [[1], [3], [5], [5], [3]]
#data = [[1], [3], [5]]
#data = [[1], [3], [2], [1]]


max_data = np.amax(data)
print(max_data)
print()


## nb_classes at least one more than max
nb_classes = max_data + 1


def indices_to_one_hot(data, nb_classes):
    targets = np.array(data).reshape(-1)
    return np.eye(nb_classes)[targets]

arr = indices_to_one_hot(data, nb_classes)
print(arr)
print()


ans = []
for i in range(0, len(data)):
    ans.append(np.delete(arr[i], 0))

print(np.array(ans))

Вывод:

5

[[0. 1. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 1.]
 [0. 0. 0. 0. 0. 1.]
 [0. 0. 0. 1. 0. 0.]]

[[1. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 1.]
 [0. 0. 0. 0. 1.]
 [0. 0. 1. 0. 0.]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...