引言
继第二周的内容,本文为第三周的内容。主要是讲逻辑回归和分类问题。
逻辑回归
逻辑回归说简单点,就是二分类问题。应该说是主要用在二分类,但是也可以用来预测概率。将结果映射到[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
函数不一样了,所以实际上是不一样的。
将正则化使用到更高级的优化函数中
其实和之前的用法是一样的,只要在函数里面写好代价函数和偏导数就行。
后记
长路漫漫,后面还有更多的机器学习算法,等着你呢。加油!