Мультиклассовая классификация в CatBoost - PullRequest
0 голосов
/ 11 февраля 2020

Мне нужно выполнить мультиклассовую классификацию с несколькими метками с помощью CatBoost.

Пример данных:

X = [[1, 2, 3, 4], [2, 3, 5, 1], [4, 5, 1, 3]]

y = [[3, 1], [2, 8], [7, 8]]

Не могли бы вы привести рабочий пример?

Полагаю, я бы нужно обернуть CatBoostClassifier некоторым классификатором sklearn.

Спасибо!

1 Ответ

1 голос
/ 25 февраля 2020

Вы правы в том, что это можно сделать с помощью оболочки sklearn, в частности, реализации sklearns классификатора one-vs-rest. Этот метод создает классификатор для каждого класса, рассматривая вашу проблему как комбинацию задач бинарной классификации, по одной для каждого класса.

Как это работает? Для данного класса образцы, помеченные данным классом, представляют собой положительные образцы, а все остальные считаются отрицательными образцами.

Это жизнеспособный подход, когда количество классов небольшое. Однако, когда у вас большое количество классов, использование памяти и время обучения станут чрезмерно высокими. В этом случае может быть гораздо эффективнее реализовать решение с использованием подхода на основе нейронной сети, если у вас достаточно данных.

Вот рабочий пример:

from catboost import CatBoostClassifier
from sklearn.multiclass import OneVsRestClassifier
from sklearn.preprocessing import MultiLabelBinarizer

##Using your example data 

X = [[1, 2, 3, 4], [2, 3, 5, 1], [4, 5, 1, 3]]

y = [[3, 1], [2, 8], [7, 8]]

mlb = MultiLabelBinarizer()
mlb.fit(y)
y_k_hot = mlb.transform(y)

ovr = OneVsRestClassifier(estimator=CatBoostClassifier(iterations=10,random_state=1))
ovr.fit(X,y_k_hot)

ovr.predict(X)*mlb.classes_

array([[1, 0, 3, 0, 0],
       [0, 2, 0, 0, 8],
       [0, 0, 0, 7, 8]])

...