Régression logistique régularisée avec vectorisation

Sep 23 2020

J'essaye d'implémenter une version vectorisée de la régression logistique régularisée. J'ai trouvé un article qui explique la version régularisée mais je ne le comprends pas.

Pour faciliter les choses, je vais copier le code ci-dessous:

hx = sigmoid(X * theta);
m = length(X);
J = (sum(-y' * log(hx) - (1 - y') * log(1 - hx)) / m) + lambda * sum(theta(2:end).^2) / (2*m);
grad =((hx - y)' * X / m)' + lambda .* theta .* [0; ones(length(theta)-1, 1)] ./ m ;

Je comprends la première partie de l'équation des coûts, si j'ai raison, cela pourrait être représenté comme suit:

J = ((-y' * log(hx)) - ((1-y)' * log(1-hx)))/m; 

Le problème, c'est le terme de régularisation. Prenons plus de détails:

Dimensions:

X = (m x (n+1))
theta = ((n+1) x 1)

Je ne comprends pas pourquoi il laisse le premier terme de theta( theta_0) hors de l'équation, alors qu'en théorie le terme régularisé c'est:

et il doit prendre en compte tous les thetas

Pour la descente de gradient, je pense que cette équation est équivalente:

L = eye(length(theta));
L(1,1) = 0;

grad = (1/m * X'* (hx - y)+ (lambda*(L*theta)/m).

Réponses

Avi Sep 24 2020 at 22:34

Je suis aussi nouveau ici ...

Dans les Matlabindex commencent à 1, et dans les index mathématiques commencent à 0 (les index sur la formule que vous avez mentionnée commencent également à 0).

Ainsi, en théorie, le premier terme de thêta doit également être laissé en dehors de l'équation.

Et pour votre deuxième question, vous avez raison! C'est une équation propre équivalente!