手动推导流程
- 假设有m样本:X=(x1,x2,x3,…xm)
- 样本点为: ((x1,y1),(x2,y2),(x3,y3),…(xm,ym))
- 假设w,θ,xi等所有向量都为列向量
确定分类决策函数
- 线性回归模型
f(x)=wTx+b - 令
θ=(w;b)xi=(xi;1) - 有
f(x)=θTx - 逻辑回归决策函数在线性回归模型上加一个sigmoid函数
hθ(x)=sigmoid(f(x))=11+e−f(x)=11+e−θTx - 即
p(y=1|x)=hθ(x)=11+e−θTx=eθTx1+eθTxp(y=0|x)=1−hθ(x)=e−θTx1+e−θTx=11+eθTx - 对数几率(log odds, 也称为logit)定义为: lnp1−p ,在LR中有:
lnhθ(x)1−hθ(x)=θTx - 分类超平面不确定,与最终的阈值有关,α的值与最终阈值相关
w⋆x+b⋆=α- 分类超平面由(w,b)和阈值唯一确定,(注意: SVM的分类超平面由(w,b)唯一确定)
- 这一点和SVM不同,SVM的分类超平面是确定的,详情参看ML——SVM-支持向量机
确定优化目标
- LR中使用极大似然法
L(θ)=p(Y|X;θ)=m∏i=1p(yi|xi;θ)=m∏i=1(p(yi=1|xi;θ))yi(p(yi=0|xi;θ))1−yi - 上面的式子不易求导优化,我们使用与上面的式子单调性和最优点等价的对数似然函数为
LL(θ)=logL(θ)=logm∏i=1(p(yi=1|xi;θ))yi(p(yi=0|xi;θ))1−yi=m∑i=1(yilog(p(yi=1|xi;θ))+(1−yi)log(p(yi=0|xi;θ)))=m∑i=1(yilogp(yi=1|xi;θ)p(yi=0|xi;θ)+log(p(yi=0|xi;θ))) - 由前面的推导有
logp(yi=1|xi;θ)p(yi=0|xi;θ)=logeθTx1+eθTx11+eθTx=logeθTx=θTx
log(p(yi=0|xi;θ))=log(11+eθTx)=−log(1+eθTx) - 故而有
LL(θ)=m∑i=1(yilogp(yi=1|xi;θ)p(yi=0|xi;θ)+log(p(yi=0|xi;θ)))=m∑i=1(yiθTx−log(1+eθTx))
损失函数
- 最大化似然函数等价于最小化似然函数的负数
- LR中使用极大似然法,所以对应的损失函数自然为对数似然损失函数
loss(θ)=−LL(θ)=m∑i=1(−yiθTx+log(1+eθTx))
梯度下降法优化
注意: 这里优化目标也可以用牛顿法
- 目标,求一个θ⋆满足似然函数最大化或者损失函数最小化
θ⋆=argmaxθLL(θ)=argminθ−LL(θ)=argminθloss(θ) - 对数似然函数对参数θ求导有
∂loss(θ)∂θ=m∑i=1(−yixi+xieθTx1+eθTx)=m∑i=1xi(−yi+eθTx1+eθTx)=m∑i=1xi(−yi+hθ(xi)) - LR模型的梯度下降参数迭代公式
θt+1=θt−αm∑i=1xi(−yi+hθt(xi))=θt+αm∑i=1xi(yi−hθt(xi))- 其中α为步长
- 线性回归和LR模型的梯度下降法参数迭代公式表达式看似相同,但是不同的模型对应的hθ函数并不相同
面试总结
参考:https://www.cnblogs.com/ModifyRong/p/7739955.html
- LR中使用极大似然法,所以对应的损失函数自然为对数似然损失函数(对数损失函数)
- 对数似然损失函数定义为:
Loss(θ)=−P(Y|X;θ) - <<统计学习方法>>P213中定义LR的损失函数为逻辑斯蒂损失函数,在LR模型和最大熵模型中,逻辑斯蒂损失函数本质上与对数似然损失函数等价,可推导得到
- 对数似然损失函数定义为:
- 一句话概括逻辑回归:
- 逻辑回归是假设数据服从伯努利分布,通过极大似然函数的方法,运用梯度下降法或者牛顿法来求解参数,来达到将数据二分类的目的
- 逻辑回归的假设: 数据服从伯努利分布, p(y=1|x)=1−p(y=0|x)
- 逻辑回归的损失函数: 对数似然损失函数(交叉熵损失函数), 也就是对数似然函数的负数
- 逻辑回归的求解方法: 梯度下降法或牛顿法
- 逻辑回归的目的: 将数据二分类
- 逻辑回归如何分类: 预测结果是连续的[0-1]的数,我们一般选择0.5作为阈值来分类,但是这个值可能是可以变化的,因为损失函数最小并不意味着0.5时分类精度最高
- 为什么要用极大似然法?等价于为什么要用对数似然损失函数作为损失函数?
- 损失函数一般有平方损失函数,对数损失函数,合页损失函数,绝对值损失函数等,极大似然函数取对数后等同于对数损失函数,在逻辑回归这个模型中,推导可以得到,对数损失函数训练求解参数的迭代函数只与xi,yi相关,与sigmoid函数的梯度等无关.这样的参数更新自始至终都比较稳定
- 为什么不选平方损失函数的呢?其一是因为如果你使用平方损失函数,你会发现梯度更新的速度和sigmod函数本身的梯度是很相关的,sigmod函数在它在定义域内的梯度都不大于0.25, 这样训练会非常的慢
- 逻辑回归中,如果某些特征高度相关,甚至某些特征完全相同,会造成什么影响?
- 损失函数收敛后,没有影响,因为特征的相关性并不影响分类器效果,重复特征会分化特征的权重(10个重复特征和单个特征训练结果差别在于前者每个特征的权重是后者的十分之一),本质上最终结果不变的
- 但是训练时由于特征重复,参数增多,模型复杂度增加,训练时长,内存等都会增加
- 为什么需要去掉高度相关的特征?
- 去掉高度相关的特征使得模型可解释性更好
- 提高训练时间,节约内存,减少参数数量
- 特征的提取本身也需要时间,实际工程项目中可以少提取一个特征往往能节约很多时间
- logistic与logit的区别?
- logit: 又名 log adds , 指的是”对数几率”, 定义为lnp1−p
- logistic: 又叫Sigmoid函数, 指的是”对数几率函数”, 本质上是一种”Sigmoid”函数, 定义为 f(x)=11+e−x
- 简单介绍LR模型的优缺点:
- 优点:
- 模型简单,可解释性好,(如果对数据特征进行了归一化处理的话)可以从特征的权重看到不同特征对最终结果的影响
- 模型效果往往不错(特征工程做得好的话)
- 训练速度快, 成熟的SGD优化方法(SGD可以分布式)等
- 内存占用小
- 输出结果可以作为概率值,然后可以对阈值根据实际进行划分,不一定是确定的0.5,只是一般选择0.5而已
- 缺点:
- 难以处理非线性数据,本质上是线性分类面
- 难以处理数据不平衡问题, 这里如果正例远远多于负例,那么全都预测为正例,整体损失函数也不会太大
- LR本身无法筛选特征,有时候会用GBDT和XGBoost来筛选特征,然后再用LR模型
- 优点:
- 扩展:逻辑回归可像SVM一样引入核函数处理非线性分类问题吗?
- 一般来说不可以
- [存疑]理论上通过对原始样本非线性映射,似乎也可以,如果将f(x)=θTx中的f(x)看做θ看做变量,然后类比SVM的核函数,定义一个关于xi的非线性映射
- 这里xi表示第i个样本, 用xji表示第i个样本的第j个维度
xji=ϕj(xji) - 基于上述非线性映射函数的定义,我们对每个样本都进行线性映射,每个维度用不同的映射函数(不同样本相同维度映射函数相同)
- 这里的非线性映射与SVM的核函数不同,SVM不使用核函数的话,也可以通过相同的非线性映射的方式实现非线性分类
- 使用核技巧后的LR模型将变得很慢,SVM与kernels是相配的,而LR与kernels会十分慢(来源SVM核技巧)
- 这里xi表示第i个样本, 用xji表示第i个样本的第j个维度