物流回归实施

时间:2017-08-16 05:09:27

标签: matlab machine-learning statistics logistic-regression

我在实施逻辑回归方面遇到了一些困难,我应该如何逐步进行。根据我到目前为止所做的事情,我将通过以下方式实现它:

  • 首先将theta等于要素数量并使其成为n*1零向量。现在使用此theta来计算以下内容 htheta = sigmoid(theta' * X');
    theta = theta - (alpha/m) * sum (htheta' - y)'*X

  • 现在使用第一步中计算的theta来计算成本函数
    J= 1/m *((sum(-y*log(htheta))) - (sum((1-y) * log(1 - htheta)))) + lambda/(2*m) * sum(theta).^2

  • 最后计算梯度
    grad = (1/m) * sum ((sigmoid(X*theta) - y')*X);

因为我将theta视为零。我在整个向量中得到J的相同值,这是正确的输出吗?

1 个答案:

答案 0 :(得分:1)

您正在计算最后一步中的渐变,而在计算新theta之前计算过梯度。此外,您对成本函数的定义包含正则化参数,但这并未包含在梯度计算中。没有正规化的工作版本:

% generate dummy data for testing
y=randi(2,[10,1])-1;
X=[ones(10,1) randn([10,1])];

% initialize
alpha = 0.1;
theta = zeros(1,size(X,2));
J = NaN(100,1);

% loop a fixed number of times => can improve this by stopping when the
% cost function no longer decreases
htheta = sigmoid(X*theta');
for n=1:100
    grad = X' * (htheta-y); % gradient
    theta = theta - alpha*grad'; % update theta
    htheta = sigmoid(X*theta');
    J(n) = sum(-y'*log(htheta)) - sum((1-y)' * log(1 - htheta)); % cost function
end

如果您现在绘制成本函数,您将看到(随机性除外)它在大约15次迭代后收敛。