斯坦福机器学习(三)逻辑回归与正则化

提出背景

现实生活经常会碰到的一种问题就是分类问题,通过机器学习我们可以让机器进行判断某一个事物的好坏或者对事物进行分类。例如判断肿瘤是否为恶性肿瘤,判断葡萄酒属于哪一等级的葡萄酒等。我们很容易想到可以利用线性回归来解决这类问题,通过判断预测值是否大于某一个值来进行对数据的分类,这看起来似乎可行,但实际上是有严重缺陷的,例如下图这种情况:

其试图以预测值是否大于0.5来判断肿瘤是否为恶性肿瘤,但是当加入最右边的样例的时候,预测曲线显然出现了很大的偏置,导致模型不能够很好地拟合数据。
所以我们必须找到一种更好的办法来解决这种分类问题,逻辑回归便因此产生。

逻辑回归模型

逻辑回归模型可以用公式表示如下:

可以称之为S型函数(sigmoid function)或者逻辑函数其函数图形如下:

取值范围为(0,1),通过这种转化,把原来的线性函数转化成为了更佳适用于分类问题的函数取值类型。
预测函数会给出该模型认为其属于某一类型的可能性大小,比如代表有70%的可能我们的输出是1,如果这个1是肿瘤是否恶性,那么我们可以说我们有70%的把握说这个肿瘤是恶性肿瘤,同时其为良性肿瘤的概率便是30%,显然满足如下关系:

决策边界

为了把预测函数的值转化为离散的0/1取值,我们可以把预测函数转化为如下形式:

我们根据前面逻辑函数的形式可以知道,当其输入Z≥0的时候,函数g的输出值将会大于或等于0.5,即如下表现形式:

而且有如下的性质:

如果此时我们把输入Z换成$\theta^TX$输入的话,就意味着:

根据上面的表述,也即可以说:

其图形就是决策边界。决策边界是一条把y=0与y=1区域分开线,它是由预测函数本身参数决定的,是一种属性。
当决策边界是直线时表现为如下形式:

当然它也可能是其他各种非线性的形状如下所示:

根据Z的值是否大于零就可以确定区域内与区域外的分类情况。

逻辑回归的代价函数

线性回归的代价函数看起来似乎也很符合逻辑回归的应用,但是经过实际观察得知其实并不如此。画出图形发现使其用于逻辑回归会成为如下的形状:

显然函数是非凸的(convex),这样很可能不会得到全局最优解,因此需要找到一种新的代价函数形式专门用于逻辑回归,现在我们把新的形式定义如下:

当y=1的时候,代价函数的图像如下:

其单调递减,且当预测值趋于0时,代价函数的值趋于正无穷,当预测值为1时,代价函数的值为0。
当y=0的时候,代价函数的图像如下:

其单调递增,且当预测值趋于1时,代价函数的值趋于正无穷,当预测值为0时,代价函数的值为0。
这很容易理解,当y=1的时候,预测为1当然是百分百准确的,代价必然为0,反之预测为0是一点都不准确的,同理对y=0的时候也是如此。
这两个函数都是凸函数,显然可以很好地应用于逻辑回归作为代价函数。

简化代价函数并进行梯度下降

显然对于两条方程并不能适用于梯度下降,我们必须对其简化,使之化为一条式子才能够进行梯度下降,因此可以写出新的费用形式如下:

显然其余前面的方程是等价的,由此转化成为了一条式子,并可以据此写出新的代价函数如下:

可以向量化表示为:

由此就可以得到新的梯度下降的形式:

对其解出微分后的形式如下:

其形式和之前缩写的代价函数是一致的,并且可以向量化地表述为如下形式:

高级最优化算法

比梯度下降法更加高级的算法有共轭梯度法、BFGS、L-BGFS等,这些算法都具有自动选取学习速率$\alpha$等能力,甚至能够在循环进行的过程中自动改变学习速率的值,并通常比梯度下降法快得多。但是多数情况下我们并不需要知道他们具体是怎么实现的,只要掌握运用即可。在Octave已经封装好了用以上几种方法求解最优参数值得函数”fminunc()”,我们只需要提供好参数直接进行调用求解即可。
代价函数依照以下形式编写:

1
2
3
4
function [jVal, gradient] = costFunction(theta)
jVal = [...code to compute J(theta)...];
gradient = [...code to compute derivative of J(theta)...];
end

则调用如下:

1
2
3
4
5
% GradObj表示是否可以利用梯度下降,MaxIter表示在聚集前最大可以循环的次数
% 提供给fminunc的参数有代价函数、用以求得最优解值的参数矩阵以及其他可选项。
options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);

运行之后,将会返回最优参数值、函数值以及一个表明是否已经聚集的标志。

多重分类

多重分类只要把每一组向数据独立出来与其余数据进行逻辑回归求解,得到对每一个类型的预测函数,输出可能性最大那个类型即可,可以列出公式如下:

当n=2的时候,要进行一次逻辑回归,而当n≥3的时候,要进行n次逻辑回归,其示意图如下图所示:

过拟合现象以及其解决方式

当进行线性回归的时候,待拟合函数的最高次数如果比较低的话,往往拟合效果会非常差。如果待拟合函数的最高次数足越高,一般与现行数据的拟合程度就会越好,但是这并不总是意见好事,有时就会出现一种叫过拟合的现象。一下三幅函数图分别代表了欠拟合、拟合较好、过拟合三种情况:

当出现过拟合现象的时候,预测函数能够非常好地拟合用于拟合的数据,但是却不能很好地把这些数据泛化到其他未输入的数据当中,造成高方差的情况,而且函数图像会变得没有规律。其出现的主要原因是因为函数的维度太大、以及训练集的数量太少。
为此,要解决过拟合的现象,我们可以人为或者使用特定的某种算法(PAC、因子分析等)去选择保留哪些特征,删掉掉哪些贡献不大的特征,当然这些特征对原函数肯定是有贡献的,删除掉必然导致某些信息的缺失,所以更好的办法是使用正则化处理,这样可以保留所有的特征,但是减少的规模与大小,正则化尤其适用于那些贡献不大的特征比较多的场合。

正则化

通过正则化可以通过对参数进行“惩罚”,让拟合函数的图形变得更加平滑,其应用于线性回归时候的伪代码如下所示:

为什么通过加上惩罚可以使函数更加平滑呢?把其展开可以发现正则化其实是做了如下操作:

观察知道,除了$\theta_j$会在每次循环的时候先替换成一个比本身小一点点的值在进行更新,这样循环下来的值都会减小一点点,达到了控制进行速度,减小参数值,从而更好地拟合数据的目的。
学到这里,我们就可以解决前面正规方程面对奇异矩阵的问题了,通过正则化,可以把矩阵变化成为一个可逆阵,只需要按照以下的公式进行:

即加上了$\lambda·L$,实现了其正则化,可以证明知道这样获得矩阵是可逆的,故正规方程可解。
接下来介绍用于逻辑回归的正则化,其能够把决策边界变得更加光滑,从而泛化到更多的数据,效果如下图所示:

其正则化的代价函数如下:

注意一定要从i=1开始,对应的要把i=0的常数项排除在正则化之外,否则可能会带来不好的影响。所以对逻辑回归进行梯度下降形式如下:

结合正规化以及之前所学的高级最优化函数,我们已经可以解决绝大部分的线性回归、逻辑回归问题了。