目录
用线性回归做分类
线性回归的输出是一个数值,而不是一个标签,显然不能直接解决二分类问题。那我如何改进我们的回归模型来预测标签呢?
一个最直观的办法就是设定一个阈值,比如0,如果我们预测的数值 y > 0 ,那么属于标签A,反之属于标签B,采用这种方法的模型又叫做感知机(Perceptron)。
另一种方法,我们不去直接预测标签,而是去预测标签为A概率,我们知道概率是一个[0,1]区间的连续数值,那我们的输出的数值就是标签为A的概率。一般的如果标签为A的概率大于0.5,我们就认为它是A类,否则就是B类。这就是逻辑回归模型 (Logistics Regression)。
sigmoid
明确预测目标是标签为A的概率。
我们知道,概率是属于[0,1]区间。但是线性模型值域是
[
−
∞
,
+
∞
]
[-\infty,+\infty ]
[−∞,+∞]。
h
θ
(
x
)
=
θ
T
x
h_\theta(x)=\theta^Tx
hθ(x)=θTx
我们需要找到一个模型的值域刚好在[0,1]区间,同时要足够好用。
于是,选择了我们的sigmoid函数。
g
(
Z
)
=
1
1
+
e
−
Z
g(Z)=\frac{1}{1+e^{-Z}}
g(Z)=1+e−Z1
导数性质:
g
(
Z
)
′
=
(
−
1
)
(
1
+
e
−
Z
)
−
2
e
−
Z
(
−
1
)
=
1
+
e
−
Z
−
1
(
1
+
e
−
Z
)
2
=
1
1
+
e
−
Z
−
1
(
1
+
e
−
Z
)
2
=
1
1
+
e
−
Z
(
1
−
1
1
+
e
−
Z
)
=
g
(
Z
)
(
1
−
g
(
Z
)
)
\begin{aligned} g(Z)'&=(-1)(1+e^{-Z})^{-2}e^{-Z}(-1)\\ &=\frac{1+e^{-Z}-1}{(1+e^{-Z})^{2}}\\ &=\frac{1}{1+e^{-Z}}-\frac{1}{(1+e^{-Z})^{2}}\\ &=\frac{1}{1+e^{-Z}}(1-\frac{1}{1+e^{-Z}})\\ &=g(Z)(1-g(Z)) \end{aligned}
g(Z)′=(−1)(1+e−Z)−2e−Z(−1)=(1+e−Z)21+e−Z−1=1+e−Z1−(1+e−Z)21=1+e−Z1(1−1+e−Z1)=g(Z)(1−g(Z))
模型假设
y
(
i
)
∈
{
1
,
0
}
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
y^{(i)} \in \{1,0\} \\ h_\theta(x)=g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}}
y(i)∈{1,0}hθ(x)=g(θTx)=1+e−θTx1
建模
p
(
y
(
i
)
=
1
∣
x
(
i
)
;
θ
)
=
h
θ
(
x
(
i
)
)
p
(
y
(
i
)
=
0
∣
x
(
i
)
;
θ
)
=
1
−
h
θ
(
x
(
i
)
)
}
⇒
p
(
y
(
i
)
∣
x
(
i
)
;
θ
)
=
h
θ
(
x
(
i
)
)
y
(
i
)
(
1
−
h
θ
(
x
(
i
)
)
)
1
−
y
(
i
)
\left.\begin{matrix} p(y^{(i)}=1|x^{(i)};\theta)=h_\theta(x^{(i)}) \\ p(y^{(i)}=0|x^{(i)};\theta)=1 - h_\theta(x^{(i)}) \end{matrix}\right\}\Rightarrow p(y^{(i)}|x^{(i)};\theta)=h_\theta(x^{(i)})^{y^{(i)}}(1 - h_\theta(x^{(i)}))^{1-y^{(i)}}
p(y(i)=1∣x(i);θ)=hθ(x(i))p(y(i)=0∣x(i);θ)=1−hθ(x(i))}⇒p(y(i)∣x(i);θ)=hθ(x(i))y(i)(1−hθ(x(i)))1−y(i)
log似然函数
l
(
θ
)
=
log
p
(
Y
∣
X
;
θ
)
=
log
∏
i
=
1
m
p
(
y
(
i
)
∣
x
(
i
)
;
θ
)
=
∑
i
=
1
m
log
p
(
y
(
i
)
∣
x
(
i
)
;
θ
)
=
∑
i
=
1
m
log
(
h
θ
(
x
(
i
)
)
y
(
i
)
(
1
−
h
θ
(
x
(
i
)
)
)
1
−
y
(
i
)
)
=
∑
i
=
1
m
[
y
(
i
)
log
(
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
\begin{aligned} l(\theta)&=\log p(Y|X;\theta)\\ &=\log\prod_{i=1}^{m}p(y^{(i)}|x^{(i)};\theta)\\ &=\sum_{i=1}^{m}\log p(y^{(i)}|x^{(i)};\theta)\\ &=\sum_{i=1}^{m}\log (h_\theta(x^{(i)})^{y^{(i)}}(1 - h_\theta(x^{(i)}))^{1-y^{(i)}})\\ &=\sum_{i=1}^{m}[y^{(i)}\log (h_\theta(x^{(i)})+(1-y^{(i)})\log(1 - h_\theta(x^{(i)}))] \end{aligned}
l(θ)=logp(Y∣X;θ)=logi=1∏mp(y(i)∣x(i);θ)=i=1∑mlogp(y(i)∣x(i);θ)=i=1∑mlog(hθ(x(i))y(i)(1−hθ(x(i)))1−y(i))=i=1∑m[y(i)log(hθ(x(i))+(1−y(i))log(1−hθ(x(i)))]
优化目标
θ
∗
=
arg
max
θ
l
(
θ
)
\theta^* = \arg\max_\theta l(\theta)
θ∗=argθmaxl(θ)
求解-梯度提升法
参数更新公式:
θ
j
=
θ
j
+
α
∗
∂
J
(
θ
)
∂
θ
j
\theta_j = \theta_j + \alpha * \frac{\partial J(\theta)}{\partial \theta_j}
θj=θj+α∗∂θj∂J(θ)
计算梯度:
∂
J
(
θ
)
∂
θ
j
=
∂
∂
θ
j
(
∑
i
=
1
m
[
y
(
i
)
log
(
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
)
=
∑
i
=
1
m
[
y
(
i
)
1
h
θ
(
x
(
i
)
)
−
(
1
−
y
(
i
)
)
1
1
−
h
θ
(
x
(
i
)
)
]
∂
∂
θ
j
h
θ
(
x
(
i
)
)
=
∑
i
=
1
m
[
y
(
i
)
1
h
θ
(
x
(
i
)
)
−
(
1
−
y
(
i
)
)
1
1
−
h
θ
(
x
(
i
)
)
]
h
θ
(
x
(
i
)
)
(
1
−
h
θ
(
x
(
i
)
)
)
∂
∂
θ
j
θ
x
(
i
)
=
∑
i
=
1
m
[
y
(
i
)
(
1
−
h
θ
(
x
(
i
)
)
)
−
(
1
−
y
(
i
)
)
h
θ
(
x
(
i
)
)
]
∂
∂
θ
j
θ
x
(
i
)
=
∑
i
=
1
m
[
y
(
i
)
−
h
θ
(
x
(
i
)
)
]
∂
∂
θ
j
∑
j
=
0
d
+
1
θ
j
∗
x
j
(
i
)
=
∑
i
=
1
m
[
y
(
i
)
−
h
θ
(
x
(
i
)
)
]
x
j
(
i
)
\begin{aligned} \frac{\partial J(\theta)}{\partial \theta_j}&=\frac{\partial }{\partial \theta_j}(\sum_{i=1}^{m}[y^{(i)}\log (h_\theta(x^{(i)})+(1-y^{(i)})\log(1 - h_\theta(x^{(i)}))]) \\ &=\sum_{i=1}^{m}[y^{(i)}\frac{1}{ h_\theta(x^{(i)})}-(1-y^{(i)})\frac{1}{1 - h_\theta(x^{(i)})}]\frac{\partial }{\partial \theta_j}h_\theta(x^{(i)}) \\ &=\sum_{i=1}^{m}[y^{(i)}\frac{1}{ h_\theta(x^{(i)})}-(1-y^{(i)})\frac{1}{1 - h_\theta(x^{(i)})}]h_\theta(x^{(i)})(1-h_\theta(x^{(i)}))\frac{\partial }{\partial \theta_j} \theta x^{(i)}\\ &=\sum_{i=1}^{m}[y^{(i)}(1 - h_\theta(x^{(i)}))-(1-y^{(i)})h_\theta(x^{(i)})]\frac{\partial }{\partial \theta_j} \theta x^{(i)}\\ &=\sum_{i=1}^{m}[y^{(i)}-h_\theta(x^{(i)})]\frac{\partial }{\partial \theta_j} \sum_{j=0}^{d+1}\theta_j*x_j^{(i)}\\ &=\sum_{i=1}^{m}[y^{(i)}-h_\theta(x^{(i)})]x_j^{(i)} \end{aligned}
∂θj∂J(θ)=∂θj∂(i=1∑m[y(i)log(hθ(x(i))+(1−y(i))log(1−hθ(x(i)))])=i=1∑m[y(i)hθ(x(i))1−(1−y(i))1−hθ(x(i))1]∂θj∂hθ(x(i))=i=1∑m[y(i)hθ(x(i))1−(1−y(i))1−hθ(x(i))1]hθ(x(i))(1−hθ(x(i)))∂θj∂θx(i)=i=1∑m[y(i)(1−hθ(x(i)))−(1−y(i))hθ(x(i))]∂θj∂θx(i)=i=1∑m[y(i)−hθ(x(i))]∂θj∂j=0∑d+1θj∗xj(i)=i=1∑m[y(i)−hθ(x(i))]xj(i)
最终参数更新公式:
θ
j
=
θ
j
+
α
∗
∑
i
=
1
m
[
y
(
i
)
−
h
θ
(
x
(
i
)
)
]
x
j
(
i
)
\theta_j = \theta_j + \alpha * \sum_{i=1}^{m}[y^{(i)}-h_\theta(x^{(i)})]x_j^{(i)}
θj=θj+α∗i=1∑m[y(i)−hθ(x(i))]xj(i)
注意:上述更新式与线性回归形式上一致,但模型假设不同。
优点
- 直接对分类概率建模,避免了分布假设偏差的问题
- 输出预测概率,可解释性强
- Sigmoid函数是任意阶可导的凸函数,易于优化
与其他模型的比较
与线性回归
一个角度
p
(
y
(
i
)
=
1
∣
x
(
i
)
;
θ
)
=
h
θ
(
x
(
i
)
)
p
(
y
(
i
)
=
0
∣
x
(
i
)
;
θ
)
=
1
−
h
θ
(
x
(
i
)
)
p(y^{(i)}=1|x^{(i)};\theta)=h_\theta(x^{(i)}) \\ p(y^{(i)}=0|x^{(i)};\theta)=1 - h_\theta(x^{(i)})
p(y(i)=1∣x(i);θ)=hθ(x(i))p(y(i)=0∣x(i);θ)=1−hθ(x(i))
ln
p
(
y
(
i
)
=
1
∣
x
(
i
)
;
θ
)
p
(
y
(
i
)
=
0
∣
x
(
i
)
;
θ
)
=
ln
h
θ
(
x
(
i
)
)
1
−
h
θ
(
x
(
i
)
)
=
ln
1
1
+
e
−
θ
T
x
1
−
1
1
+
e
−
θ
T
x
=
θ
T
x
\begin{aligned} \ln \frac{p(y^{(i)}=1|x^{(i)};\theta)}{p(y^{(i)}=0|x^{(i)};\theta)}&=\ln \frac{h_\theta(x^{(i)})}{1-h_\theta(x^{(i)})}\\ &=\ln \frac{\frac{1}{1+e^{-\theta^Tx}}}{1-\frac{1}{1+e^{-\theta^Tx}}}\\ &=\theta^Tx \end{aligned}
lnp(y(i)=0∣x(i);θ)p(y(i)=1∣x(i);θ)=ln1−hθ(x(i))hθ(x(i))=ln1−1+e−θTx11+e−θTx1=θTx
逻辑回归相当于是用线性回归预测的结果去逼近标签的对数几率(标签的对数几率的线性回归)。
区别与联系
区别
- 输出变量分布假设不同:线性回归假设输出变量服从正态分布,逻辑回归假设输出变量服从伯努利分布
- 目标函数不同:线性回归优化的目标函数是均方误差(最小二乘),而逻辑回归优化的是似然函数(交叉熵)
- 模型假设不同:线性归回要求自变量与因变量呈线性关系,而逻辑回归没有要求
- 解释性不同:线性回归分析的是因变量自身与自变量的关系,而逻辑回归研究的是因变量取值的概率与自变量的概率
- 学习任务不同:逻辑回归处理的是分类问题,线性回归处理的是回归问题,这也导致了两个模型的取值范围不同:0-1和实数域
联系
- 两个都是线性模型,线性回归是普通线性模型,逻辑回归是广义线性模型
- 表达形式上,逻辑回归是线性回归套上了一个Sigmoid函数
- 参数估计上,都可以用极大似然估计的方法估计参数(高斯分布导致了线性模型损失函数为均方差,伯努利分布导致逻辑回归损失函数为交叉熵)
与最大熵模型
逻辑回归本质上是最大熵模型的一个特例。
与SVM
1、LR和SVM有什么相同点
- 都是监督分类算法,判别模型;
- LR和SVM都可以处理分类问题,且一般都用于处理线性二分类问题(在改进的情况下可以处理多分类问题)
- 两个方法都可以增加不同的正则化项,如L1、L2等等。所以在很多实验中,两种算法的结果是很接近的。
2、LR和SVM有什么不同点
-
本质上是其loss function不同
区别在于逻辑回归采用的是Logistical Loss,SVM采用的是hinge loss.这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。
逻辑回归损失函数:
SVM损失函数:
LR方法基于概率理论,假设样本为0或者1的概率可以用sigmoid函数来表示,然后通过极大似然估计的方法估计出参数的值,或者从信息论的角度来看,其是让模型产生的分布P(Y|X)P(Y|X)尽可能接近训练数据的分布;支持向量机基于几何间隔最大化原理,认为存在最大几何间隔的分类面为最优分类面 。 -
SVM只考虑分类面上的点,而LR考虑所有点(远离的点对边界线的确定也起作用)
SVM中,在支持向量之外添加减少任何点都对结果没有影响,而LR则是每一个点都会影响决策。
Linear SVM不直接依赖于数据分布,分类平面不受一类点影响 ;LR则是受所有数据点的影响,所以受数据本身分布影响的,如果数据不同类别strongly unbalance,一般需要先对数据做balancing。 -
在解决非线性问题时,支持向量机采用核函数的机制,而LR通常不采用核函数的方法。
SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算量。 而LR则每个点都需要两两计算核函数,计算量太过庞大。 -
SVM依赖于数据的测度,而LR则不受影响
因为SVM是基于距离的,而LR是基于概率的,所以LR是不受数据不同维度测度不同的影响,而SVM依赖于不同维度测度的不同,如果差别较大需要做normalization 。当然如果LR要加上正则化时,也是需要normalization一下的 。 -
SVM自带结构风险最小化,LR则是经验风险最小化
SVM的损失函数就自带正则(损失函数中的 1 2 ∣ ∣ w ∣ ∣ 2 \frac{1}{2||w||^2} 2∣∣w∣∣21项),因此SVM是结构风险最小化,而LR必须另外在损失函数上添加正则项。 -
LR和SVM在实际应用的区别
根据经验,对于小规模数据集,SVM的效果要好于LR,但是大数据中,SVM的计算复杂度受到限制,而LR因为训练简单,可以在线训练,所以经常会被大量采用。
与朴素贝叶斯
两者的不同点
-
逻辑回归属于判别式模型,而朴素贝叶斯属于生成式模型。
具体来说,两者的目标虽然都是最大化后验概率,但是逻辑回归是直接对后验概率P(Y|X)进行建模,而朴素贝叶斯是对联合概率P(X,Y)进行建模。 -
朴素贝叶斯分类器要求“属性条件独立假设”,即对于已知类别的样本x,假设x的所有属性是相互独立的。这就导致了两点与逻辑回归的不同之处:
- 朴素贝叶斯的限制条件比逻辑回归更加严格,意味着逻辑回归的应用范围更广。
- 朴素贝叶斯可以不通过(而不是不能)梯度下降等优化方法进行参数优化,事实上,在利用极大似然法的进行参数估计的时候,由于其严格的条件限制,朴素贝叶斯分类器的相关参数就已经很明确了,或者说是有固定的形式了,它可以直接通过统计每个特征的逻辑发生比来当做权重。而逻辑回归求得的参数并没有明确的形式(因为他没有朴素贝叶斯那么严格的限制条件),可以通过梯度下降法等优化方法,得到特征之间的耦合信息,从而得到相应的权重(参数)。
-
逻辑回归是通过学习超平面来实现分类,而朴素贝叶斯通过考虑特征的概率来实现分类。
-
逻辑回归在有相关性feature上面学习得到的模型在测试数据的performance更好。也就是说,逻辑回归在训练时,不管特征之间有没有相关性,它都能找到最优的参数。而在朴素贝叶斯中,由于特征直接相互独立的严格设定,在有相关性的feature上面学习到的权重同时变大或变小,它们之间的权重不会相互影响。从这方面来说,如果能够在对参数较好地控制,在损失项方面处理的很好的话,逻辑回归相对朴素贝叶斯在应用时更不会限制在特征工程上面。(简言之,逻辑回归对特征工程的要求相对朴素贝叶斯更低)
-
朴素贝叶斯的好处是没有优化参数,通过训练数据可以直接得到一个概率表,这些有助于并行化。
-
在小数据上面朴素贝叶斯分类器可以取得更好的效果,随着数据的增多、特征维度的增大,逻辑回归的效果更好。这也是因为朴素贝叶斯是生成模型,在有prior的情况下模型能够把数据fit的更好,而逻辑回归属于判别模型,目标驱动化,不去建模联合概率,通过训练数据直接预测输出,因此在数据足够多的情况下能够得到更好一些的效果。
两者的相同点
- 两者都利用了极大似然法进行参数估计。虽然似然函数的目标不同。
- 逻辑回归和朴素贝叶斯分类器都是对特征的线性表达,虽然两者拟合的参数不同,前者是W和b后者是先验概率和似然。
- 逻辑回归和朴素贝叶斯建模的都是条件概率(后者通过贝叶斯公式得到) ,对所最终求得的不同类的结果有很好的解释性。而不像SVM,神经网络这样解释性不高。
模型细节
适合离散特征
- 模型稳定性和鲁棒性。离散后的特征能够去除噪声,对异常值不再敏感,可以加强模型的稳定性。
- 简化模型:特征离散化后就降低了样本中的个别信息对模型的影响,降低模型的过拟合的风险。
- 计算更快速:更少的变量会运算复杂的大大降低,加快计算速度。
- 易于解释性:离散特征方便我们对业务的解释。
为什么使用sigmoid函数?
- sigmoid函数的优势:概率解释,单调连续可导等
- 广义线性模型,指数族分布解释
指数族分布
p ( y ; η ) = b ( y ) exp { η T T ( y ) − a ( η ) } p(y;\eta)=b(y)\exp\{\eta^TT(y)-a(\eta)\} p(y;η)=b(y)exp{ηTT(y)−a(η)}
广义线性模型定义
y
∣
x
;
θ
∼
指
数
族
分
布
(
η
)
η
=
θ
T
x
h
θ
(
x
)
=
E
[
y
∣
x
;
θ
]
y|x;\theta \sim 指数族分布(\eta)\\ \eta = \theta^Tx\\ h_\theta(x)=E[y|x;\theta]
y∣x;θ∼指数族分布(η)η=θTxhθ(x)=E[y∣x;θ]
伯努利分布属于指数分布族
p
(
y
;
ϕ
)
=
ϕ
y
(
1
−
ϕ
)
1
−
y
=
exp
{
y
ln
ϕ
+
(
1
−
y
)
ln
(
1
−
ϕ
)
}
=
exp
{
ln
(
ϕ
1
−
ϕ
)
y
−
(
−
ln
(
1
−
ϕ
)
)
}
\begin{aligned} p(y;\phi)&=\phi^y(1-\phi)^{1-y}\\ &=\exp\{y\ln \phi +(1-y)\ln (1-\phi)\}\\ &=\exp\{\ln(\frac{\phi}{1-\phi})y-(-\ln(1-\phi))\} \end{aligned}
p(y;ϕ)=ϕy(1−ϕ)1−y=exp{ylnϕ+(1−y)ln(1−ϕ)}=exp{ln(1−ϕϕ)y−(−ln(1−ϕ))}
则有
b
(
y
)
=
1
T
(
y
)
=
y
a
(
η
)
=
−
ln
(
1
−
ϕ
)
η
=
ln
(
ϕ
1
−
ϕ
)
⇒
ϕ
=
1
1
+
e
−
η
=
1
1
+
e
−
θ
T
x
b(y)=1\\ T(y)=y\\ a(\eta)=-\ln(1-\phi)\\ \eta=\ln(\frac{\phi}{1-\phi})\\ \Rightarrow \phi=\frac{1}{1+e^{-\eta}}=\frac{1}{1+e^{-\theta^Tx}}
b(y)=1T(y)=ya(η)=−ln(1−ϕ)η=ln(1−ϕϕ)⇒ϕ=1+e−η1=1+e−θTx1
为何使用最大似然估计而不用均方误差?
可以从求最优解的角度来解释:
如果用最小二乘法,目标函数就是
∑
i
=
1
m
[
y
(
i
)
−
1
1
+
e
−
θ
T
x
]
2
\sum_{i=1}^{m}[y^{(i)}-\frac{1}{1+e^{-\theta^Tx}}]^2
i=1∑m[y(i)−1+e−θTx1]2
是非凸的,不容易求解,会得到局部最优。
如果用最大似然估计,目标函数就是对数似然函数:
∑
i
=
1
m
[
y
(
i
)
ln
1
1
+
e
−
θ
T
x
+
(
1
−
y
(
i
)
)
ln
(
1
−
1
1
+
e
−
θ
T
x
)
]
\sum_{i=1}^{m}[y^{(i)}\ln\frac{1}{1+e^{-\theta^Tx}}+(1-y^{(i)})\ln(1 - \frac{1}{1+e^{-\theta^Tx}})]
i=1∑m[y(i)ln1+e−θTx1+(1−y(i))ln(1−1+e−θTx1)]
是关于参数的高阶连续可导凸函数,可以方便通过一些凸优化算法求解,比如梯度下降法、牛顿法等。