#python #machine-learning #scikit-learn #deep-learning #multilabel-classification
#python #машинное обучение #scikit-учиться #глубокое обучение #multilabel-классификация
Вопрос:
У меня есть метки с несколькими метками. Элементы в метке означают голосование. Вот как выглядят метки:
array([[ 4, 0, 0, 1, 3, 2, 0, 0],
[ 6, 0, 1, 1, 0, 0, 0, 0],
[ 5, 0, 0, 3, 1, 0, 0, 0],
[ 4, 0, 0, 4, 1, 0, 0, 0],
[ 9, 0, 0, 1, 0, 0, 0, 0],
[ 6, 0, 0, 1, 0, 0, 1, 1],
[ 2, 0, 0, 8, 0, 0, 0, 0],
[ 0, 10, 0, 0, 0, 0, 0, 0],
[ 0, 10, 0, 0, 0, 0, 0, 0],
[ 0, 0, 6, 0, 0, 0, 4, 0]])
И вот что я попробовал:
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
nn = mlb.fit_transform(labels_train)
nn[:10]
Вывод:
array([[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0],
[1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0]])
И когда я попробовал inverse_transform():
zet = mlb.inverse_transform(nn)
zet[:10]
выход:
[(0, 1, 2, 3, 4),
(0, 1, 6),
(0, 1, 3, 5),
(0, 1, 4),
(0, 1, 9),
(0, 1, 6),
(0, 2, 8),
(0, 10),
(0, 10),
(0, 4, 6)]
Что я делаю не так? Почему он показывает уникальные значения в порядке возрастания?
Комментарии:
1. Это ожидаемое поведение для
MultiLabelBinarizer
: оно преобразуется из списков меток в многозадачную кодировку, по одному столбцу для каждой метки. Ваш случай больше похож на ограниченную регрессию с несколькими выходами. Может быть, спросите, как подойти к этому в stats или datascience SE?2. @BenReiniger, спасибо за ответ