前言

首先需要清楚的是,LR(Logistic Regression)虽然是回归模型,但却是经典的分类方法。 为什么分类不用SVM呢?我们对比一下SVM,在二分类问题中,如果你问SVM,它只会回答你该样本是正类还是负类;而你如果问LR,它则会回答你该样本是正类的概率是多少~

  • 文章主要内容如下:

    • LR的理论基础

    • LR的参数求解过程

    • 正则化

LR的理论基础

Logistic

如指数分布、高斯分布等分布一样,logistic是一种变量的分布,它也有自己的概率分布函数和概率密度函数,其中概率分布函数如下:

F(x)=P(X≤x)=11+e−(x−μ)/γ

F(x) = P(X \leq x) = \frac{1}{1+e^{-(x-\mu)/\gamma}}

对概率分布函数求导,记得到对应的概率密度函数:

f(x)=e−(x−μ)/γγ(1+e−(x−μ)/γ)2

f(x) = \frac{e^{-(x- \mu)/ \gamma}}{\gamma(1+e^{-(x-\mu)/\gamma})^2}
其中, μ\mu就是分布对应的均值, γ\gamma是对应的形状参数。

对应示例图如下:

Regression

为什么我们说LR(Logistic Regression)是个分类模型而不是回归模型呢?对于二项LR模型,设因变量的Y为0或者1,得到如下条件概率分布:

P(Y=1|X)=ewx1+ewx

P(Y=1|X) = \frac{e^{wx}}{1+e^{wx}}

P(Y=0|X)=11+ewx

P(Y=0|X) = \frac{1}{1+e^{wx}}

  • 一个事件的几率(odds),定义为该事件发生与不发生的概率比值,若事件发生概率为p:

    odds=p1−p

    odds = \frac{p}{1-p}

  • 那么该事件的对数几率(log odds或者logit)如下:

    logit(p)=logp1−p

    logit(p)=log\frac{p}{1−p}

那么,对于上述二项LR逻,Y=1的对数几率就是:

logP(Y=1|x)1−P(Y=1|x)=logP(Y=1|x)P(Y=0|x)=w.x

log \frac{P(Y=1|x)}{1−P(Y=1|x)}=log \frac{P(Y=1|x)}{P(Y=0|x)}=w.x

也就是说,输出Y=1的对数几率是由输入x的线性函数表示的模型,这就是逻辑回归模型。易知,当 w.x的值越大,P(Y=1|x) 越接近1;w.x越小(f负无穷大),P(Y=1|x) 越接近0。

其实,LR就是一个线性分类的模型。与线性回归不同的是:LR将线性方程输出的很大范围的数压缩到了[0,1]区间上;更优雅地说:LR就是一个被logistic方程归一化后的线性回归

LR的参数求解过程

极大似然估计

接下来便是参数估计过程,统计学中,常根据最大化似然函数的值来估计总体参数。其实,在机器学习领域,我们听到的更多是损失函数的概念,常通过构建损失函数,然后最小化损失函数求得目标参数。在这里,最大化对数似然函数与最小化对数似然损失函数其实是等价的,下面我们可以看到。


  • 假设我们有n个独立的训练样本{(x1,y1),(x2,y2),(x3,y3),...,(xn,yn)},y=0,1\{(x_1,y_1),(x_2,y_2),(x_3,y_3),...,(x_n,y_n)\},y={0,1},那么每一个观察到的样本(xi,yi)(x_i,y_i)出现的概率是:

    P(yi,xi)=P(yi=1|xi)yi(1−P(yi=1|xi))1−yi

    P(y_i,x_i) = P(y_i=1 | x_i)^{y_i}(1-P(y_i=1 | x_i))^{1-y_i}
    显然,yiy_i为1时,保留前半部分;yiy_i为0时,保留后半部分。

  • 构建似然函数:

    L(θ)=∏P(yi=1|xi)yi(1−P(yi=1|xi))1−yi

    L(\theta) = \prod P(y_i=1|x_i)^{y_i}(1-P(y_i=1|x_i))^{1-y_i}

  • OK,对似然函数取对数,得到对数似然函数:
    LL(θ)=log(L(θ))=log(∏P(yi=1|xi)yi(1−P(yi=1|xi))1−yi)LL(\theta) = log(L(\theta)) = log(\prod P(y_i=1|x_i)^{y_i}(1-P(y_i=1|x_i))^{1-y_i})

    =∑ni=1yilogP(yi=1|xi)+(1−yi)log(1−P(yi=1|xi))= \sum_{i=1}^{n}y_i log P(y_i=1|x_i) + (1-y_i)log(1-P(y_i=1|x_i))

    =∑ni=1yilogP(yi=1|xi)1−P(yi=1|xi)+∑ni=1log(1−P(yi=1|xi))= \sum_{i=1}^{n}y_i log \frac{P(y_i=1|x_i)}{1-P(y_i=1|x_i)} + \sum_{i=1}^{n}log(1-P(y_i=1|x_i))

    =∑ni=1yi(w.x)+∑ni=1logP(yi=0|xi)= \sum_{i=1}^{n}y_i(w.x) + \sum_{i=1}^{n}logP(y_i=0|x_i)

    =∑ni=1yi(w.x)−∑ni=1log(1+ew.x)= \sum_{i=1}^{n}y_i(w.x) - \sum_{i=1}^{n}log(1+e^{w.x})

    =∑ni=1yi(θT.xi)−∑ni=1log(1+eθT.xi)= \sum_{i=1}^{n}y_i(\theta^T.x_i) - \sum_{i=1}^{n}log(1+e^{\theta^T.x_i})

  • 用 LL(θ)LL(\theta) 对 θ\theta 求偏导,得:
    ∂LL(θ)∂θ=∑ni=1yixi−∑ni=1eθT.xi1+eθT.xi.xi\frac{\partial LL(\theta)}{\partial \theta} = \sum_{i=1}^{n}y_ix_i - \sum_{i=1}^{n} \frac{e^{\theta^T.x_i}}{1+e^{\theta^T.x_i}}.x_i

    =∑ni=1(yi−P(yi=1|xi))xi= \sum_{i=1}^{n}(y_i - P(y_i=1|x_i))x_i
    该式是无法解析求解,故下面会用到一个常见的优化算法–梯度下降(Gradient Descent).

梯度下降

Gradient Descent 又叫 Steepest Descent,是利用函数一阶的梯度信息找到函数局部最优解的一种方法,机器学习中最简单最常用的一种优化方法。

它的思想很简单:要找最小值,我只需要每一步都往下走(也就是每一步都可以让代价函数更小一点),然后不断地迭代,最终达到最小值的地方。


这里,附上一个网站,可以直观地看出各种优化算法地迭代路径,附上几张效果图如下:

Long Valley:


Saddle Point:


Beale’s Function:


但同时我们也希望能更快地到达最小值,这时我们便需要每一步都是坡度下降最快的地方,而这个坡度下降最快的方向,就是梯度的负方向了,所以参数迭代更新公式如下:

θnew=θold−α∂LL(θ)∂θ=θold−α∑i=1n(yi−P(yi=1|xi))xi

\theta^{new} = \theta^{old}-\alpha\frac{\partial LL(\theta)}{\partial \theta} = \theta^{old} - \alpha\sum_{i=1}^{n}(y_i - P(y_i=1|x_i))x_i

  • 其中,参数α叫学习率,这个参数设置很关键。如果设置的太大。缺点:那么很容易就在最优值附加徘徊;优点:能很快的从远离最优值的地方回到最优值附近。如果设置的太小。缺点:那么就跟蜗牛似的,迭代速度太慢了。所以通常的技巧是开始迭代时,学习率大,慢慢的接近最优值的时候,学习率变小就可以了。

  • 第二点是,梯度下降算法在每次迭代更新参数时都需要遍历整个数据集,计算复杂度太高。改进的方法是一次仅随机采用一个样本数据的回归误差来更新回归系数。这个方法叫随机梯度下降算法。

综合以上两点,给出改进的随机梯度下降算法的伪代码:

-------------------------------------------------
1.初始化回归系数
2.重复下面步骤直到收敛{对随机遍历的数据集中的每个样本随着迭代的逐渐进行,减小$\alpha$的值计算该样本的梯度使用$\alpha$ x 梯度来更新回归系数}
3.返回回归系数值
-------------------------------------------------

正则化

当模型参数很多,而我们可用的数据非常少时,极易出现过拟合的问题。在机器学习领域,通常可以对损失函数引入正则项,其目的是使得参数空间受到一定的限制。

正则化是奥卡姆剃刀(Occam’s Razor)原理的一个体现:在所有可能选择(能很好地解释已知数据)的模型中,更倾向于选择尽量简单的模型。

正则项(范数)的概念已经在博文中说过一次了,这里不再赘述。只八股一下两个正则项的特点吧:

  • L1范数:也称叫“稀疏规则算子”(Lasso Regularization)。为什么能稀疏呢?关键原因在于它能实现特征的自动选择。一般来说,训练集中的某些特征和输出 yiy_i 之间并没有多大关系。在训练时引入这些特征,当然能获得更小的训练误差,但其泛化能力比较差,即造成过拟合!L1范数的引入就是为了实现特征自动选择,它会将没有信息的特征对应的权重置为0

  • L2范数:在回归里面中又称岭回归”(Ridge Regression),也有的叫法为“权值衰减”(Weight Decay)。同样是为了解决过拟合问题,但与 L1 范数不同的是L2是使得特征对应的权重尽量的小,接近于0(但不会等于0)。而越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象。为什么呢?这里给出一个说法:参数越小,表示模型不会过分地学习训练集的某个特征,也即更不容易造成过拟合。

附上一张图片,在二维特征空间中,分别加L1和L2范数的情况:

两者的区别可以从图中看出来,L1正则化(左图)更容易与突出的角相切,可以想象在高纬特征空间中,会有许多向外突出的角;L1倾向于使某些特征对应的参数变为0,因此能产生稀疏解。而 L2 使 w 接近0

LR算法(基础及核心概念)相关推荐

  1. 机器学习算法 09-02 TensorFlow核心概念 TensorFlow基础代码、TensorFlow线性回归解析解和BGD求法

    目录 1 核心概念 2 代码流程 3 基础代码: 3.1 tf的版本 定义常量 理解tensor 了解session 3. 2   指定设备.  Variable 初始化 .  with块创建sess ...

  2. 【算法设计zxd】第一章 算法基础 1.基本概念+最大公约数

    目录 一.基本概念: 例1-1:求最大公约数 问题分析: 计算模型: 1) 穷举法 2) 欧几里德算法(辗转相除法) 算法设计与描述: 算法分析-效率: 1) 穷举法: 2) 欧几里德算法分析-渐近法 ...

  3. kafka基础之核心概念

    一 Broker(代理) 一台kafka服务器就可以称之为broker.一个集群由多个broker组成,一个broker可以有多个topic 二 Topic(主题) 每一条发送到kafka集群的消息都 ...

  4. 信息系统项目管理师核心考点(六十四)信息安全基础知识重要概念

    科科过为您带来软考信息系统项目管理师核心重点考点(六十四)信息安全基础知识重要概念,内含思维导图+真题 [信息系统项目管理师核心考点]信息安全基础知识重要概念 1.加密技术 ①对称加密[加密与解密的秘 ...

  5. 图计算思维与实践 (二)核心概念与算法

    前言 在前文<图计算思维与实践 (一)概览>中,我们介绍了以知识图谱.网络分析为主的图计算的应用,阐述了图思维的方式.本文我们将进入第二部分:图相关的核心概念与算法,这些是进行图探索的基础 ...

  6. Go modules基础精进,六大核心概念全解析(下)

    Go 语言做开发时,路径是如何定义的?Go Mudules又为此带来了哪些改变?本文将会全面介绍Go Modules六大核心概念,包括了设计理念与兼容性原则等,掌握这些技术点对于管理和维护Go 模块有 ...

  7. Go modules基础精进,六大核心概念全解析(上)

    Go 语言做开发时,路径是如何定义的?Go Mudules又为此带来了哪些改变?本文将会全面介绍Go Modules六大核心概念,包括了设计理念与兼容性原则等,掌握这些技术点对于管理和维护Go 模块有 ...

  8. 2021-03-12 Python基础核心概念 变量和简单数据类型

    Python基础核心概念 1 变量和简单数据类型 变量命名格式:变量名 = "赋值" 1.1 变量使用规范 使用变量时,需要遵守一些规则.违反这些规则将引发错误. ~变量名只能包含 ...

  9. RabbitMQ核心概念及基础API应用

    RabbitMQ核心概念及基础API应用 1 主流中间件介绍 衡量消息中间件的指标:服务性能,数据存储,集群架构. 1.ActiveMQ:Apache,支持JMS规范最完整的. 2.RocketMQ ...

  10. 15分钟掌握Elasticsearch 8大核心概念与基础用法

    Elastic已经形成了一个较为庞大的生态,这个生态的核心就是Elasticsearch.初学者的重点就是如何快速地了解并使用Elasticsearch,本文总结了Elasticsearch的8大核心 ...

最新文章

  1. php自定义控件,小程序自定义组件的实现方法(代码)
  2. JoinGroup的过程
  3. 前端学习(3344):数组方法的总结和应用
  4. python怎么控制速度_如何控制python的ThreadPoolExecutor的吞吐量速度?
  5. 基于JAVA+SpringMVC+Mybatis+MYSQL的药店门店管理系统
  6. mysql经典四表查询_mysql经典问题四表查询(教师,学生,成绩,课程表)
  7. 最少硬币找零系列问题(01背包,完全背包,多重背包动态规划)
  8. ActiveMQ的用途
  9. Learn OpenGL(四)——片段着色器(Fragment Shader)
  10. 二维几何变换---其他二维变换
  11. Java语言开发的开源商城系统——Javashop简介
  12. IPO笔记之:关于自然人股东投资移民变更身份对IPO事宜之影响
  13. 通用评估神经网络鲁棒性方法—CLEVER
  14. hdu 1165 Eddy's research II(数学:等差 等比公式)
  15. 关于bootstrap-table冻结列生成多个冻结表头和表格主体的问题
  16. 5年内的暴风骤雨:12诱因统领软件行业大革命【转载】
  17. [转]ColdFusion简介
  18. kubernetes搭建dashboard-v1.10.1
  19. 扫雷与算法:如何随机化的布雷(一)
  20. 致远oa mysql5.5安装_致远互联自助服务网站/致远服务

热门文章

  1. vm虚拟机显卡是不是比服务器主板上的要好,自VM11起,虚拟显卡的性能是增强还是削弱?...
  2. Unity 清理注册表和临时文件
  3. 设计窗freqz函数matlab,freqz函数
  4. natapp反向代理
  5. QTTabBar 1.5.4(Beta)版本
  6. 关于NLPIR在MAC上的使用
  7. 【我的电赛日记(二)】ADF4351锁相环模块
  8. c语言运行全屏,怎么用代码控制C源程序运行时窗口是全屏的?
  9. 云计算机根据部署,华为云计算FusionCompute环境部署实验之使用批量部署工具安装...
  10. 南京大学计算机学院杨老师,南京大学计算机系名师风采_跨考网