机器学习 – 第三周:逻辑回归
分类(Classification)问题
逻辑回归(Logistic Regression)主要是用于分类问题的。分类问题,即对数据集中的数据进行分类,区分出两个或多个类别。
例如,之前提到的邮箱判定是否为垃圾邮件的算法,即一类分类算法:区分一封邮件是垃圾邮件,或是非垃圾邮件。
处理这种问题,其实和线性回归的问题如出一辙:只需判定其属于某个分类的概率——例如某封邮件经过算法计算出为垃圾邮件的概率为 0.9 ,我们则有充分的理由认为这是一封垃圾邮件。
模型表达
继续用 $$h_\theta(x)$$ 来表示我们的假设函数。由于我们计算出的是分类的概率,则由概率论(常识),应有 $$0 \le {{\rm{h}}_\theta }(x) \le 1$$
。但线性回归函数计算出的 $$\theta^T$$ 并不是在此范围内,我们需要选择一个函数 $$g(z)$$ ,使得 $$ 0 \le h_\theta(x) = g(\theta^T) \le 1 $$ 。
我们取下列的 $$g(z)$$ :
$$g(z) = {1 \over {1 + {e^{ – z}}}}$$
则我们的假设函数 $$h(\theta)$$ 为:
$${h_\theta }(x) = {1 \over {1 + {e^{ – {\theta ^T}x}}}}$$
函数$$g(z)$$单调递增,且$$g(0)=0.5$$、$$0 \le g(z) \le 1$$,函数图形类似积分符号“$$\int$$”,比较适合作为一个分类的假设函数。
此时 $$h_\theta(x)$$ 表示的则是“输入x时,y=1的概率”。用概率论中的条件概率表示,则是$$P(y = 1|x;\theta )$$。
决策边界(Decision boundary)
(啊突然发现真的有点不得不配图了……我还要再坚持一下!)
考虑只有两个参数:$$x_1$$、$$x_2$$的情况。将不同分类的数据集以不同符号标注在平面直角坐标系上;再将预测函数 $$h_\theta$$ 亦画出在同一个坐标系中。此时,预测函数 $$h_\theta$$ 将不同的数据集分开——这就是决策边界。
决策边境亦可以是非线性的——只需在预测函数中加入高次项。
成本函数
$$J(\theta ) = – {1 \over m}[\sum\limits_{i = 1}^m {{y^{(i)}}\log {h_\theta }({x^{(i)}}) + (1 – {y^{(i)}})\log (1 – {h_\theta }({x^{(i)}}))]} $$
总之大概就是以上这坨玩意。
当然,要用梯度下降法求它的最小值,我们需要知道它的偏导数……如下:
$${\partial \over {\partial {\theta _j}}}J(\theta ) = {1 \over m}\sum\limits_{i = 1}^m {({h_\theta }({x^{(i)}}) - {y^{(i)}})x_j^{(i)}}$$
高级优化算法(Advanced optimization)
还有一些比梯度下降法牛逼得多的算法,例如:
- Conjugate gradient
- BFGS
- L-BFGS
这些算法在 MATLAB 或者 octave 里都有,我们要做的只是传入成本函数和偏导数,然后可以由内置的算法自动计算出最合适的 $$\theta$$ 值。
多类别的逻辑回归算法
在目标数据集有多个分类的情况,我们使用一种“一对多”(one vs all)的方式来计算。原理很简单,例如我们有$$n$$个分类,我们依次挑选其中的1个分类,将剩下的$$n-1$$个分类作为另一个分类来运行逻辑回归算法。