逻辑回归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的求解方法

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • c语言和python实用性_C语言和Python语言,那个更好?

    c语言和python实用性_C语言和Python语言,那个更好?(3)灵活性Python语言的最大优点在于它的灵活性,这在测试领域非常重要,因为测试所面临的业务和需求经常在变化,有时它们甚至无法满足并自行决定,而在这时,你可以使用Python丰富的第三方库轻松找到解决方案。(4)扩张Python语言除了测试行业外,如果需要,你还可以通过Python轻松访问Web开发,数据分析,自动化操作以及人工智能等领域。Python是一种动态语言,这就是为什么它易于学习,但…

    2022年10月27日
  • C# Lambda表达式 两个list取交集 做筛选

    C# Lambda表达式 两个list取交集 做筛选publicIList<Markers>getEngineerByCenterPoint(floatlatitude,floatlongitude){MapAddressmapAddress=newMapAddress(latitude,longitude);List<Markers>markers…

  • html 中 超链接的写法,网页超链接样式的CSS写法「建议收藏」

    html 中 超链接的写法,网页超链接样式的CSS写法「建议收藏」上一篇文章讲了母栏目后面两行子栏目的DIV布局,这篇文章讲导航做完之后我想在鼠标移到每个不同区域的超链接在颜色上给予变化。上图所示上上一篇文章的大概样式,颜色就不一一举例了,我现在现在是给了“男士”“女士”“养生”三个母栏目不同的颜色,为了好看一点,我想鼠标移动到“男士”后面的子栏目上面的颜色和“男士”的字体颜色一样,移到“女士”其后面的子栏目的超链接与“女士”的超链接颜色一样,“养生”同样的。先…

  • SD卡、TF卡、MMC卡以及eMMC芯片的介绍「建议收藏」

    SD卡、TF卡、MMC卡以及eMMC芯片的介绍「建议收藏」一、SD卡   1、简介       SD卡为SecureDigitalMemoryCard,即安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备。它在MMC的基础上发展而来,增加了两个主要特色:SD卡强调数据的安全,可以设定所储存的使用权限,防止数据被他人复制;另外一个特色就是传输速度比2.11版的MMC卡快。   2、外观及引脚定义   3、特性

  • waitforsingleobject的作用_效率理论

    waitforsingleobject的作用_效率理论MicrosoftWindows平台中两种最常用的锁定方法为WaitForSingleObject和EnterCriticalSection。WaitForSingleObject是一个过载MicrosoftAPI,可用于检查和修改许多不同对象(如事件、作业、互斥体、进程、信号、线程或计时器)的状态。WaitForSingleObject的一个不足之处是它会始终获取内核的锁

  • kali修改更新源(无法安全的用该源更新)

    因为kali是国外的,所以一些软件你要下载的话得从国外的网站下载,就会很慢,国内一些公司或者学校提供了国内的下载地址,所以我们需要更换更新源一,命令:vim/etc/apt/sources.list二、增加或替换掉sources.list文件里面的更新源地址:#阿里云debhttp://mirrors.aliyun.com/kalikali-rollingmain…

发表回复

您的电子邮箱地址不会被公开。

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