吴恩达机器学习:逻辑回归
在 上一周的课程 里,Andrew Ng 为我们介绍了什么是机器学习以及监督学习中的线性回归。对于一个监督学习,我们要确定我们的 预测函数,代价函数,然后利用梯度下降算法找到 代价函数 最小时,预测函数 中的参数值。这周我们会接触监督学习中一类新的问题,称为分类问题。
点击 课程视频 你就能不间断地学习 Ng 的课程,关于课程作业的 Python 代码已经放到了 Github 上,点击 课程代码 就能去 Github 查看,代码中的错误和改进欢迎大家指出。
以下是 Ng 机器学习课程第二周的笔记。
分类问题
对于监督学习中的分类问题,通常已知一些数据并知道它们各自属于什么类别,然后希望基于这些数据来判断新数据是属于什么类别的。比如已知一些症状特征和是否患有某种疾病的数据,基于这些数据来判断新的病人是否患病。再比如根据过去的垃圾邮件数据来判断新邮件是否为垃圾邮件。
预测函数
对于 线性回归 我们的 预测函数 为:
但这个 预测函数 的输出是个没有范围的连续值,并不适合分类问题。因此在 逻辑回归 中使用了:
来作 预测函数,其中 被称为 Sigmoid 函数,它很好地将 预测函数 的输出值控制在 0、1 之间。( 下图为 Sigmoid 函数图像 )
这样就可以将 预测函数 解释为在给定 及参数 的情况下, ( 属于这个分类 )的概率:
决策边界
对于分类问题,有一个新的概念称为 决策边界。由于最终我们必须决定输入数据是否属于某个分类,我们设定了 作为阈值,预测函数 输出大于 的就属于该分类,反之不属于。而 时,对应于 。我们将 对应的曲线称为决策边界( 注意这里的 并不是指训练数据,决策边界是 的属性,下图为作业中的决策边界 )。
代价函数
再来说说 逻辑回归 中的代价函数。如果沿用 线性回归 中的代价函数,我们会得到类似下图的曲线( 下图为单个特征 所对应的 代价函数 曲线,和 Ng 画的不太一样 ):
在这样的函数上使用梯度下降算法,最终很有可能在平坡处停止。在数学上我们已知如果一个函数是凸的,那么使用梯度下降一定能找到全局最小值。凸函数 是一个很强的限制,可以形象地理解为,在函数上任取一段都是向外凸的( 如下图,详细定义见 维基百科 )。
所以我们使用新的 代价函数 使得它满足 凸函数 的性质。
梯度下降
求解 代价函数 最值的方法还是 梯度下降 算法,所以我们需要对 进行求导( 求导的计算过程能够给你一个印象,知道求导的结果是怎么来的。但是为了让大家不要淹没在计算的细节中,文章都会省略计算给出最终结果的矩阵形式 )。
有了 代价函数 和 梯度 就能够自己实现梯度下降算法来求解问题了。不过在课程中 Ng 提到了几种 梯度下降 的优化算法,Conjugate descent、BFGS、L-BFGS。这些算法不需要指定学习率,而且能够更快地找到解,我们可以通过调用内置函数来完成学习( 在作业中由于没有 Octave 的 fminunc 函数,作为代替使用了 scipy 包中的 minimize 函数,算法用的是 BFGS )。
正则化
正则化 的引入是为了防止学习中的 过拟合现象。简单来说 过拟合现象 就是我们的学习算法将很多对问题并不重要的 细节特征甚至 噪声 都考虑了进来,认为它们是决策依据。就像对于作业 ex2_reg.py 中需要分类的数据,假设了 预测函数 :
对于含有 28 个参数的 预测函数 ,可以拟合很多类型的数据,但对于作业中的数据有些特征并不需要。我们希望 取得最小的同时,特征的系数 尽可能小。为此对 代价函数 做一些修改变成如下形式:
试中 为正则化系数,用来平衡两个目标,一个是让前半部分的 代价函数 尽量小,一个是避免参数过大导致过拟合。后半部分正则化项中的 取零,因为一般不对其进行约束。线性回归 同样可以使用正则化的方法,这里我们只给出正则化后的代价函数:
如果使用正规方程求解的话,那么最后 的解为:
正则化 是一个蛮大的主题,在这里一时半会没法讲全,自己理解的也不透彻,等有了更好的体会时再与大家分享。
So~,第二周的内容就是这些了,谢谢大家耐心阅读。
拼搭小怪
2018-03-31