我必须在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;
答案 0 :(得分:2)
在逻辑回归中,θ(θ)是一个向量,表示x的线性函数的参数(或权重)。
现在,在给定训练集的情况下,至少对于我们已有的训练示例,学习参数theta(θ)的一种方法是使h(x)接近y。使用成本函数或误差函数(J(θ)),对于我们要最小化的θ的每个值进行定义。
第一个theta1参数初始化为零。之后使用梯度下降,计算下一个theta参数。在梯度下降中,J(θ)参数是使用偏微分来计算的,因为我们希望将其最小化。
此处\ alpha是运行梯度下降算法的学习率。它以数组中的初始值-theta1为零开始,然后使用上述公式计算下一个值。等等其他theta参数。
编辑:
解释代码:
theta1 = [0 ; theta(2:end, :)];
上面的代码是MATLAB代码。在这里,theta1是一个数组(向量或矩阵表示)。它是使用两个字段的水平串联创建的。
1)0
2)theta(2:end, :)
首先,是标量值0
第二,这意味着除了数组theta
的第一行以外,所有值均保持不变。 (请注意theta是LRCOSTFUNCTION(theta, X, y, lambda)
的输入数组)