在继续学习 GBDT(Gradient Boosting Dicision Tree) 决策树前,我们需要先来了解下逻辑回归算法(Logistic Regression),因为 GBDT 较为复杂,但在逻辑回归的基础上,理解起来会容易些。

逻辑回归是机器学习中最为基础的算法,也是工业界使用得最多的算法之一,究其原因,在于其简单、高效以及实用。

虽然线性回归也很简单,但却不实用,是因为逻辑回归本质上是一个概率模型,在实际应用中,预测一个 0-1 之间的概率值要比预测一个实数的场景要多得多,比如在广告业务中,我们往往求的是用户点击一条广告的概率。

逻辑回归是一个概率模型,但通过一定的转换,我们依然可以把该模型的预测范围从 0-1 转换到实数范围,所以它和线性回归都可以被归纳到「通用的线性模型」(Generalized Linear Model)中,要理解这种转换,我们需要引入一个概念:odds 和 log(odds)。

odds 和 log(odds)
odds 是几率、胜算的意思,据维基百科记载,这个概念主要在赌博和统计学领域中使用,且它的历史可以追溯到 16 世纪,早于概率论的发展时期。

odds 很容易理解,拿足球比赛作为例子,假设中国队打巴西队,中国队的赢面是 1,输面是 99,那么中国队赢的 odds 为 1/99,输的 odds 就是 99,odds 和概率的区别也很容易通过这个例子看出来,从概率的角度讲,中国队赢巴西队的概率为 0.01,输的概率为 0.99。

上面的例子还可以看出,中国队赢的 odds 和巴西队赢的 odds 落在不同的取值范围中,中国队赢的 odds 的落在 (0,1) 区间,而巴西队落在 (1,∞) 区间;也就是说,中国队和巴西队比赛,两个队伍的输赢程度应该是相等的,但 1/99 和 99 这两个数,它们的尺度不同,就很难对此做出直观的判断;而 log(odds) 就是用来解决该问题的:

中国队赢    巴西队赢
odds    1/99    99
log(odds)    -4.60    4.60
可以看到,对 odds 加了 log 后,中国队赢和巴西队赢这两种情况的 log(odds) 的绝对值都是 4.6,即两者的输赢程度相同,一眼就可以看出来;且当我们算赢面的 log(odds) 时,通过正负号就可以判断赢面多还是赢面少,如 -4.6 就表示中国队的赢面是少的;此外,当 log(odds) 为 0 时,赢面和输面一样多。

log(odds) 是一个很有用的指标,你可以写一个程序,不断产生 0-100 之间的随机数 x xx,然后把 x xx 对应的 log ⁡ ( x 100 − x ) \log(\frac{x}{100-x})log( 
100−x
x
​    
 ) 用柱状图画出来,你会发现它符合正态分布:

在实际应用中,我们可以把上面的 x xx 替换为某个网站的点击,或购买等指标,根据历史数据算出对应的 log(odds) 分布,再找一堆相关的特征来拟合这个分布,这就是我们所说的 CTR(Click Through Ratio)或 CVR(Conversion Rate) 模型,后续来了一个用户,我们把他相关的特征带入到模型中,算出相应的 log(odds),就是这个用户会点击或购买某个商品的几率。

至此,有同学会问,这和逻辑回归有什么关系?实际上,log(odds) 还有一种计算方法:
log ⁡ ( o d d s ) = log ⁡ ( p 1 − p ) \log(odds) = \log(\frac{p}{1-p})
log(odds)=log( 
1−p
p
​    
 )

其实也很容易理解,依然是上面的例子,中国队胜利的概率为 p=0.1,中国队胜利的 log(odds) 为
log ⁡ ( o d d s ) = log ⁡ ( 1 99 ) = log ⁡ ( 1 100 99 100 ) = log ⁡ ( 1 100 1 − 1 100 ) = log ⁡ ( p 1 − p )
log(odds)=log(199)=log(110099100)=log(11001−1100)=log(p1−p)
log⁡(odds)=log⁡(199)=log⁡(110099100)=log⁡(11001−1100)=log⁡(p1−p)
log(odds)
​    
  
=log( 
99
1
​    
 )
=log( 
100
99
​    
 
100
1
​    
 
​    
 )
=log( 
1− 
100
1
​    
 
100
1
​    
 
​    
 )
=log( 
1−p
p
​    
 )

我们把等式两边同时求一个 e ee 次方,算出 p 值,即
p = e log ⁡ ( o d d s ) 1 + e log ⁡ ( o d d s ) = 1 1 + e − log ⁡ ( o d d s )
p=elog(odds)1+elog(odds)=11+e−log(odds)
p=elog⁡(odds)1+elog⁡(odds)=11+e−log⁡(odds)
p
​    
  

1+e 
log(odds)
 

log(odds)
 
​    
 

1+e 
−log(odds)
 
1
​    
 

这就是我们所熟知的逻辑回归,等式右边的表达式通常被称为 sigmoid 函数,而 log(odds) 又被称为 logit 函数,它们之间的转换关系如下图所示,其中 x 可看成特征向量。

从图中可以看出,如果把逻辑回归转化为 log(odds),有两点明显的变化:

log(odds) 是一条直线
log(odds) 可以将逻辑回归的值域从 (0, 1) 拓宽到 (-∞, +∞)
突然有点像线性回归了,但和线性回归的差异是,逻辑回归的样本只有 0 和 1 两种取值,转换为 log(odds) 正好是 -∞ 和 +∞,这样你使用 MSE 来拟合时,得到的 Loss 永远都是个无穷大,所以用线性回归的方法来拟合逻辑回归是不可行的。在逻辑回归中,我们使用 Maximu Likelihood 来作为模型的 Loss。

Maximum Likelihood
Maximum Likelihood(最大释然估计)也是很直观的一个概念,即我现在有一堆正样本和负样本,我用一条怎样的逻辑回归曲线去拟合这些样本,能使它们所得到概率的乘积最大。

举个例子,假设下图左边是一个关于体重和肥胖的实验数据,其中绿色点标记的是正常,而红色点为肥胖,现在要使用逻辑回归对这些样本建模,假设最佳模型如下图右边所示:

通过该模型的计算,假设绿色样本对应的肥胖的概率由左至右分别为 0.01、0.02、0.03 和 0.9,绿色是正常样本,需要计算他们不是肥胖的概率,所以要用 1 减去这些值,即: 0.99、0.98、0.97 和 0.1;同理,再分别计算红色样本是肥胖的概率为 0.1、0.97、0.98 和 0.99,因为该曲线已经是最优的了,所以这 8 个点所对应的概率的乘积——0.0089,即是所有可能的模型中,能得到的最大值。可见,Maximum Likelihood 真的就只是其字面意思了。

线性回归中,我们使用 MSE 来衡量线性模型的好坏,MSE 越小,说明拟合得越好;而在逻辑回归中,使用的正是 Maximum Likelihood,该指标越大,模型越好。

对于样本 x i x_ix 
i
​    
 ,当它为正样本时,对应的概率为 p ( x i ) p(x_i)p(x 
i
​    
 ),而当它为负样本时,对应的概率为 1 − p ( x i ) 1-p(x_i)1−p(x 
i
​    
 ),为方便计算,我们需要只用一个式子来表示这两种情况:
p i = y i ⋅ p ( x i ) + ( 1 − y i ) ⋅ ( 1 − p ( x i ) ) p_i = y_i\cdot p(x_i) + (1-y_i)\cdot (1-p(x_i))

i
​    
 =y 
i
​    
 ⋅p(x 
i
​    
 )+(1−y 
i
​    
 )⋅(1−p(x 
i
​    
 ))

这里 y 表示样本的取值,因为 y 只有两种取值,0 和 1,当 y 为正样本 1 时,带入上式得 p i = p ( x i ) p_i=p(x_i)p 
i
​    
 =p(x 
i
​    
 ),而当 y 为负样本 0 时,带入上式得 p i = 1 − p ( x i ) p_i=1-p(x_i)p 
i
​    
 =1−p(x 
i
​    
 ),于是每个样本的概率的表现形式得到了统一,这样总的 Likelihood 就很好表示了:
arg ⁡ max ⁡ L ( θ ) = ∏ i = 1 n p i = ∏ i = 1 n [ y i ⋅ p ( x i ) + ( 1 − y i ) ⋅ ( 1 − p ( x i ) ) ]
argmaxL(θ)=∏i=1npi=∏i=1n[yi⋅p(xi)+(1−yi)⋅(1−p(xi))]
arg⁡maxL(θ)=∏i=1npi=∏i=1n[yi⋅p(xi)+(1−yi)⋅(1−p(xi))]
argmaxL(θ)
​    
  

i=1

n
​    
 p 
i
​    
 

i=1

n
​    
 [y 
i
​    
 ⋅p(x 
i
​    
 )+(1−y 
i
​    
 )⋅(1−p(x 
i
​    
 ))]

上式中,n 表示有 n 条样本,下标 i 表示第 i 条样本,x 为特征向量,y 为观察到的目标值,θ \thetaθ 为特征向量的权重,也是模型的参数,L 即为所有样本的 Likelihood,也是逻辑回归中的 Loss 函数,我们的目标是调整 θ \thetaθ, 以使 L 最大。

通常我们会把连乘通过 log 转换为求和,并取负号,把求最大值转换为求最小值,如下:
arg ⁡ min ⁡ ( − log ⁡ ( L ( θ ) ) ) = − ∑ i = 1 n log ⁡ ( p i ) = − ∑ i = 1 n [ y i ⋅ log ⁡ ( p ( x i ) ) + ( 1 − y i ) ⋅ log ⁡ ( ( 1 − p ( x i ) ) ) ]
argmin(−log(L(θ)))=−∑i=1nlog(pi)=−∑i=1n[yi⋅log(p(xi))+(1−yi)⋅log((1−p(xi)))]
arg⁡min(−log⁡(L(θ)))=−∑i=1nlog⁡(pi)=−∑i=1n[yi⋅log⁡(p(xi))+(1−yi)⋅log⁡((1−p(xi)))]
argmin(−log(L(θ)))
​    
  
=− 
i=1

n
​    
 log(p 
i
​    
 )
=− 
i=1

n
​    
 [y 
i
​    
 ⋅log(p(x 
i
​    
 ))+(1−y 
i
​    
 )⋅log((1−p(x 
i
​    
 )))]

接下来就是对 Loss 求梯度了,然后根据梯度来修改参数,并不断迭代收敛的过程,为了减少大家阅读时的不适感,这里就不继续推导了, 不过没有推导过的同学,还是建议自己在草稿上演算一下,可加深自己的理解。

逻辑回归和贝叶斯分类
贝叶斯分类的核心依然来自于经典的贝叶斯公式:
p ( c ∣ x ) = p ( x ∣ c ) p ( c ) p ( x ∣ c ) p ( c ) + p ( x ∣ c ˉ ) p ( c ˉ ) p(c|x) = \frac{p(x|c)p(c)}{p(x|c)p(c)+p(x|\bar{c})p(\bar{c})}
p(c∣x)= 
p(x∣c)p(c)+p(x∣ 
c
ˉ
 )p( 
c
ˉ
 )
p(x∣c)p(c)

在分类问题中,我们要求的实际上是当样本 x 出现时,它属于分类 c 的概率,即上式的 p(c|x)。等式右边的 c ˉ \bar{c} 
c
ˉ
  表示为 c 之外的其他分类,p© 和 p ( c ˉ ) p(\bar{c})p( 
c
ˉ
 ) 可以理解为先验概率,一般情况下你可以把它们设置为均等的,如我们可以把二分类的先验概率都设为 0.5。

接着,p(x|c) 可表示为在 c 分类中观察到 x 样本出现的概率,同理,p ( x ∣ c ˉ ) p(x|\bar{c})p(x∣ 
c
ˉ
 ) 则为在 c ˉ \bar{c} 
c
ˉ
  分类中观察到 x 样本出现的概率。于是,p(c|x) 就是一个后验概率。

理解了贝叶斯分类后,我们把等式右边的分子分母同时除以 p ( x ∣ c ) p ( c ) p(x|c)p(c)p(x∣c)p(c),如下:
p ( c ∣ x ) = 1 1 + p ( x ∣ c ˉ ) p ( c ˉ ) p ( x ∣ c ) p ( c ) p(c|x) = \frac{1}{1+\frac{p(x|\bar{c})p(\bar{c})}{p(x|c)p(c)}}
p(c∣x)= 
1+ 
p(x∣c)p(c)
p(x∣ 
c
ˉ
 )p( 
c
ˉ
 )
​    
 
1

到此,这个式子是不是像极了 sigmoid 函数,我们设:
e − z = p ( x ∣ c ˉ ) p ( c ˉ ) p ( x ∣ c ) p ( c ) e^{-z} = \frac{p(x|\bar{c})p(\bar{c})}{p(x|c)p(c)}

−z
 = 
p(x∣c)p(c)
p(x∣ 
c
ˉ
 )p( 
c
ˉ
 )

再设先验概率相等,同时在等式两边取 log,便得到:
− z = log ⁡ ( p ( x ∣ c ˉ ) p ( x ∣ c ) ) -z = \log(\frac{p(x|\bar{c})}{p(x|c)})
−z=log( 
p(x∣c)
p(x∣ 
c
ˉ
 )
​    
 )

将负号移到右边:
z = log ⁡ ( p ( x ∣ c ) p ( x ∣ c ˉ ) ) = log ⁡ ( o d d s ) z=\log(\frac{p(x|c)}{p(x|\bar{c})}) = \log(odds)
z=log( 
p(x∣ 
c
ˉ
 )
p(x∣c)
​    
 )=log(odds)

最后将 z 带回原式:
p ( c ∣ x ) = 1 1 + e − log ⁡ ( o d d s ) p(c|x) = \frac{1}{1+e^{-\log(odds)}}
p(c∣x)= 
1+e 
−log(odds)
 
1

结论是,逻辑回归实际上就是贝叶斯分类,它们都是一个后验概率模型。

总结
本文我们主要通过 log(odds) 和贝叶斯分类这两个概念来学习了逻辑回归算法的原理,且了解了逻辑回归是采用 Maximum Likelihood 来作为其损失函数的,希望你和我一样,通过本文能够对逻辑回归有更深刻的理解。

参考:

Logistic Regression, Clearly Explained
Classification
Logistic Regression
————————————————
版权声明:本文为CSDN博主「程序员在深圳V」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43650429/article/details/103953237

深入理解逻辑回归算法(Logistic Regression)相关推荐

  1. logisticregression参数_通俗地说逻辑回归【Logistic regression】算法(二)sklearn逻辑回归实战...

    前情提要: 通俗地说逻辑回归[Logistic regression]算法(一) 逻辑回归模型原理介绍 上一篇主要介绍了逻辑回归中,相对理论化的知识,这次主要是对上篇做一点点补充,以及介绍sklear ...

  2. 机器学习算法与Python实践之逻辑回归(Logistic Regression)

    转载自:http://blog.csdn.net/zouxy09/article/details/20319673 机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书. ...

  3. 使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logistic Regression)的数据预处理步骤实战

    使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logistic Regression)的数据预处理步骤实战 目录

  4. Python机器学习算法 — 逻辑回归(Logistic Regression)

    逻辑回归--简介 逻辑回归(Logistic Regression)就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型 ...

  5. 基于Octave/Matlab的二元逻辑回归(logistic regression)算法

    基于Octave/Matlab的二元逻辑回归(logistic regression)算法 本博文基于吴恩达老师的机器学习网课,是对作业代码进行简化和补充完整后的实现. 逻辑回归算法的基本思想 sig ...

  6. 逻辑回归二分类算法python_多分类逻辑回归 (Multinomial Logistic Regression)

    前言 分类从结果的数量上可以简单的划分为: 二分类(Binary Classification) 多分类(Multinomial Classification). 其中二分类是最常见且使用最多的分类场 ...

  7. [机器学习] Coursera ML笔记 - 逻辑回归(Logistic Regression)

    引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等.主要学习资料来自Standford Andrew N ...

  8. 逻辑回归(Logistic Regression)

    一. 逻辑回归 在前面讲述的回归模型中,处理的因变量都是数值型区间变量,建立的模型描述是因变量的期望与自变量之间的线性关系.比如常见的线性回归模型: 而在采用回归模型分析实际问题中,所研究的变量往往不 ...

  9. 逻辑回归(logistic regression)原理详解

    机器学习解决的问题,大体上就是两种:数值预测和分类.前者一般采用的是回归模型,比如最常用的线性回归:后者的方法则五花八门,决策树,kNN,支持向量机,朴素贝叶斯等等模型都是用来解决分类问题的.其实,两 ...

  10. 逻辑回归(Logistic Regression, LR)简介

    逻辑回归(Logistic Regression, LR)简介 标签(空格分隔): 机器学习 **机器学习最通俗的解释就是让机器学会决策.**对于我们人来说,比如去菜市场里挑选芒果,从一堆芒果中拿出一 ...

最新文章

  1. pomelo php,Nginx 502 Bad Gateway 自动重启shell脚本
  2. ecshop百度编辑器远程下载无后缀的图片,并且加水印
  3. js 读取php页面内容,js读取html文件 js获取html页面显示内容
  4. 应用程序标准输入输出、Shell、程序界面的关系
  5. 算法设计方法之 贪婪算法
  6. Leetcode每日一题:127.word-ladder(单词接龙)
  7. 【转】使用cocos2d-console工具转换脚本为字节码
  8. android 下载服务器的txt文档
  9. 2037 data maker
  10. 在线免费OCR文字识别工具,强烈推荐,这是目前用过最良心的
  11. python闰月计算_Python实例讲解 -- 获取本地时间日期(日期计算)
  12. 深度解析Eureka的自我保护机制
  13. sap--TCODE 之 SE93 将事务代码分配给程序(转)
  14. 湖北2022农民丰收节 国稻种芯:麻城启动王忠林宣布活动
  15. java swing 总结_对Java 中Swing的小总结
  16. 解决电脑问题方案之一
  17. 我为什么没有成为华为元老,谈精准学习,避免低水平勤奋
  18. Docker启动MySql容器Exited (1) 7 seconds ago问题解决
  19. 研发人员绩效考核案例
  20. 多层感知器的基本特征

热门文章

  1. [CATARC_2017] 第一周
  2. 华为光猫上线流程、注册失败、常见语音故障处理
  3. Linux安全模块(LSM)
  4. 对称加密算法和非对称加密算法的区别
  5. 前端页面点击姓名查看详情
  6. 第三章 基于QT和DCMTK的Dicom 图像浏览器---单个Dicom图像读取类
  7. 24点递归实现(c语言)
  8. 全志V3s 荔枝派WiFi RTL8723BS 连接
  9. apache+php环境配置
  10. 微信公众号开发(个人订阅号)