深入机器学习系列之:逻辑回归

2018 年 12 月 6 日 数据猿

导读

逻辑回归是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型,逻辑回归其实是在线性回归的基础上,套用了一个逻辑函数。

来源: 星环科技丨作者:智子AI

数据猿官网 | www.datayuan.cn

今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博客中国丨趣头条丨腾讯云·云+社区

1 二元逻辑回归


回归是一种很容易理解的模型,就相当于y=f(x),表明自变量x与因变量y的关系。最常见问题如医生治病时的望、闻、问、切,之后判定病人是否生病或生了什么病, 其中的望、闻、问、切就是获取的自变量x,即特征数据,判断是否生病就相当于获取因变量y,即预测分类。最简单的回归是线性回归,但是线性回归的鲁棒性很差。


逻辑回归是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型,其回归方程与回归曲线如下图所示。逻辑曲线在z=0时,十分敏感,在z>>0或z<<0时,都不敏感。

逻辑回归其实是在线性回归的基础上,套用了一个逻辑函数。上图的g(z)就是这个逻辑函数(或称为Sigmoid函数)。下面左图是一个线性的决策边界,右图是非线性的决策边界。



对于线性边界的情况,边界形式可以归纳为如下公式**(1)**:

因此我们可以构造预测函数为如下公式**(2)**:

该预测函数表示分类结果为1时的概率。因此对于输入点x,分类结果为类别1和类别0的概率分别为如下公式**(3)**:

对于训练数据集,特征数据x={x1, x2, … , xm}和对应的分类数据y={y1, y2, … , ym}。构建逻辑回归模型f,最典型的构建方法便是应用极大似然估计。对公式**(3)取极大似然函数,可以得到如下的公式(4)**:

再对公式**(4)取对数,可得到公式(5)**:

最大似然估计就是求使l取最大值时的theta。MLlib中提供了两种方法来求这个参数,分别是梯度下降法和L-BFGS。


2 多元逻辑回归


二元逻辑回归可以一般化为多元逻辑回归用来训练和预测多分类问题。对于多分类问题,算法将会训练出一个多元逻辑回归模型, 它包含K-1个二元回归模型。给定一个数据点,K-1个模型都会运行,概率最大的类别将会被选为预测类别。


对于输入点x,分类结果为各类别的概率分别为如下公式**(6)**,其中k表示类别个数。

对于k类的多分类问题,模型的权重w = (w_1, w_2, ..., w_{K-1})是一个矩阵,如果添加截距,矩阵的维度为(K-1) * (N+1),否则为(K-1) * N。单个样本的目标函数的损失函数可以写成如下公式**(7)**的形式。

对损失函数求一阶导数,我们可以得到下面的公式**(8)**:

根据上面的公式,如果某些margin的值大于709.78,multiplier以及逻辑函数的计算会出现算术溢出(arithmetic overflow)的情况。这个问题发生在有离群点远离超平面的情况下。 幸运的是,当max(margins) = maxMargin > 0时,损失函数可以重写为如下公式**(9)**的形式。


同理,multiplier也可以重写为如下公式**(10)**的形式。


3 逻辑回归的优缺点


  • 优点:计算代价低,速度快,容易理解和实现。

  • 缺点:容易欠拟合,分类和回归的精度不高。


4 实例

下面的例子展示了如何使用逻辑回归。

5 源码分析


5.1 训练模型

如上所述,在MLlib中,分别使用了梯度下降法和L-BFGS实现逻辑回归参数的计算。这两个算法的实现我们会在最优化章节介绍,这里我们介绍公共的部分。


LogisticRegressionWithLBFGS和LogisticRegressionWithSGD的入口函数均是GeneralizedLinearAlgorithm.run,下面详细分析该方法。

上面的代码初始化权重向量,向量的值均初始化为0。需要注意的是,addIntercept表示是否添加截距(Intercept,指函数图形与坐标的交点到原点的距离),默认是不添加的。numOfLinearPredictor表示二元逻辑回归模型的个数。 我们重点run(input, initialWeights)的实现。它的实现分四步。


5.1.1 根据提供的参数缩放特征并添加截距

在最优化过程中,收敛速度依赖于训练数据集的条件数(condition number),缩放变量经常可以启发式地减少这些条件数,提高收敛速度。不减少条件数,一些混合有不同范围列的数据集可能不能收敛。 在这里使用StandardScaler将数据集的特征进行缩放。详细信息请看StandardScaler。appendBias方法很简单,就是在每个向量后面加一个值为1的项。

5.1.2 使用最优化算法计算最终的权重值

有梯度下降算法和L-BFGS两种算法来计算最终的权重值,查看梯度下降法和L-BFGS了解详细实现。 这两种算法均使用Gradient的实现类计算梯度,使用Updater的实现类更新参数。在LogisticRegressionWithSGD 和LogisticRegressionWithLBFGS 中,它们均使用 LogisticGradient 实现类计算梯度,使用 SquaredL2Updater 实现类更新参数。

下面将详细介绍LogisticGradient的实现和SquaredL2Updater的实现。


  • LogisticGradient


LogisticGradient中使用compute方法计算梯度。计算分为两种情况,即二元逻辑回归的情况和多元逻辑回归的情况。虽然多元逻辑回归也可以实现二元分类,但是为了效率,compute方法仍然实现了一个二元逻辑回归的版本。

这里的multiplier就是上文的公式**(2)**。axpy方法用于计算梯度,这里表示的意思是h(x) * x。下面是多元逻辑回归的实现方法。

  • SquaredL2Updater

该函数的实现规则是:

这里thisIterStepSize表示参数沿负梯度方向改变的速率,它随着迭代次数的增多而减小。


5.1.3 对最终的权重值进行后处理

该段代码获得了截距(intercept)以及最终的权重值。由于截距(intercept)和权重是在收缩的空间进行训练的,所以我们需要再把它们转换到原始的空间。数学知识告诉我们,如果我们仅仅执行标准化而没有减去均值,即withStd = true, withMean = false, 那么截距(intercept)的值并不会发送改变。所以下面的代码仅仅处理权重向量。

5.1.4 创建模型

5.2 预测


训练完模型之后,我们就可以通过训练的模型计算得到测试数据的分类信息。predictPoint用来预测分类信息。它针对二分类和多分类,分别进行处理。


  • 二分类的情况

我们可以看到1.0 / (1.0 + math.exp(-margin))就是上文提到的逻辑函数即sigmoid函数。

  • 多分类情况

该段代码计算并找到最大的margin。如果maxMargin为负,那么第一类是该数据的类别。


参考文献


【1】逻辑回归模型(Logistic Regression, LR)基础

【2】逻辑回归


▲向上滑动


采访/报道/投稿

yaphet.zhang@datayuan.cn


商务合作

18600591561(微信)



长按右方二维码

关注我们ˉ►


登录查看更多
0

相关内容

逻辑回归(也称“对数几率回归”)(英语:Logistic regression 或logit regression),即逻辑模型(英语:Logit model,也译作“评定模型”、“分类评定模型”)是离散选择法模型之一,属于多重变量分析范畴,是社会学、生物统计学、临床、数量心理学、计量经济学、市场营销等统计实证分析的常用方法。在统计学中,logistic模型(或logit模型)用于对存在的某个类或事件的概率建模,例如通过/失败、赢/输、活着/死了或健康/生病。这可以扩展到建模若干类事件,如确定一个图像是否包含猫、狗、狮子等。图像中检测到的每个物体的概率都在0到1之间,其和为1。
【经典书】机器学习高斯过程,266页pdf
专知会员服务
231+阅读 · 2020年5月2日
【干货书】机器学习Python实战教程,366页pdf
专知会员服务
342+阅读 · 2020年3月17日
谷歌机器学习速成课程中文版pdf
专知会员服务
146+阅读 · 2019年12月4日
一文读懂线性回归、岭回归和Lasso回归
CSDN
34+阅读 · 2019年10月13日
sklearn 与分类算法
人工智能头条
7+阅读 · 2019年3月12日
深入机器学习系列之:高斯混合模型
数据猿
8+阅读 · 2019年1月10日
博客 | 回归类算法最全综述及逻辑回归重点讲解
AI研习社
13+阅读 · 2018年11月29日
机器学习者都应该知道的五种损失函数!
数盟
5+阅读 · 2018年6月21日
深度 | 结合Logistic回归构建最大熵马尔科夫模型
机器之心
4+阅读 · 2017年11月25日
10分钟搞懂Tensorflow 逻辑回归实现手写识别
全球人工智能
5+阅读 · 2017年10月19日
机器学习(16)之支持向量机原理(二)软间隔最大化
机器学习算法与Python学习
6+阅读 · 2017年9月8日
从逻辑回归到最大熵模型
夕小瑶的卖萌屋
4+阅读 · 2017年7月11日
Do RNN and LSTM have Long Memory?
Arxiv
19+阅读 · 2020年6月10日
Bivariate Beta LSTM
Arxiv
6+阅读 · 2019年10月7日
Adaptive Neural Trees
Arxiv
4+阅读 · 2018年12月10日
Arxiv
5+阅读 · 2018年1月16日
Arxiv
3+阅读 · 2017年7月6日
VIP会员
相关VIP内容
【经典书】机器学习高斯过程,266页pdf
专知会员服务
231+阅读 · 2020年5月2日
【干货书】机器学习Python实战教程,366页pdf
专知会员服务
342+阅读 · 2020年3月17日
谷歌机器学习速成课程中文版pdf
专知会员服务
146+阅读 · 2019年12月4日
相关资讯
一文读懂线性回归、岭回归和Lasso回归
CSDN
34+阅读 · 2019年10月13日
sklearn 与分类算法
人工智能头条
7+阅读 · 2019年3月12日
深入机器学习系列之:高斯混合模型
数据猿
8+阅读 · 2019年1月10日
博客 | 回归类算法最全综述及逻辑回归重点讲解
AI研习社
13+阅读 · 2018年11月29日
机器学习者都应该知道的五种损失函数!
数盟
5+阅读 · 2018年6月21日
深度 | 结合Logistic回归构建最大熵马尔科夫模型
机器之心
4+阅读 · 2017年11月25日
10分钟搞懂Tensorflow 逻辑回归实现手写识别
全球人工智能
5+阅读 · 2017年10月19日
机器学习(16)之支持向量机原理(二)软间隔最大化
机器学习算法与Python学习
6+阅读 · 2017年9月8日
从逻辑回归到最大熵模型
夕小瑶的卖萌屋
4+阅读 · 2017年7月11日
Top
微信扫码咨询专知VIP会员