【问题标题】:Logistic Regression Implementation逻辑回归实现
【发布时间】:2017-08-16 05:09:26
【问题描述】:

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

  • 首先取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 值,这是正确的输出吗?

【问题讨论】:

  • 您能否提供一个最低限度的工作示例,例如使用一些虚拟数据。你可以像这样产生它:y=randi(2,[10,1])-1 & X=[ones(10,1) randn([10,1])。据我所知:更新theta 时,成本函数应该会发生变化。但是,不清楚为什么要计算两次梯度(即,一次在更新theta 和最后一步)。
  • @zundertj 实际上这是我也不清楚的部分。如果你能告诉我首先计算哪一项以及为什么,那就行了。

标签: matlab machine-learning statistics logistic-regression


【解决方案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 次迭代后收敛。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 2013-05-02
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    相关资源
    最近更新 更多