Я пытаюсь решить проблему многоклассовой классификации, используя логистическую регрессию. В моем наборе данных есть 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, чтобы добавить смещение в функцию принятия решения.