WedX - журнал о программировании и компьютерных науках

Решатель оптимизации, используемый для One vs rest в Sickit, учится

Я пытаюсь решить проблему многоклассовой классификации, используя логистическую регрессию. В моем наборе данных есть 3 разных класса, и каждая точка данных принадлежит только одному классу. Вот пример training_data; введите здесь описание изображения

Здесь первый столбец — это вектор тех, которые я добавил в качестве смещения. И целевой столбец был бинаризован с использованием концепции бинаризации меток, как указано в больное обучение

Затем я получил цель следующим образом;

array([[1, 0, 0],
   [1, 0, 0],
   [0, 1, 0],
   [1, 0, 0],
   [1, 0, 0]])

Затем я тренирую его, используя концепцию «один против отдыха», то есть тренирую один класс за раз. Образец кода;


for i in range(label_train.shape[1]):
    clf = LogisticRegression(random_state=0,multi_class='ovr', solver='liblinear',fit_intercept=True).\
 fit(train_data_copy, label_train[:,i])
    #print(clf.coef_.shape)

Как видите, я тренирую всего 3 классификатора, по одному для каждой предоставленной метки. У меня есть два вопроса здесь;

Первый вопрос. Согласно документации по болезни,

multi_class{‘auto’, ‘ovr’, ‘multinomial’}, default=’auto’ Если выбрана опция ‘ovr’, то для каждой метки подходит бинарная задача. Для «полиномиального» минимизация потерь — это полиномиальные потери, подходящие для всего распределения вероятностей, даже если данные являются двоичными. «мультиномиальный» недоступен, когда решатель = «liblinear». «auto» выбирает «ovr», если данные двоичные, или если Solr = «liblinear», и в противном случае выбирает «мультиномиальный».

Мой вопрос заключается в том, что, поскольку я выбрал решатель как liblinear (являющийся проблемой o.v.r), имеет ли значение, выбираю ли я multi_class как auto или ovr.

Второй вопрос касается термина перехвата (или предвзятости). В документации сказано, что если fit_intercept=True, то к решающей функции добавляется смещение. Но я заметил, что когда я не добавлял вектор единиц в свою матрицу данных, то количество параметров в коэффициенте, тета-векторе было таким же, как количество признаков, хотя и fit_intercept=True. Мой вопрос в том, нужно ли нам добавлять вектор из 1 в матрицу данных, а также включать fit_intercept, чтобы добавить смещение в функцию принятия решения.


Ответы:


1
  1. Это не имеет значения; как вы могли видеть здесь, выбор multi_class='auto' или multi_class='ovr' приведет к тем же результатам, что и solver='liblinear'.
  2. В случае solver='liblinear' используется смещение по умолчанию, равное 1, и оно добавляется к X через атрибут intercept_scaling (который, в свою очередь, полезен, только если fit_intercept=True), как вы можете видеть здесь. У вас будет подогнанное смещение (размерность (n_classes,)), возвращенное intercept_ после подгонки (нулевое значение, если fit_intercept=False). Подходящие коэффициенты возвращаются coef_ (размерность (n_classes, n_features), а не (n_classes, n_features + 1) — выполнено разделение здесь).

Вот пример с учетом набора данных Iris (с 3 классами и 4 функциями):

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
X, y = load_iris(return_X_y=True)

clf = LogisticRegression(random_state=0, fit_intercept=True, multi_class='ovr', solver='liblinear')
clf.fit(X, y)
clf.intercept_, clf.coef_
################################
(array([ 0.26421853,  1.09392467, -1.21470917]),
 array([[ 0.41021713,  1.46416217, -2.26003266, -1.02103509],
        [ 0.4275087 , -1.61211605,  0.5758173 , -1.40617325],
        [-1.70751526, -1.53427768,  2.47096755,  2.55537041]]))
03.03.2021
Новые материалы

Как создать диаграмму градиентной кисти с помощью D3.js
Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


Для любых предложений по сайту: [email protected]