1 Logistic Regression
Logistic Regression 逻辑回归,简称LR,适合于分类问题
1.1 LR模型
对于线性回归模型,需要拟合一个 Y = X θ + b Y=X\theta+b Y=Xθ+b的函数,回归问题适合于连续的问题,而对于分类问题,需要得到一系列离散的标签,以二分类为例,需要预测的类别为0,1.可以使用sigmoid函数将连续问题转化为离散问题:
g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+e−z1
sigmoid函数的图像为:
其中,
z
→
+
∞
z \to +\infty
z→+∞时,
g
(
z
)
→
1
g(z) \to 1
g(z)→1,
z
→
−
∞
z \to -\infty
z→−∞ 时,
g
(
z
)
→
0
g(z) \to 0
g(z)→0. Sigmoid函数的导数为:
g
′
(
z
)
=
g
(
z
)
(
1
−
g
(
z
)
)
g'(z)=g(z)(1-g(z))
g′(z)=g(z)(1−g(z))
令
z
=
θ
x
+
b
z=\theta x+b
z=θx+b,则有:
h
θ
(
x
)
=
1
1
+
e
−
θ
x
+
b
h_\theta(x) = \frac{1}{1+e^{-\theta x+b}}
hθ(x)=1+e−θx+b1
对于二分类问题,该函数的输出可以理解为分类为1的概率,如果把X记为
[
x
(
1
)
,
x
(
2
)
,
.
.
.
,
x
(
m
)
]
[x^{(1)},x^{(2)},...,x^{(m)}]
[x(1),x(2),...,x(m)],
θ
\theta
θ记为
[
θ
1
,
θ
2
,
.
.
.
,
θ
m
]
[\theta_1,\theta_2,...,\theta_m]
[θ1,θ2,...,θm]为要估计的模型参数,则LR的矩阵形式为:
h
θ
(
X
)
=
1
1
+
e
−
θ
X
T
+
b
h_\theta(X) = \frac{1}{1+e^{-\theta X^T+b}}
hθ(X)=1+e−θXT+b1
1.2 损失函数
由于 h θ ( x ) h_\theta (x) hθ(x)表示的是被分类为1的概率,而被分类为0的概率则为 1 − h θ ( x ) 1-h_\theta(x) 1−hθ(x),对于离散随机变量,我们可以写出分布列:
y | 1 | 0 |
---|---|---|
h θ ( x ) h_\theta (x) hθ(x) | 1 − h θ ( x ) 1-h_\theta(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
y
y的分布函数,函数中的\theta表示要估计的参数,熟悉概率论的都知道,要估计分布函数中的参数可以有矩估计和极大似然法两种,这里选极大似然法,也叫最大似然法,这里把他的概念写出来:
也就是说,假设所有的训练样本
y
1
,
y
2
,
.
.
,
y
m
y_1,y_2,..,y_m
y1,y2,..,ym所对应的随机变量
Y
1
,
Y
2
,
Y
m
Y_1,Y_2,Y_m
Y1,Y2,Ym是独立同分布的,其分布函数为
p
(
y
∣
x
,
θ
)
p(y|x,\theta)
p(y∣x,θ),独立同分布的随机变量的联合分布函数就是每个分布函数的乘积,把这个联合分布函数称为似然函数,表示为:
L
(
θ
)
=
∏
i
=
1
m
h
θ
(
x
(
i
)
)
y
^
(
i
)
(
1
−
h
θ
(
x
(
i
)
)
)
1
−
y
^
(
i
)
L(\theta) = \prod_{i=1}^{m}h_\theta(x^{(i)})^{\hat{y}^{(i)}}(1-h_\theta(x^{(i)}))^{1-\hat{y}^{(i)}}
L(θ)=i=1∏mhθ(x(i))y^(i)(1−hθ(x(i)))1−y^(i)
因为似然函数取对数后达到最大值时候的
θ
\theta
θ与本身达到最大值后的
θ
\theta
θ是相同的,即:
arg max
L
(
θ
)
=
arg max
log
[
L
(
θ
)
]
\argmax L(\theta) = \argmax \log [L(\theta)]
argmaxL(θ)=argmaxlog[L(θ)]
所以我们一般用对数似然函数,似然函数取反就是损失函数,而最大化似然函数就是最小化损失函数:
J
(
θ
)
=
−
ln
L
(
θ
)
=
−
∑
i
=
1
m
y
^
(
i
)
ln
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
ln
(
1
−
h
θ
(
x
(
i
)
)
)
J(\theta) = - \ln L(\theta)=-\sum_{i=1}^{m} \hat{y}^{(i)}\ln h_\theta(x^{(i)})+(1-y^{(i)}) \ln (1-h_\theta(x^{(i)}))
J(θ)=−lnL(θ)=−i=1∑my^(i)lnhθ(x(i))+(1−y(i))ln(1−hθ(x(i)))
那损失函数什么时候取最小值呢?当然就是其导数取0的时候啦。注意这里的
θ
\theta
θ表示m个待估计的参数
θ
1
,
θ
2
,
.
.
.
,
θ
m
\theta_1,\theta_2,...,\theta_m
θ1,θ2,...,θm,取极值时要求每个偏导都为0. 损失函数的矩阵表达方法为:
J
(
θ
)
=
−
Y
T
log
h
θ
(
X
)
−
(
E
−
Y
)
T
log
(
E
−
h
θ
(
X
)
)
J(\theta) = -Y^T\log h_\theta(X)-(E-Y)^T \log (E-h_\theta(X))
J(θ)=−YTloghθ(X)−(E−Y)Tlog(E−hθ(X))
其中
E
E
E为单位矩阵
1.3 优化方法
对于二分类的LR,可以使用梯度下降法,坐标轴下降法,牛顿法等。梯度下降法容易理解,就是参数按照梯度减小的方向更新(形式上的推导),
θ
=
θ
−
α
∂
J
(
θ
)
∂
θ
\theta = \theta - \alpha \frac{\partial J(\theta)}{\partial \theta}
θ=θ−α∂θ∂J(θ)
在LR中,我们在最开始给出了SIgmoid的导数,因此用梯度下降法更新参数可以表示为:
θ
=
θ
−
α
X
T
(
h
θ
(
X
)
−
Y
)
\theta = \theta -\alpha X^T(h_\theta(X)-Y)
θ=θ−αXT(hθ(X)−Y)
而牛顿法最初是用来求解函数零点的,而极值代表一阶导数的零点,因此可以用牛顿法。记
J
′
(
θ
)
J'(\theta)
J′(θ)为一阶偏导数,
J
′
′
(
θ
)
J''(\theta)
J′′(θ)为二阶偏导数,则有:
θ
=
θ
−
α
J
′
(
θ
)
J
′
′
(
θ
)
\theta = \theta - \alpha \frac{J'(\theta)}{J''(\theta)}
θ=θ−αJ′′(θ)J′(θ)
坐标轴下降法则是固定一个坐标,沿着另外一个坐标寻找最优点,适合于导数不连续的情况。
1.4 Regulization(正则化)
为什么要正则化,这是因为机器学习模型中,学习到的参数
θ
\theta
θ是直接与特征向量
X
X
X相乘的,如LR中有:
h
θ
(
x
)
=
1
1
+
e
−
θ
x
+
b
h_\theta(x) = \frac{1}{1+e^{-\theta x+b}}
hθ(x)=1+e−θx+b1
在
X
X
X不变的情况下,如果
θ
\theta
θ特别大,那乘积就会特别大,假如在测试的时候,某个测试样本跟训练样本的分布不太一样,那么经过参数
θ
\theta
θ放大后可能得到一个非常离谱的值。参数的取值过大会让模型异常敏感,也容易过拟合,那么如何避免这种情况呢?一种可行的方法就是,我们不希望学习到的参数
θ
=
θ
1
,
θ
2
,
.
.
.
,
θ
m
\theta={\theta_1,\theta_2,...,\theta_m}
θ=θ1,θ2,...,θm取值太大,那就让他们尽量接近于0,即:
min
∑
i
=
1
m
∣
∣
θ
i
∣
∣
\min \sum_{i=1}^{m} ||\theta_i||
mini=1∑m∣∣θi∣∣
矩阵表达就是
min
∣
∣
θ
∣
∣
1
\min ||\theta||_1
min∣∣θ∣∣1,我们称为L1正则项,同样的,也有L2正则项,
1
2
∣
∣
θ
∣
∣
2
2
=
1
2
∑
i
=
1
m
∣
∣
θ
i
∣
∣
2
\frac{1}{2}||\theta||_2^2=\frac{1}{2}\sum_{i=1}^{m} ||\theta_i||^2
21∣∣θ∣∣22=21i=1∑m∣∣θi∣∣2
因为正则项也是关于
θ
\theta
θ的函数,也是我们要优化的目标之一(目标是让它最小),这样就可以合并到损失函数中:
J
(
θ
)
=
−
Y
T
log
h
θ
(
X
)
−
(
E
−
Y
)
T
log
(
E
−
h
θ
(
X
)
)
+
λ
1
∣
∣
θ
∣
∣
1
J(\theta) = -Y^T\log h_\theta(X)-(E-Y)^T \log (E-h_\theta(X))+\lambda_1 ||\theta||_1
J(θ)=−YTloghθ(X)−(E−Y)Tlog(E−hθ(X))+λ1∣∣θ∣∣1
λ
1
\lambda_1
λ1是正则项的权重。加入正则项后,学习到的参数就不会太大,模型也就没那么敏感。当然,如果正则项的权重过大,那所有的参数
θ
\theta
θ会很小,模型会异常不敏感,基本所有的输入都会得到一个差不多的输出,所有这个权重也要仔细考虑。
此外,由于
b
b
b是直接加到优化函数后的,相当于对函数做平移,我们并不需要正则化这个参数。
1.5多元逻辑回归
多元逻辑回归是二元情况的推广,每个类的概率用Softmax函数计算。假设要分K类,每个要学习的参数为
(
θ
1
,
b
1
)
,
(
θ
2
,
b
2
)
.
.
.
,
(
θ
k
,
b
k
)
(\theta_1,b_1),(\theta_2,b_2)...,(\theta_k,b_k)
(θ1,b1),(θ2,b2)...,(θk,bk) 记
z
1
=
θ
1
x
+
b
1
z
2
=
θ
2
x
+
b
2
.
.
.
z
k
=
θ
k
x
+
b
k
z_1 = \theta_1x+b_1 \\ z_2 = \theta_2x+b_2 \\ ...\\ z_k = \theta_kx+b_k
z1=θ1x+b1z2=θ2x+b2...zk=θkx+bk
则x属于每个类的概率可以计算为:
y
1
=
e
z
1
∑
i
=
1
k
e
z
k
y
2
=
e
z
2
∑
i
=
1
k
e
z
k
.
.
.
y
k
=
e
z
k
∑
i
=
1
k
e
z
k
y_1 = \frac{e^{z_1}}{\sum_{i=1}^{k}e^{z_k}} \\ y_2 = \frac{e^{z_2}}{\sum_{i=1}^{k}e^{z_k}} \\ ... \\ y_k = \frac{e^{z_k}}{\sum_{i=1}^{k}e^{z_k}} \\
y1=∑i=1kezkez1y2=∑i=1kezkez2...yk=∑i=1kezkezk
如下图:
softmax其实就相当于把输入放大后再做归一化。
在多个类计算损失函数时,用到的是多个类的entropy,这时要用到One-hot矩阵,也就是:
y
^
1
=
(
1
0
.
.
.
0
)
y
^
2
=
(
0
1
.
.
.
0
)
y
^
k
=
(
0
0
.
.
.
1
)
\hat{y}_1=\begin{pmatrix} 1 \\ 0 \\ ... \\ 0 \end{pmatrix} \hat{y}_2=\begin{pmatrix} 0 \\ 1 \\ ... \\ 0 \end{pmatrix} \hat{y}_k=\begin{pmatrix} 0 \\ 0 \\ ... \\ 1 \end{pmatrix}
y^1=⎝⎜⎜⎛10...0⎠⎟⎟⎞y^2=⎝⎜⎜⎛01...0⎠⎟⎟⎞y^k=⎝⎜⎜⎛00...1⎠⎟⎟⎞
具体计算的时候,使用:
min
−
∑
i
=
1
k
y
^
i
ln
y
i
\min -\sum_{i=1}^{k} \hat{y}_i \ln y_i
min−i=1∑ky^ilnyi
1.6 总结
自己的实验数据集中有23万条数据,从结果看,LR的准确率算很高的,最关键的是训练速度很快。