Algorithm 为什么我的逻辑回归迭代加权最小二乘算法的权重总是以NaN结尾?

Algorithm 为什么我的逻辑回归迭代加权最小二乘算法的权重总是以NaN结尾?,algorithm,matlab,machine-learning,computer-vision,Algorithm,Matlab,Machine Learning,Computer Vision,我试图为人脸识别(图像表示为19x19灰度图像)的logistic回归编码一个迭代加权最小二乘算法,但权重总是以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)

我试图为人脸识别(图像表示为19x19灰度图像)的logistic回归编码一个迭代加权最小二乘算法,但权重总是以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

NaN
结果出现在您的
inv(phi'*R*phi)
中。您是否检查了您的
phi
?尝试
cond(phi)
检查它是否非常大。这可能会导致反向操作提供了大量元素


顺便说一下,我试图理解为什么它不是
w_new=w_old-inv(phi'*R*phi)*phi'*R*(y-t)
在迭代加权最小二乘算法实现中?

结果出现在
inv(phi'*R*phi)
中。您是否检查了您的
phi
?尝试
cond(phi)
检查它是否非常大。这可能会导致反向操作提供了大量元素

顺便说一下,我试图理解为什么它不是
w_new=w_old-inv(phi'*R*phi)*phi'*R*(y-t)在迭代加权最小二乘算法实现中