Python机器学习算法: 原理、实现与案例
上QQ阅读APP看书,第一时间看更新

2.1 Logistic回归

2.1.1 线性模型

Logistic回归是一种广义线性模型,它使用线性判别式函数对实例进行分类。举一个例子,图2-1中有两种类别的实例,o表示正例,x表示负例。

我们可以找到一个超平面将两类实例分隔开,即正确分类,假设超平面方程为:

其中,为超平面的法向量,为偏置。

超平面上方的点都满足:

图2-1

而超平面下方的点都满足:

这意味着,我们可以根据以下的线性函数的值(与0的比较结果)判断实例的类别:

分类函数以为输入,输出预测的类别:

以上便是线性分类器的基本模型。

2.1.2 logistic函数

显然,最理想的分类函数为单位阶跃函数:

但单位阶跃函数作为分类函数有一个严重缺点:它不连续,所以不是处处可微,这使得一些算法不能得以应用(如梯度下降)。我们希望找到一个在输入输出特性上与单位阶跃函数类似,并且单调可微的函数来替代阶跃函数,logistic函数便是一种常用替代函数。

logistic回归函数定义为:

其函数图像如图2-2所示。

图2-2

logistic函数是一种Sigmoid函数(S型)。从图2-2可以看出,logistic函数的值域在(0, 1)之间连续,函数的输出可视为条件下实例为正例的条件概率,即:

那么,条件下实例为负例的条件概率为:

以上概率的意义是什么呢?实际上,logistic函数是对数概率函数的反函数。一个事件的概率(odds)指该事件发生的概率与该事件不发生的概率的比值。那么,对数概率为:

对数概率大于0表明是正例的概率大,小于0表明是负例的概率大。

Logistic回归模型假设一个实例为正例的对数概率是输入的线性函数,即:

反求上式中的便可得出:

理解上述logistic函数概率的意义,是后面使用极大似然法的基础。

另外,logistic函数还有一个很好的数学特性,的一阶导数形式简单,并且是的函数:

2.1.3 Logistic回归模型

Logistic回归模型假设函数为:

为了方便,通常将纳入权向量,作为,同时为输入向量添加一个常数1作为

此时:

假设函数为:

的输出是预测为正例的概率,如果通过训练确定了模型参数,便可构建二元分类函数:

2.1.4 极大似然法估计参数

确定了假设函数,接下来训练模型参数。对于给定的包含m个样本的数据集,可以使用极大似然估计法来估计

根据的概率意义,有:

综合上述二式可得出,训练集中某样本,模型将输入实例预测为类别的概率为:

训练集中各样本独立同分布,因此我们定义似然函数来描述训练集中m个样本同时出现的概率为:

极大似然法估计参数的核心思想是:选择参数,使得当前已经观测到的数据(训练集中的m个样本)最有可能出现(概率最大),即:

是一系列项之积,求导比较麻烦,不容易找出其最大值点(即求出最大值)。函数是单调递增函数,因此可将问题转化为找出对数似然函数的最大值点,即:

根据定义,对数似然函数为:

经观察可看出,以上对数似然函数是一系列项之和,求导简单,容易找到最大值点,即求出最大值。

2.1.5 梯度下降更新公式

习惯上,我们通常定义模型的损失函数,并求其最小值(找出最小值点)。对于Logistic回归模型,可以定义其损失函数为:

此时,求出损失函数最小值与求出对数似然函数最大值等价。求损失函数最小值,依然可以使用梯度下降算法,最终估计出模型参数

下面计算损失函数的梯度,从而推出梯度下降算法中的更新公式。

计算对分量的偏导数:

其中,可解释为模型预测为正例的概率与其实际类别之间的误差。

由此可推出梯度计算公式为:

对于随机梯度下降算法,每次只使用一个样本来计算梯度(m=1),相应梯度计算公式为:

假设梯度下降(或随机梯度下降)算法的学习率为,模型参数的更新公式为: