Régularisation de régression logistique code en matlab

Je tente ma main à régulariser LR, simple avec cette formules dans matlab:

La fonction de coût:

J(theta) = 1/m*sum((-y_i)*log(h(x_i)-(1-y_i)*log(1-h(x_i))))+(lambda/2*m)*sum(theta_j)

Le gradient:

J(theta)/theta_0 = [(1/m)*(sum((h(x_i)-y_i)*x_j)] if j=0j(theta)/theta_n = [(1/m)*(sum((h(x_i)-y_i)*x_j)]+(lambda/m)*(theta_j) if j>1

Ce n'est pas le code matlab est juste la formule.

Jusqu'à présent, j'ai fait ceci:

function [J, grad] = costFunctionReg(theta, X, y, lambda)
J = 0;
grad = zeros(size(theta));
temp_theta = [];
%cost function
%get the regularization term
for jj = 2:length(theta)
temp_theta(jj) = theta(jj)^2;
end
theta_reg = lambda/(2*m)*sum(temp_theta);
temp_sum =[];
%for the sum in the cost function
for ii =1:m
temp_sum(ii) = -y(ii)*log(sigmoid(theta'*X(ii,:)'))-(1-y(ii))*log(1-sigmoid(theta'*X(ii,:)'));
end
tempo = sum(temp_sum);
J = (1/m)*tempo+theta_reg;
%regulatization
%theta 0
reg_theta0 = 0;
for jj=1:m
reg_theta0(jj) = (sigmoid(theta'*X(m,:)') -y(jj))*X(jj,1)
end    
reg_theta0 = (1/m)*sum(reg_theta0)
grad_temp(1) = reg_theta0
%for the rest of thetas
reg_theta  = [];
thetas_sum = 0;
for ii=2:size(theta)
for kk =1:m
reg_theta(kk) = (sigmoid(theta'*X(m,:)') - y(kk))*X(kk,ii)
end
thetas_sum(ii) = (1/m)*sum(reg_theta)+(lambda/m)*theta(ii)
reg_theta = []
end
for i=1:size(theta)
if i == 1
grad(i) = grad_temp(i)
else
grad(i) = thetas_sum(i)
end
end
end

Et de la fonction de coût est de donner des résultats corrects, mais je n'ai aucune idée pourquoi le gradient (une seule étape) n'est pas, le coût donne J = 0.6931 qui est correct et que le gradient grad = 0.3603 -0.1476 0.0320, ce qui ne l'est pas, le coût commence à partir de 2 parce que le paramètre thêta(1) n'ont pas à être régularisés, toute aide? Je pense qu'il y a quelque chose de mal avec le code, mais au bout de 4 jours je ne peux pas le voir.Grâce

OriginalL'auteur Pedro.Alonso | 2013-11-06