我在机器学习中没有得到这一行代码

时间:2018-06-25 08:19:43

标签: matlab machine-learning

我必须在Coursera的机器学习课程中为lrcostfunction分配编写这段代码。但是我还是不明白为什么

theta1 = [0 ; theta(2:end, :)];

是写的吗? theta1是什么意思?

h = sigmoid(X * theta)
theta1 = [0 ; theta(2:end, :)];
p = lambda * (theta1' * theta1)/(2 * m);
J = ((-y)'*log(h)-(1-y)'*log(1-h))/m + p;

grad = (X' * (h - y) + lambda * theta1)/ m;

1 个答案:

答案 0 :(得分:2)

在逻辑回归中,θ(θ)是一个向量,表示x的线性函数的参数(或权重)。

enter image description here

现在,在给定训练集的情况下,至少对于我们已有的训练示例,学习参数theta(θ)的一种方法是使h(x)接近y。使用成本函数或误差函数(J(θ)),对于我们要最小化的θ的每个值进行定义。

enter image description here

第一个theta1参数初始化为零。之后使用梯度下降,计算下一个theta参数。在梯度下降中,J(θ)参数是使用偏微分来计算的,因为我们希望将其最小化。

enter image description here

此处\ alpha是运行梯度下降算法的学习率。它以数组中的初始值-theta1为零开始,然后使用上述公式计算下一个值。等等其他theta参数。

编辑:

解释代码:

theta1 = [0 ; theta(2:end, :)];

上面的代码是MATLAB代码。在这里,theta1是一个数组(向量或矩阵表示)。它是使用两个字段的水平串联创建的。

  • 1)0

  • 2)theta(2:end, :)

首先,是标量值0

第二,这意味着除了数组theta的第一行以外,所有值均保持不变。 (请注意theta是LRCOSTFUNCTION(theta, X, y, lambda)的输入数组)