前言
逻辑回归是一个分类算法(二元/多分类),并不是回归算法。Y是连续的才是回归模型。这里打算把公式推一遍。
算法思想
假设数据服从伯努利分布,在训练数据集中基于对数似然函数,利用梯度下降,找出最佳拟合曲线(最佳分类线 θ T X \theta^TX θTX),通过sigmoid输出的概率值将现有样本进行分类。
二元逻辑回归模型
对线性回归的结果再做一次函数转换,可变为分类模型,在逻辑回归中我们一般取sigmoid函数。
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac{1}{1+e^{-z}}
g(z)=1+e−z1,其中
z
>
0
z>0
z>0,则
g
(
z
)
>
0.5
g(z)>0.5
g(z)>0.5,预测值
y
=
1
y=1
y=1;
z
<
0
z<0
z<0,则
g
(
z
)
<
0.5
g(z)<0.5
g(z)<0.5,预测值
y
=
0
y=0
y=0;
z
=
0
z=0
z=0,无法确定分类。
令g(z)中的z为:z=xθ,这样就得到了二元逻辑回归模型的一般形式:
h
θ
(
x
)
=
1
1
+
e
−
x
θ
h_{\theta}(x)=\frac{1}{1+e^{-x\theta}}
hθ(x)=1+e−xθ1
矩阵模式:
h
θ
(
X
)
=
1
1
+
e
−
X
θ
h_{\theta}(X)=\frac{1}{1+e^{-X\theta}}
hθ(X)=1+e−Xθ1
逻辑回归不是连续的,用最大似然法来推导出我们的损失函数。
P
(
y
=
1
∣
x
,
θ
)
=
h
θ
(
x
)
P(y=1|x,\theta)=h_\theta(x)
P(y=1∣x,θ)=hθ(x)
P
(
y
=
0
∣
x
,
θ
)
=
1
−
h
θ
(
x
)
P(y=0|x,\theta)=1-h_\theta(x)
P(y=0∣x,θ)=1−hθ(x)
合并
P
(
y
∣
x
,
θ
)
=
h
θ
(
x
)
y
(
1
−
h
θ
(
x
)
)
1
−
y
P(y|x,\theta)=h_\theta(x)^y(1-h_\theta(x))^{1-y}
P(y∣x,θ)=hθ(x)y(1−hθ(x))1−y
得到了y的概率分布函数表达式,我们就可以用似然函数最大化来求解我们需要的模型系数θ。
对数似然函数取反即为我们的损失函数J(θ)。
m为样本个数
二元逻辑回归梯度推导
损失函数用矩阵法表达为:
J
(
θ
)
=
−
Y
T
l
o
g
h
θ
(
X
)
−
(
I
−
Y
)
T
l
o
g
(
I
−
h
θ
(
X
)
)
J(\theta)=-Y^Tlogh_\theta(X)-(I-Y)^Tlog(I-h_\theta(X))
J(θ)=−YTloghθ(X)−(I−Y)Tlog(I−hθ(X))
用链式法则求导:
∂
l
o
g
h
∂
h
=
1
h
\frac{\partial logh}{\partial h}=\frac{1}{h}
∂h∂logh=h1
∂ h θ ( x ) ∂ − x θ = h θ ( x ) ( 1 − h θ ( x ) ) \frac{\partial h_{\theta}(x)}{\partial -x\theta}=h_{\theta}(x)(1-h_{\theta}(x)) ∂−xθ∂hθ(x)=hθ(x)(1−hθ(x))
∂
−
x
θ
∂
θ
=
−
x
\frac{\partial -x\theta}{\partial \theta}=-x
∂θ∂−xθ=−x
可得,损失函数求导为:
∂
J
(
θ
)
∂
θ
=
X
T
[
1
h
θ
(
X
)
⊙
h
θ
⊙
(
I
−
h
θ
(
X
)
)
⊙
(
−
Y
)
]
+
X
T
[
1
I
−
h
θ
(
X
)
⊙
h
θ
⊙
(
I
−
h
θ
(
X
)
)
⊙
(
i
−
Y
)
]
\frac{\partial J(\theta)}{\partial \theta}=X^T[\frac{1}{h_{\theta}(X)}\odot h_{\theta}\odot(I-h_{\theta}(X))\odot(-Y)]+X^T[\frac{1}{I-h_{\theta}(X)}\odot h_{\theta}\odot(I-h_{\theta}(X))\odot(i-Y)]
∂θ∂J(θ)=XT[hθ(X)1⊙hθ⊙(I−hθ(X))⊙(−Y)]+XT[I−hθ(X)1⊙hθ⊙(I−hθ(X))⊙(i−Y)]
∂
J
(
θ
)
∂
θ
=
X
T
(
h
θ
(
X
)
−
Y
)
\frac{\partial J(\theta)}{\partial \theta}=X^T(h_{\theta}(X)-Y)
∂θ∂J(θ)=XT(hθ(X)−Y)
多元逻辑回归模型
这里只介绍多元逻辑回归的softmax回归的一种特例推导:
我们假设是K元分类模型,即样本输出y的取值为1,2,。。。,K。
K元逻辑回归的概率分布如下:
损失函数(交叉熵):
逻辑回归&朴素贝叶斯
联系:
- Logistic regression和Naive bayes都是对特征的线性表达。不过并不是所有的朴素贝叶斯分类器都是线性分类器,只有某些具有特定属性的朴素贝叶斯分类器才是线性分类器,如连续特征的朴素贝叶斯分类器中方差不相同。
- Logistic regression和Naive bayes建模的都是条件概率 ,对所最终求得的不同类的结果有很好的解释性。而不像SVM,神经网络这样解释性不高。
区别
- Naive Bayes是一个生成模型,在计算P(y|x)之前,先要从训练数据中计算P(x|y)和P(y)的概率,从而利用贝叶斯公式计算P(y|x),实际上优化的是联合likelihood 。Logistic Regression是一个判别模型,它通过在训练数据集上最大化判别函数P(y|x)学习得到,不需要知道P(x|y)和P(y),优化的后验likelihood 。
- Naive Bayes是建立在条件独立假设基础之上的,设特征X含有n个特征属性,那么在给定Y的情况下,是条件独立的。Logistic Regression的限制则要宽松很多,如果数据满足条件独立假设,Logistic Regression能够取得非常好的效果;当数据不满足条件独立假设时,Logistic Regression仍然能够通过调整参数让模型最大化的符合数据的分布,从而训练得到在现有数据集下的一个最优模型。
- 当数据集比较小的时候,应该选用Naive Bayes,为了能够取得很好的效果,数据的需求量为O(log n)。当数据集比较大的时候,应该选用Logistic Regression,为了能够取得很好的效果,数据的需求量为O(n)。Naive Bayes运用了比较严格的条件独立假设,为了计算P(y|x),我们可以利用统计的方法统计数据集中P(x|y)和P(y)出现的次数,从而求得P(x|y)和P(y),因而其所需的数据量要小一些,为O(log n)。Logistic Regression在计算时,是在整个参数空间进行线性搜索的,需要的数据集就更大,为O(n)。数据量小的时候使用LR无法得到充足的训练因而效果不如朴素贝叶斯,当数据量大的时候LR可以得到充分的训练因而会比相对更为简单的NB性能更优。这也是因为Naive bayes是生成模型,在有prior的情况下模型能够把数据fit的更好,而Logistic regression属于判别模型,目标驱动化,不去建模联合概率,通过训练数据直接预测输出,因此在数据足够多的情况下能够得到更好一些的效果。
Logistic regression在有相关性feature上面学习得到的模型在测试数据的performance更好。也就是说,logistic regression在训练时,不管特征之间有没有相关性,它都能找到最优的参数。而在Naive bayes中,由于我们给定特征直接相互独立的严格设定,在有相关性的feature上面学习到的权重同时变大或变小,它们之间的权重不会相互影响。从这方面来说,如果能够在对参数较好地控制,在损失项方面处理的很好的话,Logistic regression相对Naive bayes在应用时更不会限制在特征工程(feature engineering)上面。Naive bayes的好处是我没有优化参数这一步,通过训练数据我直接得到一个counting table,这些有助于并行化。不过现在LR也已经发展出了较多的并行化技术。
逻辑回归优缺点
优点:
1.简单高效,计算量小
2.以概率形式输出,也因此可做ranking model
3.可解释性强,可控度高(因每个特征的theta权重都是可知的,即可知哪些特征对结果影响最大)
4.添加(个性化)特征很简单
5.训练快,特征工程后效果更好
6.方便添加组合特征
缺点
1.本身无法筛选特征,可用GBDT筛选特征(后面详讲)
2.处理非线性数据,需进行转换(特征离散化,特征组合)
3.对样本分布敏感,即很难处理数据不平衡问题
4.准确度并不是很高,因为形式简单(非常类似线性模型),很难去拟合数据的真实分别
应用
垃圾邮件分类
天气预测、疾病判断和广告投放
CTR预估
电商购物搭配推荐
面试问题收集
-
线性回归和LR的区别:
(1)线性回归要求变量服从正态分布;LR无要求
(2)线性回归针对连续性变量;LR针对类别类变量
(3)线性回归输出的是因变量和自变量的关系,主要做回归分析;LR输出是概率值,可做分类/回归
(4)线性回归要求因变量和自变量呈线性关系;LR无此要求 -
为什么不能用线性回归而用LR做分类?
因为线性回归对噪声敏感,鲁棒性不够,不能找到一个很好的阈值进行划分。由此,引出用LR,通过概率来进行分类,将线性回归映射为一个概率值,从而引出了sigmoid函数。 -
为什么要用sigmoid函数?
(1) 输出为[0,1],可看作概率值,从而可根据这个概率值和伯努利分布进行分类(>0.5为正,反之为负);
(2) sigmoid求导方便:f’(x) = f(x)(1-f(x)),方便进行梯度下降求最优参数 -
为什么不用均方误差函数来做loss?
将Sigmoid函数代入均方差函数后是个非凸函数,即存在很多局部最优解,但不一定是全局最优解; -
为什么要用似然估计做loss?
sigmoid对数似然函数是关于(w,b)的凸函数,方便使用梯度下降进行凸优化找到最小loss。 -
逻辑回归的loss function?
对数(互熵)损失函数(凸函数),当y=1,log(h(θ)); 当y=0,log(1-h(θ)). -
多项式组合特征对哪个模型中效果提升最大?
LR(非线性特组合),常结合GBDT进行特征组合 -
样本量太大怎么办?
(1)离散后用one-hot编码处理为0,1值;
(2)如果用连续值,做scaling(规约);
(3)spark Mlib
(4)采样,分层抽样(按照日期,用户…) -
样本不平衡如何处理?
(1) 下采样(样本量充足+detele),上采样(少+copy);
(2) 修改损失函数,把负样本前面权重加大(如果负样本量少),比如分类y[-1.1]改为[-50.1],使得负样本权重增大; -
LR如何处理连续值变量?
离散化 -
LR特征处理-离散化的好处?
(1)稀疏化,0,1向量内积相乘运算速度快;
(2)给线性模型带来一定的非线性,提升模型表达能力;
(3)模型更稳定,收敛度高,鲁棒性强;
(4)一定程度上降低过拟合;
(5)离散化后的特征对于异常数据有很强的鲁棒性;
(6)离散化后可以进行特征交叉,进一步引入非线性,提升表达能力;
(7)离散特征的增加和减少都很容易,易于模型的快速迭代 -
LR在训练过程中,如果有很多特征高度相关或者一个特征重复了100遍,会造成怎样的影响?
(1) 如果在损失函数最终收敛的情况下,其实就算有很多特征高度相关也不会影响分类器的效果。
(2) 但是对特征本身来说的话,假设只有一个特征,在不考虑采样的情况下,你现在将它重复100遍。训练以后完以后,数据还是这么多,但是这个特征本身重复了100遍,实质上将原来的特征分成了100份,每一个特征都是原来特征权重值的百分之一。
(3) 如果在随机采样的情况下,其实训练收敛完以后,还是可以认为这100个特征和原来那一个特征扮演的效果一样,只是可能中间很多特征的值正负相消了。 -
为什么还是会在训练过程中将最相关的特征去掉?
提高可解释性;提升训练速度 -
那LR如何处理线性相关特征/LR如何做特征选择?
嵌入型特征选择(L1正则) -
LR处理缺失值?
LR不能处理缺失值,应提前对缺失值做相应处理(均值,0/1,众数…) -
为什么将极大似然取对数?
(1) 统计学上,利用极大似然来估计sigmoid参数;
(2) 为求解方便,防止多个P相乘造成的浮点数下溢,再取对数,从而得到对数损失函数 -
sigmoid为什么可以做出概率?
sigmoid输入[-无穷,+无穷]输出在[0,1]之间。 -
如何判定该分类曲线好坏?
通过寻找最小损失函数(互熵损失函数)找到最佳判定分界 -
LR如何解决多分类问题?
softmax -
LR如何解决非线性分类问题?
可利用GBDT进行特征组合x1x2,同时加入正则化项防止过拟合
参考链接:
https://blog.csdn.net/UniqueenCT/article/details/88912678