Régression logistique régularisée avec vectorisation
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
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!