我正在运行梯度下降循环以最小化函数,但是我的参数向量w计算为NaN,而它应该是数值向量。这意味着在某个时候函数将达到无穷大,但是我不确定为什么。
这是循环。数据是嵌套在学校内的学生的数据集,因此程序首先在每个学校循环,然后第二个循环执行梯度下降。 y变量是测试得分的量度,x向量包含分类的学生人口统计特征和学校特征,以及一些百分比,例如贫困和性别比率。关键计算是g,它计算梯度,我相信这是将导致无穷大而导致NaN结果而不是数值矢量的地方。 g结果应为数值时立即输出为NaN。
w_old = rand(28, length(tr_indexes));
tolerance = 1e-6;
maxIter = 1000;
stepsize = .1;
grid = zeros(10,1);
w = w_old;
u = rand(28,length(tr_indexes));
theta = rand(10,28);
for t = 1:T
t_trainx = trainx(:, tr_indexes(t):tr_indexes(t+1)-1 );
t_trainy = trainy(tr_indexes(t):tr_indexes(t+1)-1)';
s = length(t_trainx);
for j = 1:maxIter
w_old(:, t) = w(:,t);
v= theta*u(:,t);
g = ((2/s)*((t_trainy-(w(:,t)'*t_trainx + v'*theta*t_trainx))*t_trainx')' + 2*lambda*w(:,t))
w(:,t)= w_old(:,t) - stepsize*g;
u(:,t)= w(:,t) + theta'*v;
if norm(abs(w(:,t)-w_old(:,t))) < tolerance;
break
end
end
end
谁能建议这段代码的哪些方面导致了NaN结果?