Machine Learning - Andrew Ng on Coursera (Week 3)

Machine Learning - Andrew Ng on Coursera (Week 3)

接下将整理并发布学习Coursera上Andrew Ng的Machine Learning课程系列学习笔记,旨在与更多的机器学习爱好者一起分享学习心得,共同进步。本篇第三周的课程,主要内容是分类问题的模型表示、逻辑回归和过拟合问题。

分类问题及模型表示

首先Andrew给出了几个例子来解释什么是分类问题,包括垃圾邮件的识别、在线交易的欺诈判别以及肿瘤是良性还恶性。从线性回归对连续值的预测转为了对离散值的预测。在只有两类的分类问题中,用0和1来表示否与是。在此情况下,便不宜用线性回归函数来分类,而需要选择另外的$h_\theta(x)$来解决此类问题,并且满足$0 \le h_\theta(x) \le 1$,于是选择了Sigmod函数,又称为Logistic函数。Sigmoid函数是一个在生物学中常见的S型的函数,在信息科学中,由于其单增以及反函数单增等性质,Sigmoid函数常被用作阈值函数,将变量映射到0,1之间,还被广泛应用于神经网络的激活函数中。因此,逻辑回归模型假设如下:

$$h_\theta(x) = g(\theta^T x)$$

$$g(z) = \frac{1}{1 + e^z}$$

$$h_\theta(x) = \frac{1}{1 + e^{\theta^T x}}$$

而$h_\theta(x)$的输出结果,则表示在给定$x$和$\theta$条件下,$y=1$的概率,即:

$$h_\theta(x) = P(y = 1|x;\theta)$$

在使用时我们可以认为:

  • 如果$h_\theta(x) \ge 0.5$,则$y = 1$。
  • 如果$h_\theta(x) < 0.5$,则$y = 0$。

接下来引入了决策边界(Decision Boundary)的概念,如下图中紫色的斜线所示,这条线的表示实际上就是$h_\theta(x) = 0.5$的表达式,因此它是假设公式$h_\theta(x)$的属性,而非数据集的属性。

分类问题-决策边界

对于不同的假设公式,当变量的数量、阶次不一样时(如双变量二次方程可以表示椭圆,更高阶的方程则可以表示更多非线性的决策边界),可以表示出不同的决策边界,以更好地将数据集分类并预测新数据的分类结果。

逻辑回归模型

在定义了逻辑回归模型的$h_\theta(x)$之后,要求$\theta$还需要定义代价函数。回顾线性回归的代价函数,并将其变形写成更一般的形式,对于不同的问题只需要替换其中的$Cost(h_\theta(x^{(i)}), y^{(i)})$即可,如下所示:

$$J(\theta) = \frac{1}{m}\sum_{i=1}^m\frac{1}{2}(h_\theta(x^{(i)}) - y^{(i)})^2$$

$$Cost(h_\theta(x^{(i)}), y^{(i)}) = \frac{1}{2}(h_\theta(x^{(i)}) - y^{(i)})^2$$

线性回归中,代价函数是凸函数,否则无法使用梯度下降的方式进行求解。好在逻辑回归的代价函数有着良好的性质,在无论$y$等于1还是0,都是单调的凸函数(函数图像可参见文末附件中相应部分),其代价函数$Cost(h_\theta(x^{(i)}), y^{(i)})$如下所示:

$$\mathrm{Cost}(h_\theta(x),y)=\begin{cases} -\log h_\theta(x) & \mathrm{if} y=1 \\ -\log( 1 - h_\theta(x)) & \mathrm{if} y=0\end{cases}$$

在将此代价函数代入$J(\theta)$的时候有个小技巧,可以将两个条件表达式转化成一个表达式:

$$J(\theta) = -\frac{1}{m}[\sum_{i=1}^m y^{(i)}\log{h_\theta(x^{(i)})} + (1 - y^{(i)})(\log{(1 - h_\theta(x^{(i)})})]$$

对上式就可采用梯度下降法拟合参数$\theta$了,迭代更新参数的方法同线性回归一样,不过需要注意的是在线性回归中$h_\theta(x) = \theta^T x$,而逻辑回归中$h_\theta(x) = \frac{1}{1 + e^{\theta^T x}}$。

此外,还提到了几种梯度下降的优化算法,分别补充了一篇相关的文章,如果感兴趣可以做一个简单了解:

本课程中不要求理解优化算法的原理,也无需自己编写这些算法的代码,除非是数值计算方面的专家或者爱好者。一般直接调用现有的库就可以了,高效且方便。这些算法不需要选择具体的$\alpha$值,可以让算法更快收敛。接下来用Octave的fminunc命令实现了代价函数的优化求解过程。

多类别的分类问题

当对象类别多于两个时,如邮件标识、医学诊断、天气等等,原有的双类分类问题就变成多类别的分类问题,如下图所示:

双类分类vs多类别分类

此时可以采用一对多(one-vs-all)的分类方法,即对每一类训练一个分类器,将该类与其他所有类别分开。然后再用这些分类器判定新到数据属于各类的概率,取其最大者,如下图所示:

One-vs-all分类方法

解决过拟合问题

首先以三个线性回归的例子、三个逻辑回归的例子分别说明了什么是欠拟合(High bias)、过拟合(High variance)和刚刚好(Just right fitting…恕我也不知道怎么翻译贴切了)。以及解决过拟合的两种方法:

  1. 减少特征值的数量,采用人工或者算法自动选择;
  2. 正则化,矩阵特征值大小,看特征对结果的贡献赋予权重。

然后引入了正则化(Regularization)的概念,即通过引入惩罚权重降低高次项对拟合结果的影响,简化假设公式,从而避免过拟合的现象。正则化代价函数如下所示:

$$J(\theta) = \frac{1}{2m} [\sum_{i = 1}^{n}(h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda\sum_{j = 1}^{n}\theta_j^2]$$

分别是线性回归和逻辑回归为例,讲解了权重$\lambda$在更新参数时的策略。

对于线性回归,在使用Normalization方法求解时,如果样本的数量小于特征的数量时,$X^T X$是不可逆的(奇异矩阵)或者退化的(Degenerated);如果$\lambda \gt 0$,$(X^TX + \lambda\diag)$则该矩阵是可逆的(非奇异矩阵),可以用该方法求解。

$$\theta = (X^TX + \lambda\begin{bmatrix}
0 & & & & \\
& 1 & & & \\
& & 1 & & \\
& & & \ddots & \\
& & & & 1
\end{bmatrix})^{-1} X^Ty$$

到本课程的最后,Andrew说如果你掌握了到目前为止所学的课程,那么恭喜你,已经比硅谷中大部分的工程师牛逼了,可以用机器学习做产品赚大钱了。不管你们信不信,反正我是信了~

文章目录
  1. 1. Machine Learning - Andrew Ng on Coursera (Week 3)
    1. 1.1. 分类问题及模型表示
    2. 1.2. 逻辑回归模型
    3. 1.3. 多类别的分类问题
    4. 1.4. 解决过拟合问题
,