逻辑回归LR模型简介「建议收藏」

逻辑回归LR模型简介「建议收藏」4.LR与线性回归的区别1.都是广义的线性回归,但LR可用于分类,在feature到结果的映射中加入了sigmoid(),实现了非线性。2.损失函数:线性回归–>平方损失函数;LR–>似然函数3.预测范围:线性回归–>整个实数域(敏感度一致);LR–>[0,1]…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1. 定义

LR是线性二分类模型,也是广义的线性回归模型,可以计算某个样本特征下事件发生的概率。

假设数据服从伯努力分布,通过极大化似然函数的方法,运用梯度下降求解参数,来达到将数据二分类的目的。

1.1 基本假设

(1) 假设数据服从伯努力分布

P(正)=h_{\theta }(x)        P(负)=1-h_{\theta }(x)

(2)假设样本为正的概率是 P=\frac{1}{1+e^{-\theta^{T}x}}=h_{\theta }(x)

所以LR的最终形式为:

h_{\theta }(x;\theta )=\frac{1}{1+e^{-\theta ^{T}x}}

P(y|x)=f(z)^{y}(1-f(z))^{1-y}

1.2 损失函数

是它的极大似然函数(假设训练样本独立同分布)

L_{\theta }(x)=\prod_{i=1}^{m}h_{\theta }(x_{i};\theta )^{y_{i}}*(1-h_{\theta }(x_{i};\theta ))^{1-y_{i}}=\prod_{i=1}^{n}P(y_{i}|x_{i};w)

利用极大似然估计根据给定的训练集估计出参数w。

1.3 LR的目的

将数据二分类,提高准确率。

1.4 LR如何分类

划定一个阈值,y值>这个阈值的是一类,小于的是另一类。

小知识:什么是几率?

事件发生与不发生的概率比值  odds=\frac{p}{1-p}

ln\frac{y}{1-y}=ln\frac{P(Y=1|x)}{1-P(Y=1|x)}=ln\frac{1}{e^{-\theta ^{T}x}}=\theta ^{T}x=f(x)

2. LR 损失函数推导

令事件发生概率

P(Y=1|x)=h_{\theta }(x_{i})          P(Y=0|x)=1-h_{\theta }(x_{i})

似然函数

  L(w)=\prod_{i=1}^{n}(h_{\theta }(x_{i}))^{y_{i}}*(1-h_{\theta }(x_{i}))^{1-y_{i}}

对数似然函数(损失函数) 

lnL(w)=\frac{1}{n}\sum_{i=1}^{n}[y_{i}lnh_{\theta }(x_{i})+(1-y_{i})ln(1-h_{\theta }(x_{i}))]

取反,令其最小

J(\theta )=-lnL(\theta )=-\frac{1}{n}\sum_{i=1}^{n}[y_{i}lnh_{\theta }(x_{i})+(1-y_{i})ln(1-h_{\theta }(x_{i}))]

3. LR 优缺点

3.1 优点

1. 形式简单,模型可解释性好。从feature的权重可以看到不同特征对最后结果的影响。

2. 模型效果不错。在工程上作为baseline是可以接受的,如果特征工程做的好(组合特征),效果不会太差。

3. 训练速度快。分类时,计算量仅和特征数目相关

4. 资源占用小。尤其是内存,只需存储各个维度的特征值。

5. 方便输出结果调整。输出的是每个样本的概率分数,可以很容易的对这些概率分数cutoff,即划分阈值。

6. 预测结果是介于0-1之间的概率,可处理连续型或类别型自变量。

3.2 缺点

1. 容易欠拟合,acc并不是很高。形式非常简单,很难去拟合数据的真实分布。

2. 难以发现组合特征,需要依赖人工特征工程,导致表达能力受限。也可以用gbdt来筛选特征,再加上LR。

3. 很难处理数据不均衡问题

4. LR与线性回归的区别

1. 都是广义的线性回归,但LR可用于分类,在feature到结果的映射中加入了sigmoid(),实现了非线性。

2. 损失函数:

    线性回归   –>  平方损失函数; 

     LR  –>  似然函数

3. 预测范围:

    线性回归   –>  整个实数域(敏感度一致);

    LR  –>  [0,1]

5. LR与SVM的联系与区别

5.1 共同点

1. 都是有监督的分类算法,且一般处理二分类问题;

2. 都是判别模型;

3. 都可以增加不同的正则化项(L1,L2 等)

4. 如果不考虑核函数,LR和SVM都是线性分类算法(分类决策面都是线性的)。

5. Linear SVM与LR的性能都会受到outlier的影响,但LR比较敏感。

5.2 不同点

1. 损失函数不同

    LR: 对数似然函数

J(\theta )=-\frac{1}{m}[\sum_{i=1}^{m} y_{i}logh_{\theta }(x_{i})+(1-y_{i})log(1-h_{\theta }(x_{i}))]

    SVM: 合页损失函数

L(w,b,\alpha )=\frac{1}{2}\left \| w \right \|^{2}-\sum_{i=1}^{n}\alpha _{i}(y_{i}(wx_{i}+b)-1))

其中\frac{1}{2}\left \| w \right \|^{2}为最大间隔距离。

2. 分类原理不同

LR基于概率理论,通过极大似然估计的方法估计出参数的值;而SVM则基于几何间隔max原理,认为存在max几何间隔的分类面为最优分类面,从最大间隔出发,转化为求对变量w和b的凸二次规划问题。

3. LR可以产生prob,而SVM不能。

4. 在解决非线形问题时,SVM采用核函数机制;LR通常采用特征构造,组合交叉特征引入非线性,而不是核函数。

5. LR容易欠拟合,准确度不高,(依赖特征构造,组合feature);SVM不太容易过拟合(松弛因子+损失函数形式)。

6. Linear SVM 依赖数据表达的距离测度,(会使度量较大的feature屏蔽较小的feature),需要对数据做归一化normalization;LR则不受其影响,但若正则化则需归一化。

7. 对小规模数据集,SVM表现较好,但在大数据中,SVM的计算复杂度受到限制,而LR因为训练简单,可以在线训练,经常被采用。

8. SVM更多的属于非参数模型,而LR则是参数模型,本质不同。

9. SVM学习时只考虑support vectors(在sv外添加样本是没有影响的),所以SVM不直接依赖于数据分布(对异常值不敏感),而LR则受所有数据点的影响(对异常值敏感),如果数据类别不均衡,需要先做balancing。

10. SVM的目标函数自带正则项\frac{1}{2}\left \| w \right \|^{2}),这也是SVM是结构风险最小算法的原因;而LR需要另外在损失函数上添加正则项。

6. 常见问题

6.1 为什么要删除共线特征?

1. 提高模型的可解释性;

2. 提高模型的训练速度。

6.2 特征权重的绝对值可以用来衡量特征重要度吗?

不一定

1. 特征可能没有归一化,系数受到量级的影响。(如1m=1cm*100)

2. 特征间可能存在共线,导致特征系数不稳定,可解释性差。

6.3 LR为什么要特征离散化?

1. 模型表达能力增强。原来的一个feature变成了N个,加大了模型的拟合能力。

2. 离散后可以进行特征交叉,引入非线性

3. 稀疏向量内积运算速度快,结果容易存储。

4. 离散后数据鲁棒性强,模型更稳定,不会因数据发生一点小的变动而表现出完全不同的性质。

6.4 相关特征与重复特征的影响

LR在训练过程中,如果有很多feature高度相关(成绩与G点),或一个feature重复了100遍,会有什么影响?

LR模型中特征的共线性不会影响模型的最优解,但会使系数不稳定,可解释性变差。

不考虑采样的情况下:

        如果某个feature重复了100次,相当于把原来唯一的feature分成了100份,每一个feature都是原来特征权重值的\frac{1}{100}。(可以认为这100个特征效果和原来feature效果相同)。

        对于高度共线的两个feature,如x1、x2分别表示米和厘米,

则1.5米=1*x1+50*x2=2*x1-50×2

易知:虽然表达能力没变,但x2的系数却发生了反转。导致较弱的一个自变量回归符号不符合预期,符号被扭转。

在随机采样的情况下:

        在训练收敛完之后,可以认为这100个特征和原来那一个特征扮演的效果一样,只是可能中间很多特征的值正负相消了。

6.5 LR的损失函数为什么要使用极大似然函数?

        因为目标是要让每一个样本预测都要得到最大概率(要让预测为正的概率最大,也要让预测为负的概率最大),将所有样本预测后的概率进行相乘都最大,这就能到似然函数了。

1. 常见的损失函数有:平方损失、对数损失、HingeLosso-1损失、绝对值损失函数等,其中将极大似然函数取对数以后等同于对数损失函数,在LR模型下,对数损失函数的训练求解速度比较快。因为 \theta _{j}=\theta _{j}-(y^{i}-h_{\theta }(x^{i};\theta ))*x_{j}^{i} 这个式子的更新速度只与x_{j}^{i},y^{i}相关,而与sigmoid函数本身的梯度无关,这样更新的速度自始至终都比较稳定。

2. 为什么不选平方损失函数?

(1)平方损失函数梯度更新的速度与sigmoid函数本身的梯度是很相关的;

(2)sigmoid函数梯度不大于0.25,训练会很慢。

6.6 LR的求解方法

该极大似然函数无法直接求解,一般通过梯度下降法不断逼近最优解。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Hadoop安装记录

    Hadoop安装记录

    2021年8月19日
    52
  • 纯css3手机页面图标样式代码

    全部图标:http://hovertree.com/texiao/css/19/先看效果:或者点这里:http://hovertree.com/texiao/css/19/hoverkico.htm简

    2021年12月21日
    48
  • python range在for循环里的用法_PyThon range()函数中for循环用法「建议收藏」

    python range在for循环里的用法_PyThon range()函数中for循环用法「建议收藏」最初range和xrange都生成可以用for循环迭代的数字,然而在python2和3里实现方式并不完全一致,下面着重讲讲python3的range()函数for循环用法。1、函数语法range(start,stop,[step])2、参数说明start:可选参数,计数从start开始。默认是从0开始。例如range(5)等价于range(0,5)stop:必选参数,计数到st…

    2022年8月12日
    2
  • java cas原理 CAP技术_fpga和java哪个好

    java cas原理 CAP技术_fpga和java哪个好1:CAS概念及原理CAS:CompareandSwap,翻译成比较并交换。 java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁。 CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。有啥用处?    对于常用

    2022年10月16日
    1
  • javascript定义数组,将数组中数组内容求和_数组求和JAVA

    javascript定义数组,将数组中数组内容求和_数组求和JAVA1.应用场景主要用于数组求和 2.学习/操作 TBD 3.问题/补充 TBD 4.参考 https://blog.csdn.net/weixin_40687883/article/details/85248195 https://www.jb51.net/article/154559.htm 后续补充……

    2022年10月2日
    0
  • php递归算法经典实例_递归算法的步骤

    php递归算法经典实例_递归算法的步骤递归算法对于任何一个编程人员来说,应该都不陌生。因为递归这个概念,无论是在PHP语言还是Java等其他编程语言中,都是大多数算法的灵魂。对于PHP新手来说,递归算法的实现原理可能不容易理解。但是只要你了解掌握了这个算法原理,就可以灵活运用递归算法实现编程中的多种功能比如实现无限分类等。递归也是入门者最需要掌握的一个基础算法技巧。下面郑州网站建设公司燚轩科技就通过具体代码示例为大家介绍PHP递归算法…

    2022年8月11日
    3

发表回复

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

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