简化的代价函数

还记得上次的代价函数的Octave/MATLAB代码嘛:

function [J, grad] = costFunction(theta, X, y)
    m = length(y); % number of training examples
    h = sigmoid(X * theta);
    J = 1 / m * (-y' * log(h) - (1 - y)' * log(1 - h));
    grad = 1 / m * X' * (h - y);
end

但是,我们当时是这样定义的代价函数:

其实,细心观察就会发现,二者等价。只要令:

我们即可定义用一个表达式表达的简化的代价函数:

之所以这样表达,是为了方便后面应用梯度下降法时方便求梯度。

向量化形式

逻辑回归与梯度下降

现在,我们就要使用梯度下降法实现逻辑回归。大家不要被“回归”二字迷惑,这里仍然是解决分类问题,而不是回归问题。但其中有一些相似。

一般形式

先回忆一下梯度下降的一般形式:

梯度下降求解分类问题

代入分类问题的代价函数,求出梯度,即可得到:

向量化形式

求导过程

逻辑函数

我们先来看看如何对逻辑函数(Sigmoid函数)求导:

代价函数

利用上面的结果,借助复合函数求导公式等,可得:

向量化形式