get_prediction_params_iter
Funcția este folosită pentru a calcula parametrii de predicție într-un mod iterativ, folosind metoda gradientului conjugat.
Prerequisites
Urmatoarele functii sunt necesare pentru rezolvarea task-ului:
conjugate_gradient
function [x] = conjugate_gradient_optimized(A, b, x0, tol, max_iter)
% initializez variabile
r = b - A * x0; % reziduu
v = r; % dirctie de cautare
x = x0; % solutie
tol_sq = tol^2; % toleranta^2 (eficientizare)
k = 0; % contor
% pre-calculez prod scalar al reziduului inital
rho = r' * r;
% Iterez pana la convergenta sau max_iter
while k < max_iter && rho > tol_sq
Av = A * v;
alpha = rho / (v' * Av);
x = x + alpha * v; % actualizez solutia
r = r - alpha * Av; % actualizez reziduu
rho_new = r' * r; % noul produs scalar al reziduului
beta = rho_new / rho;
v = r + beta * v; % actualizez directia de cautare
rho = rho_new; % actualizez produsul scalar al reziduului
k = k + 1; % incrementez contor
end
end
Implementare
Funcția va returna un vector a
care conține parametrii de predicție calculați.
determin numărul de linii din matricea kernel
K
m = size(K, 1);regularizez matricea kernel
K
prin adăugarea produsului dintrelambda
și matricea identitateeye(m)
laK
, rezultând matriceaA
A = lambda * eye(m) + K;inițializez vectorul de start x0 pentru algoritmul iterativ, setând toate valorile la zero.
x0 = zeros(m, 1);setez toleranta
tol = 1e-6;setez un număr maxim de iterații
max_iter
pentru algoritmul iterativ.max_iter = 100;aplic metoda gradientului conjugat pentru a rezolva sistemul liniar
a = conjugate_gradient(A, y, x0, tol, max_iter);
Cod sursa
function [a] = get_prediction_params_iterative (K, y, lambda)
% numarul de linii
m = size(K, 1);
% regularizez matricea K
A = lambda * eye(m) + K;
% intializez x0
x0 = zeros(m, 1);
% Setez toleranta
tol = 1e-6;
% numarul maxim de iteratii
max_iter = 100;
% aplic conjugatul
a = conjugate_gradient(A, y, x0, tol, max_iter);
endfunction
Last modified: 30 April 2024