Как кодировать данные с несколькими метками классов? - PullRequest
0 голосов
/ 10 июля 2020

У меня проблема с классификацией с несколькими классами, например A, B, C и D. Мои данные имеют следующие метки y:

y0 = [['A'], ['B'], ['A','D'], ['A'], ['A','C','D'], ['D'], ..., ['C'], ['A','B','C','D'] , ['B']]

Я хочу обучить классификатор случайного леса на этих этикетки. Сначала мне нужно закодировать метки. Сначала я попробовал LabelEncoder:

from sklearn.preprocessing import OneHotEncoder, LabelEncoder
le = LabelEncoder()
le.fit_transform(y0)
# encoded labels: array([0, 1, 2, 0, 3, 4, ... 5, 6, 1], dtype=int64)

Я также попробовал OneHotEncoder, но, очевидно, ни LabelEncoder, ни OneHotEncoder здесь не работали. Дело в том, что я не могу кодировать данные с несколькими метками классов (например, ['A','B','C']). Я предполагаю, что эти тривиальные методы кодирования здесь не способствуют достижению go, так как лучше всего кодировать метки моих классов? Чтобы уточнить, я не хочу рассматривать, например, ['A','B'] как совершенно другой класс, чем ['A'] или ['B']. Я хочу, чтобы это был другой класс, но в то же время все еще унаследовал функции от классов A и B.

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Этот вид проблемы называется Multilabel (в отличие от multiclass , где каждый образец имеет ровно одну метку класса), и sklearn ожидает, что в задачах с несколькими метками цель будет закодирована как двоичный массив формы (n_samples, n_labels). Вы можете закодировать свои данные в этом формате, используя MultiLabelBinarizer.

0 голосов
/ 10 июля 2020

Вместо использования OneHotEncoder или LabelEncoder вы можете использовать OrdinalEncoder, который кодирует категориальные функции как целочисленный массив.

Полученные классы будут в порядковой шкале, например, в алфавитном порядке A, AB, AD et c.

Может возникнуть вопрос, больше ли AB похоже на AC или на AD. Я имею в виду, что алфавитный порядок может не отражать реального сходства, например, в порядковой шкале 'cold','warm','hot', поэтому следует использовать ручное кодирование и изменение порядка. Но эти детали требуют некоторого знания предметной области.

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