机器学习 – 第三周:逻辑回归

分类(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$$个分类作为另一个分类来运行逻辑回归算法。

评论

「三三」。

MathJAX,没有什么特殊的实现,配置代码都在网页尾部,你可以看看。

发表评论

发表评论代表你授权本网站存储并在必要情况下使用你输入的邮箱地址、连接本站服务器使用的 IP 地址和用户代理字符串 (User Agent) 用于发送评论回复邮件,以及将上述信息分享给 Libravatar Akismet,用于显示头像和反垃圾。