1
我想編碼一個迭代重新加權最小二乘算法用於人臉識別的邏輯迴歸(圖像表示爲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,具體取決於表示臉部的圖像。
計算的Y:
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