MultiLabelBinarizer() с inverse_transform()

#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, спасибо за ответ