LR算法(基础及核心概念)

LR算法(基础及核心概念)前言首先需要清楚的是 LR LogisticRegr 虽然是回归模型 但却是经典的分类方法 为什么分类不用 SVM 呢 我们对比一下 SVM 在二分类问题中 如果你问 SVM 它只会回答你该样本是正类还是负类 而你如果问 LR 它则会回答你该样本是正类的概率是多少 文章主要内容如下 LR 的理论基础 LR 的参数求解过程正则化

前言

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

  • 文章主要内容如下:
    • LR的理论基础
    • LR的参数求解过程
    • 正则化

LR的理论基础

Logistic

F(x)=P(Xx)=11+e(xμ)/γ

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



其中, μ 就是分布对应的均值, γ 是对应的形状参数。

Regression

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


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

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


    odds=p1p

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


    logit(p)=logp1p

logP(Y=1|x)1P(Y=1|x)=logP(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
    ,那么每一个观察到的样本 (xi,yi) 出现的概率是:


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


    显然, yi 为1时,保留前半部分; yi 为0时,保留后半部分。


  • 构建似然函数:


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

  • OK,对似然函数取对数,得到对数似然函数:
    LL(θ)=log(L(θ))=log(P(yi=1|xi)yi(1P(yi=1|xi))1yi)

    =ni=1yilogP(yi=1|xi)+(1yi)log(1P(yi=1|xi))

    =ni=1yilogP(yi=1|xi)1P(yi=1|xi)+ni=1log(1P(yi=1|xi))

    =ni=1yi(w.x)+ni=1logP(yi=0|xi)

    =ni=1yi(w.x)ni=1log(1+ew.x)

    =ni=1yi(θT.xi)ni=1log(1+eθT.xi)

  • LL(θ) θ 求偏导,得:
    LL(θ)θ=ni=1yixini=1eθT.xi1+eθT.xi.xi

    =ni=1(yiP(yi=1|xi))xi
    该式是无法解析求解,故下面会用到一个常见的优化算法–梯度下降(Gradient Descent).

梯度下降

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

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


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

Long Valley:

这里写图片描述


Saddle Point:

这里写图片描述


Beale’s Function:
这里写图片描述


θnew=θoldαLL(θ)θ=θoldαi=1n(yiP(yi=1|xi))xi

  • 其中,参数α叫学习率,这个参数设置很关键。如果设置的太大。缺点:那么很容易就在最优值附加徘徊;优点:能很快的从远离最优值的地方回到最优值附近。如果设置的太小。缺点:那么就跟蜗牛似的,迭代速度太慢了。所以通常的技巧是开始迭代时,学习率大,慢慢的接近最优值的时候,学习率变小就可以了。
  • 第二点是,梯度下降算法在每次迭代更新参数时都需要遍历整个数据集,计算复杂度太高。改进的方法是一次仅随机采用一个样本数据的回归误差来更新回归系数。这个方法叫随机梯度下降算法。

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

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

正则化

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

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

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

  • L1范数:也称叫“稀疏规则算子”(Lasso Regularization)。为什么能稀疏呢?关键原因在于它能实现特征的自动选择。一般来说,训练集中的某些特征和输出 yi 之间并没有多大关系。在训练时引入这些特征,当然能获得更小的训练误差,但其泛化能力比较差,即造成过拟合!L1范数的引入就是为了实现特征自动选择,它会将没有信息的特征对应的权重置为0
  • L2范数:在回归里面中又称岭回归”(Ridge Regression),也有的叫法为“权值衰减”(Weight Decay)。同样是为了解决过拟合问题,但与 L1 范数不同的是L2是使得特征对应的权重尽量的小,接近于0(但不会等于0)。而越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象。为什么呢?这里给出一个说法:参数越小,表示模型不会过分地学习训练集的某个特征,也即更不容易造成过拟合。

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





版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216877.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午10:52
下一篇 2026年3月18日 上午10:52


相关推荐

  • Ios frida_frida

    Ios frida_frida一、FridaFrida是一款基于Python+javascript的hook框架,通杀android\iOS\linux\win\osx各平台。Frida原理是手机端安装一个server程序把手机端的端口转到PC端写的python脚本进行通信,而Python脚本中采用javascript语言编写hook代码。①installfridaondeviceStartCydiaandaddFrida’srepositorybynavig

    2025年6月22日
    5
  • Linux如何配置DNS服务器

    Linux如何配置DNS服务器一 DNS 介绍 DNS 应用层协议 DomainNameSy 域名系统 作用 正向解析 根据主机名解析查询对应的 IP 反向解析 根据 IP 查询对应的主机名 DNS 服务器层级的概念 1 区域的概念 正向区域 一般就是二级域名 jd com baidu com taobao com 反向区

    2026年3月17日
    2
  • 太极 免ROOT使用Xposed模块

    太极 免ROOT使用Xposed模块太极免ROOT使用Xposed模块什么是太极?能干什么?我这里就不说了,大家可以去关注虚拟框架公众号去了解一下,我这里只是讲解怎么用。一,下载太极最新版太极下载畅玩微信模块下载其他模块都可以在虚拟框架公众号中下载二,添加应用打开太极可以看到太极内核已激活,说明可以正常使用。点击右下角按钮展开可以看到创建应用,模块管理,下载模块,…

    2022年6月4日
    608
  • Headless模式_java throwable

    Headless模式_java throwableHeadless模式是在缺少显示屏、键盘或者鼠标时的系统配置。在java.awt.toolkit和java.awt.graphicsenvironment类中有许多方法,除了对字体、图形和打印的操作外还可以调用显示器、键盘和鼠标的方法。但是有一些类中,比如Canvas和Panel,可以在headless模式下执行。系统属性配置为了启用headless模式,需要使用setProperty方法去设置相…

    2025年8月9日
    10
  • js实现input的赋值

    js实现input的赋值

    2021年11月3日
    46
  • api接口调用

    api接口调用api接口调用CURL是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。最爽的是,PHP也支持CURL库。使用PHP的CURL库可以简单和有效

    2022年7月3日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号