对数几率回归——Logistic Regression

1 原理

1.1 引入

首先,在引入LR(Logistic Regression)模型之前,非常重要的一个概念是,该模型在设计之初是用来解决0/1二分类问题,虽然它的名字中有回归二字,但只是在其线性部分隐含地做了一个回归,最终目标还是以解决分类问题为主。

为了较好地掌握 logistic regression 模型,有必要先了解线性回归模型和梯度下降法两个部分的内容,可参考以下两篇文章:

线性回归 —— Liner Regression

梯度下降法 —— 经典的优化方法

先回想一下线性回归,线性回归模型帮助我们用最简单的线性方程实现了对数据的拟合,然而,这只能完成回归任务,无法完成分类任务,那么 logistics regression 就是在线性回归的基础上添砖加瓦,构建出了一种分类模型。

如果在线性模型 () 的基础上做分类,比如二分类任务,即

,直觉上我们会怎么做?最直观的,可以将线性模型的输出值再套上一个函数,最简单的就是“单位阶跃函数”(unit-step function),如下图中红色线段所示。

也就是把看作为一个分割线,大于 z的判定为类别0,小于 z的判定为类别1。

但是,这样的分段函数数学性质不太好,它既不连续也不可微。我们知道,通常在做优化任务时,目标函数最好是连续可微的。那么如何改进呢?

这里就用到了对数几率函数 (形状如图中黑色曲线所示):

单位阶跃函数与对数几率函数(来源于周志华《机器学习》)

它是一种“Sigmoid”函数,Sigmoid 函数这个名词是表示形式S形的函数,对数几率函数就是其中最重要的代表。这个函数相比前面的分段函数,具有非常好的数学性质,其主要优势如下:

使用该函数做分类问题时,不仅可以预测出类别,还能够得到近似概率预测。这点对很多需要利用概率辅助决策的任务很有用。

对数几率函数是任意阶可导函数,它有着很好的数学性质,很多数值优化算法都可以直接用于求取最优解。

总的来说,模型的完全形式如下:

其实,LR 模型就是在拟合这条直线,使得这条直线尽可能地将原始数据中的两个类别正确的划分开。

1.2 损失函数

对于任何机器学习问题,都需要先明确损失函数,LR模型也不例外,在遇到回归问题时,通常我们会直接想到如下的损失函数形式 (平均误差平方损失 MSE):

但在 LR 模型要解决的二分类问题中,损失函数式什么样的呢?先给出这个损失函数的形式,可以看一看思考一下,然后再做解释。

这个损失函数通常称作为对数损失 (logloss),这里的对数底为自然对数 e,其中真实值 y是有 0/1 两种情况,而推测值由于借助对数几率函数,其输出是介于0~1之间连续概率值。仔细查看,不难发现,当真实值 y=0时,第一项为0,当真实值 y=1时,第二项为0,所以,这个损失函数其实在每次计算时永远都只有一项在发挥作用,那这不就可以转换为分段函数了吗,分段的形式如下:

不难发现,当真实值 y为1时,输出值越接近1,则 L越小,当真实值 y为 0 时,输出值越接近于0,则 L越小 (可自己手画一下

函数的曲线)。该分段函数整合之后就是上面我们所列出的 logloss 损失函数的形式。

1.3 优化求解

现在我们已经确定了模型的损失函数,那么接下来就是根据这个损失函数,不断优化模型参数从而获得拟合数据的最佳模型。

重新看一下损失函数,其本质上是 L关于模型中线性方程部分的两个参数 w和 b的函数:

其中,

现在的学习任务转化为数学优化的形式即为:

由于损失函数连续可微,我们就可以借助梯度下降法进行优化求解,对于连个核心参数的更新方式如下:

计算到这里,很有意思的事情发生了:

计算了半天原来变得如此简单,就是推测值和真实值 Y之间的差值,其实这也是得益于对数几率函数本身很好的数学性质。

再接再厉,求得:

2 代码实现

下面我们开始用 python 自己实现一个简单的 LR 模型。

完整代码可参考:[link]

首先,建立logistic_regression.py文件,构建 LR 模型的类,内部实现了其核心的优化函数。

然后,这里我们创建了一个 文件,单独用于创建模拟数据,并且内部实现了训练/测试数据的划分功能。

最后,创建train.py文件,调用之前自己写的 LR 类模型实现分类任务,查看分类的精度。

输出结果图如下:

输出的分类结果图

红色直线即为 LR 模型中的线性方程,所以本质上 LR 在做的就是不断拟合这条红色的分割边界使得边界两侧的类别正确率尽可能高。因此,LR 其实是一种线性分类器,对于输入数据的分布为非线性复杂情况时,往往需要我们采用更复杂的模型,或者继续在特征工程上做文章。

∞∞∞∞∞

IT派 -

持续关注互联网、区块链、人工智能领域

邀你加入{ IT派AI机器学习群 }

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180605B083UX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券