机器学习笔记(三)线性回归和逻辑回归
线性回归和逻辑回归作为机器学习领域的基础模型,简单却也经典。机器学习领域一般有两种任务:分类和回归。分类通常是判断未知样本属于哪一类,例如0和1,好和坏,大和小等等,而回归不仅仅是判断是是什么,还要判断是多少的任务。
一、线性回归
线性回归是常见的机器学习模型,也是很多人学习机器学习的第一个模型,并且因为线性回归的数学原理比较简单,可以帮助初学者把机器学习和数学原理比较清晰的结合理解。
1.1 平面拟合
假如有一个银行贷款的任务,根据贷款人的工资和年龄来决定贷款金额。现在我们有一批银行实际的贷款数据,需要建立一个多元线性回归模型来判断贷款人的实际贷款金额。
由上表我们可以知道,数据有两个特征:工资和年龄。标签是贷款金额,工资和年龄都会影响终端贷款结果,那么他们的各自影响有多大呢?转化为一个数学问题就是:我们有两个自变量X1、X2(年龄、工资),因变量Y(贷款金额),我们需要找到一个最合适的平面来拟合我们的数据。
由此,我们可以列出一个参数方程:
是年龄的参数,
是工资的参数,
是偏执项(注意上式的
是1,为了转化为矩阵问题,方便计算)。现在我们的任务变成了求解这三个参数的问题。三个参数,只需给出三组(X,Y)数据即可求出,但是现在我们拥有远多于此的数据,可能是三千组或者三万组、三十万组,现在该怎么计算呢?可以发现我们的任务变成了:找出一个拟合平面,使得所有样本的自变量通过该平面的映射值与实际值之间的误差(损失)最小。是不是很熟悉这句话,还记得曾经学习过的最小二乘法吗?那么最小二乘法能不能解决我们的问题呢?
1.2 似然函数
前面我们说了,虽然我们可以找出一个拟合平面建立模型,但是这个拟合平面求出的值和实际值之间肯定是有差异的(误差),使用 来表示这个差异值。则对于每一个样本:
同时,我们认为误差 是独立且都服从均值为0,方差为
的高斯分布。什么意思呢?
- 独立:任意两个样本之间都是没有关系的,即A的贷款金额和B的贷款金额没有任何关系。
- 同分布:任意两个样本都根据同一套标准得出,即所有贷款数据都来自同一家银行的同一套判断标准。
- 高斯分布:前面两点比较容易理解,之所以说误差满足高斯分布,是因为根据我们的模型预测出的结果,可能都会存在偏差,有的会比实际值大,有的会比实际值小,但是绝大多数情况,这个偏差都是非常小的,预测结果和实际值偏差比较大的情况会比较少,也就是说,我们首先假设我们的模型是有效的。
由于误差服从标准高斯分布,则:
将(2)式代入(3)中:
假设我们的样本个数是m,那么则m个样本同时发生的概率就是:
根据最大似然估计,已经得到样本发生的概率最大,则(5)式就是我们的似然函数,采用对数化简:
为了使得最大似然函数最大,因为(6)式的前半部分为正,则我们的任务就变成了使(6)式的后半部分最小即可,那么我们最终需要求解的目标函数就是:
其中:
这里注意区分,
,...,
表示我们的样本特征,也就是我们上文说到的m个样本,而
中的
,
,
表示我们的实际特征(年龄、工资),在实际任务中,特征数量可能会远多于两个,此处只列出两个是为了结合前文的例子,易于理解。
对(7)式求偏导:
求极小值点,令偏导为0:
1.3 梯度下降
在1.2中我们已经介绍了目标函数和的解,但是在实际中我们几乎不会直接去求解模型参数,除了直接计算复杂和计算成本高之外,很多模型并不像线性回归一样可以直接求解的。
我们的任务是在已知样本X的基础上,寻找一个最优解使得目标函数的值最小,我们在计算过程中往往不会把所有样本数据一次性全部进行计算(实际任务中样本数据一般都比较大,对计算机硬件要求较高),而是分批迭代计算,例如每次拿一万个样本参与计算。对于
,我们也不会直接根据样本X直接计算,我们采用不断调整
的值,使得目标函数越来越小,也即整个计算过程是一个不断迭代的过程。当然,对于
的调整也并不是盲目的,沿着坡度(偏导)的方向调整参数效率是最高的,每次调整的幅度(学习率)也不能太大,因为太大很可能会跳过全局最小值点,导致“震荡现象”。沿着坡度的方向不断调整参数,这也就是我们常说的梯度下降算法。
根据(7)式的目标函数(分母的m表示求平均损失):
梯度下降可以按照三种不同的方法进行:
- 批量(全局)梯度下降,即每次计算都把全部样本参与计算,好处是容易得到最优解,缺点是前文叙述的计算成本高、速度慢。
- 随机梯度下降,每次拿一个样本参与计算,好处是迭代速度快,但是因为每次只考虑了一个样本,会导致模型收敛较慢,并且每次迭代有很多时间消耗在了数据更新上。
- 小批量梯度下降(batch),即每次只拿一部分样本参与计算,兼顾计算成本和收敛速度。例如,每次拿10个样本参与计算(
表示学习率):
1.4 学习率
在1.3中我们已经提到了学习率的概念。顾名思义,学习率参数是用来控制学习参数调节幅度的,学习率太大,容易导致“震荡现象”,甚至不收敛,学习率太小又会导致模型训练速度变慢。当然,对于现在的很多服务器算力来说,这个参数并不是很重要,即使设置的很小,也能在可接受的时间范围内收敛。学习率在深度学习模型训练中更加重要,因为刚开始的模型损失一般都比较大,学习率可以大一点,等到损失降下来以后,学习率可以设置的小一点,因此,在深度学习中也经常使用学习率衰减的方法来训练模型。
二、逻辑回归
如果说线性回归只是为了让我们更好的理解机器学习中的数学知识,在实际中应用较少的话,那么逻辑回归在实际应用中就很普遍了,同时逻辑回归也是一个非常经典的分类模型。机器学习虽然有很多算法,但是在实际业务中,我们往往也会首先使用逻辑回归测试效果,作为一个baseline,在效果差不多的情况下,也会优先选择逻辑回归。
2.1 sigmod函数
逻辑回归的核心是sigmod函数,sigmod函数定义如下:
sigmod函数的输入可以为任意实数值,值域(0,1),且是在(0,0.5)坐标点中心对称的。sigmod函数的(0,1)值域可以很好的转为概率定义,因此sigmod函数包括其升级版softmax在很多模型中的最后一步用的非常广泛。