Почему у Логистической регрессии (мультикласса) точность так мала? - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь решить проблему с 3 функциями и 6 классами (метка). Набор обучающих данных состоит из 700 строк * 3 столбца. Значения характеристик постоянны от 0 до 100. Я использую метод «все против всех», но я не знаю, почему точность прогноза такая маленькая, всего 24%. Может кто-нибудь сказать мне, пожалуйста? Спасибо! Вот как я делаю прогноз:

function p = predictOneVsAll(all_theta, X)
m = size(X, 1);
num_labels = size(all_theta, 1);
% You need to return the following variables correctly 
p = zeros(size(X, 1), 1);
% Add ones to the X data matrix
X = [ones(m, 1) X];
[m, p] = max(sigmoid(X * all_theta'), [], 2);
end

И Один-Все-все

% You need to return the following variables correctly 
all_theta = zeros(num_labels, n + 1);

% Add ones to the X data matrix
X = [ones(m, 1) X];

initial_theta = zeros(n+1, 1);
options = optimset('GradObj', 'on', 'MaxIter', 20);
for c = 1:num_labels,
 [theta] = ...
     fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)), ...
             initial_theta, options);
 all_theta(c,:) = theta';
end

1 Ответ

0 голосов
/ 15 января 2019

В ForegnoteOneVsAll вам не нужно использовать сигмовидную функцию. Вам это нужно только при расчете стоимости. Итак, правильный код:

[m, p] = max((X * all_theta'), [], 2);

В OneVsAll цикл должен выглядеть следующим образом

for c = 1:num_labels

all_theta(c,:) = fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)), initial_theta, options);

endfor

Лучше, если вы зададите эти вопросы в обсуждении курса Эндрю ML. Они были бы более знакомы с кодом и проблемой.

...