Я запускаю цикл градиентного спуска, чтобы минимизировать функцию, но мой вектор параметров w рассчитывается как NaN, в то время как он должен быть числовым вектором.Это означает, что в какой-то момент функция уходит в бесконечность, но я не уверен почему.
Вот цикл.Данные представляют собой набор данных учащихся, вложенных в школы, поэтому сначала программа проходит по каждой школе, а вторая выполняет градиентный спуск.Переменная y является показателем оценки теста, а вектор x содержит категориальные демографические характеристики учащихся и школьные характеристики, а также несколько процентов, таких как уровень бедности и пол.Ключевым вычислением является g, который вычисляет градиент, и я считаю, что это то, где что-то стремится к бесконечности, приводя к результату NaN вместо числового вектора.Данный результат немедленно выводится как 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?