根据课程里讲,逻辑回归主要用来做分类,比如检测垃圾邮件之类的,这类问题用线性回归不能很好的解决。逻辑回归的回归函数(分类器)是:
其中g为sigmoid function,如下。这个函数的值域为0到1,表示在给定的theta和x的情况下,y等于1的概率。从图中可以看出,只要z大于0,也就是theta' * x大于0, y为1的概率就大于50%。当z为0时,y为0、为1的概率各位50%,我们称这个时候x的图形为Decision Boundary,它划分出了不同的分类。
逻辑回归的Cost Function为:
同样的,我们这里要找一个theta,使Cost Function最小。一种通用的方法还是梯度下降,同样的带进去求偏导,注意需要把sigmoid function展开,最终得:
可以看出,这跟线性回归的形式保持一致,相当完美;只是回归函数不一样。
另外一种求theta的优化方法是用库函数fminunc,不需要选择learning rate,速度也较快 - 只提供Cost Function J和Gradient的计算即可,纯粹的套公式如下:
J = y' * log(sigmoid(X*theta)) + (1 - y)' * log(1 - sigmoid(X*theta));
J = -J/m;
for j = 1:size(theta)
grad(j) = (sigmoid(X*theta) - y)' * X(:,j);
grad(j) = grad(j) / m;
end
前面讲的都是0/1分类,如果是多值分类呢?可以变通一下,用一个PK多个的思想,简化为0/1分类。对每个值i都训练一个分类器,当输入一个新值时,计算所有分类器的得分,最终划分到得分最大的分类器对应的分类。