斯坦福公开课——机器学习课程(三)

引言

继第二周的内容,本文为第三周的内容。主要是讲逻辑回归和分类问题。


逻辑回归

逻辑回归说简单点,就是二分类问题。应该说是主要用在二分类,但是也可以用来预测概率。将结果映射到[0,1]的区间内(貌似[-1,1]也可以)。

为了满足这样的变换,我们需要重新定义一下h(x)


但是用这样的函数,我们之前在线性回归里面用的代价函数J,在这里就不适用了。因为会导致其是一个非凸函数。不能保证优化到全局最优值。

所以我们将J更改为了如下形式:


把这个画出来就是类似这样的:


这样就是一个凸函数,可以用梯度下降法进行优化。

而这样的代价函数的意思就是,在训练过程中,如果你的预测值和结果不一致,就会产生很大的代价。


更好的代价函数和梯度下降的表达

上述代价函数,是一个类似于分段函数的东西,并不够简洁,也不好看,所以我们将两个合成了一个:


这样一个函数,当y=1时,前半个式子有效,y=0时,后半个式子有效,就达到了和刚刚一样的效果。

然后这又是一个凸函数,接下来,你就可以和之前一样,用梯度下降法来做,每个模型参量的更新算法如下:


你会惊奇的发现,好像和线性回归的有点像。但是这两个算法,因为h函数不一样,所以并不是同一个函数,即使更新规则看起来一样。

用向量的形式来表示如下:


更高级的优化方法

相较于梯度下降法,还有更多高级的算法用来得到我们最优的模型参量:


图左边第一个是梯度下降法,后面的是更高级的算法,右边是优点:第一不需要自己选择学习率,第二更快。但是会比梯度下降法复杂得多。

所以怎么使用它们呢?以两个模型参量和Matalab为例:


先编写一个函数,用来计算和返回目标函数值和梯度值。

然后就可以调用更高级的函数,像下面这样:


options表示配置项变量,'GradObj', 'On'表示我们给他一个梯度,'MaxIter', '100'表示最大迭代次数100。然后就可以调用fminunc这个函数,它会自动选择一个优化函数。

更一般的用法:


图中的表示混合了数学表示和Matlab代码。在大型数据的时候,高级算法会快得多,更适合。


多分类问题

一对多方法:其实就是用多个分类器组合起来,每一个分类器里面,将属于该分类的结果置为1,不符合的其余的都置为0。预测的时候,将一个新的实例丢到所有的分类器里面去运行,选一个结果最大的。


个人觉得,有点蠢,但是很直接有效。


过拟合问题

我想说总算讲到这个问题里面来了。但是这也证明了这个视频很扎实,很基础,很适合入门。

一组数据,我们在拟合的时候,可能会有三种情况:欠拟合,正常,过拟合。类似下图。


第一个就欠拟合了,代价函数很大。第二个就正好,代价函数不大,但是在可接受范围。第三个就是过拟合,代价函数会显得很小,貌似拟合的很好,可是新数据来的时候,就会偏差很大,无法很好地泛化。

有两种办法可以解决正则化:

  • 减少模型参量
    • 人工筛选模型参量
    • 通过一个智能算法筛选出不需要的特征
  • 正则化

正则化

正则化就是将模型参量的值也通过某种方式,加入到代价函数中,这样代价函数就会尽量减少参数的值,进而达到类似于上面讲的减少模型参量的作用。


这就是新的代价函数。后面的λ成为正则化参数。

需要注意的是,后面的正则化并不包括第一个模型参量,但是包含进去也没什么太大的差别。


正则化线性回归

线性回归的代价函数就如上面那个所示了,那么讲讲怎么用两种方法来完成优化。

梯度下降法

将正则化包含进来之后,模型参量的更新就变成了如下形式:


进一步简化下面一个式子,可写为:


图中的这一项:


通常小于1,但接近于1,而后面一项又和原来梯度下降中的一毛一样,所以正则化在梯度下降中,仅仅只是压缩了一下原模型参量的值而已。

正规方程法

原来的正规方程解法,变为如下:


后面那个类似于单位矩阵的大小为(n+1)*(n+1)


正则化逻辑回归

首先代价函数变成了这样:

参数更新的方法,就不放了,给你们省点流量,因为和上面线性回归梯度下降的看起来是一样的,但是h函数不一样了,所以实际上是不一样的。


将正则化使用到更高级的优化函数中

其实和之前的用法是一样的,只要在函数里面写好代价函数和偏导数就行。


后记

长路漫漫,后面还有更多的机器学习算法,等着你呢。加油!