Классификатор Ridge Scikit-Learn работает для мультикласса не ясно - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь понять, как RidgeClassifier из sklearn.linear_model работает для случая с несколькими классами. Я нашел похожий вопрос здесь . Однако я не могу следовать

Согласно тому, что я понимаю из ответа там.

import numpy as np


X = np.random.random((5,4))
y =  [0,1,0,2,2]


############## This method #################

from sklearn.preprocessing import LabelBinarizer
y_new  = LabelBinarizer().fit_transform(y)

from sklearn.linear_model import Ridge
r = Ridge()
r.fit(X,y_new)
r.coef_

############# is same as this ##############

from sklearn.linear_model import RidgeClassifier
clf = RidgeClassifier()
clf.fit(X,y)
clf.coef_

Однако coef_ не то же самое. Что на самом деле происходит в случае с несколькими классами?

1 Ответ

1 голос
/ 15 апреля 2020

Ваш подход абсолютно верен, и вы фактически создаете тот же вывод.

LabelBinarizer преобразует значения вашего класса (1, 2, 3) в мульти-выход двоичных значений (1, 0, 0) , 0, 1, 0, 0, 0, 1). Применение регрессора Ridge к этим выходным данным приведет к тому, что ваша мультиклассовая регрессия будет вести себя как мультиклассовая классификация, если вы возьмете, например, наивысший результат.

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

Проверьте источник RidgeClassifier: source

В функции fit вы увидите использование вашего LabelBinarizer, но с параметрами, чтобы сделать его между -1 и 1.

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

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