Я пытаюсь закодировать итеративный реверсивный алгоритм наименьшего квадрата для логистической регрессии для распознавания лиц (изображения представлены как изображение серого цвета 19x19), но весы всегда заканчиваются NaN.Почему весы моего итеративного рефлексивного алгоритма наименьших квадратов для логистической регрессии всегда заканчиваются NaN?
w_new = zeros(361,1);
for i = 1:35 % 100-fold cross-validation of 3480 samples
[ phi, t, ~, ~ ] = removeRows100FoldCV(i, trainx, traint);
t(t == -1) = 0;
while(true)
w_old = w_new;
y = computeYs(w_old, phi);
R = generateR(y);
w_new = w_old - inv(phi' * R * phi) * phi' * (y - t);
if onlyMarginalChangesInW(w_new, w_old) == true
break;
end
end
end
Целевой вектор t первоначально 1 или -1 в зависимости от изображения, представляющего лицо или нет.
Вычисление у:
function [ y ] = computeYs(w, phi)
y = zeros(size(phi,1), 1);
for i = 1:size(phi,1)
a = w' * phi(i,:)';
y(i) = 1/(1+exp(-a));
end
end
Генерация R:
function [ R ] = generateR(y)
R = zeros(size(y));
for i = 1:size(R,1)
R(i,i) = y(i) * (1 - y(i));
end
end
И триггер условие прерывания:
function [ result ] = onlyMarginalChangesInW(w_new, w_old)
result = true;
for i = 1:size(w_new)
if (w_new(i)/w_old(i) > 0.01)
result = false;
break;
end
end
end