Я реализую логистическую регрессию с использованием группового градиентного спуска. Существует два класса, в которые должны быть классифицированы входные выборки. Классы 1 и 0. При подготовке данных я использую следующую сигмоидную функцию:
t = 1 ./ (1 + exp(-z));
где
z = x*theta
И я использую следующую функцию затрат для расчета стоимости, чтобы определить, когда прекратить обучение.
htheta = sigmoid(x*theta);
cost = sum(-y .* log(htheta) - (1-y) .* log(1-htheta));
Я получаю на каждом этапе стоимость NaN, так как значения htheta
в большинстве случаев равны 1 или нулю. Что мне делать, чтобы определить стоимость на каждой итерации?
Это код спуска градиента для логистической регрессии:
function [theta,cost_history] = batchGD(x,y,theta,alpha)
cost_history = zeros(1000,1);
for iter=1:1000
htheta = sigmoid(x*theta);
new_theta = zeros(size(theta,1),1);
for feature=1:size(theta,1)
new_theta(feature) = theta(feature) - alpha * sum((htheta - y) .*x(:,feature))
end
theta = new_theta;
cost_history(iter) = computeCost(x,y,theta);
end
end