Logistic回归的目标函数
∙
\bullet
∙ Logistic回归的损失函数采用Logistic损失/交叉熵损失
L
(
y
,
μ
(
x
)
)
=
−
y
l
o
g
μ
(
x
)
−
(
1
−
y
)
l
o
g
(
1
−
μ
(
x
)
)
L(y, \mu(x)) = -ylog\mu(x) - (1-y)log(1-\mu(x))
L(y,μ(x))=−ylogμ(x)−(1−y)log(1−μ(x))
∙
\bullet
∙ 其中y为真值,
μ
(
x
)
=
σ
(
w
T
x
)
\mu(x) = \sigma(\mathbf w^T \mathbf x)
μ(x)=σ(wTx)为预测值为1的概率。
∙
\bullet
∙ 同其他机器学习模型一样,Logistic回归的目标函数也包括两项:训练集上的损失和 + 正则项
J
(
w
;
λ
)
=
∑
i
=
1
N
L
(
y
i
,
μ
(
x
i
;
w
)
)
+
λ
R
(
w
)
J(\mathbf w;\lambda) = \sum_{i=1}^{N}L(y_{i}, \mu(\mathbf x_{i};\mathbf w)) + \lambda R(\mathbf w)
J(w;λ)=i=1∑NL(yi,μ(xi;w))+λR(w)
∙
\bullet
∙ 类似回归任务,正则项R(w)可以是L1正则、L2正则、L1正则+L2正则,在线性回归模型中,分别对应岭回归(Ridge)、Lasso、弹性网络(ElasticNet)。
注意:损失函数
μ
(
x
)
\mu(x)
μ(x)是概率,不是最终分类,也不是线性模型计算出来的大于可以大于1的那个数。使用L1正则,包括L1+L2正则时,当
λ
\lambda
λ大到一定程度时,都可得到稀疏解,但仍然不可使用基于梯度的优化算法,也不可使用带二阶海森矩阵的优化算法,而要使用坐标轴下降。
目标函数的最优解
∙
\bullet
∙ 给定正则参数
λ
\lambda
λ的情况下,目标函数最优解:KaTeX parse error: Unexpected end of input in a macro argument, expected '}' at position 5: \hat\̲m̲a̲t̲h̲b̲f̲ ̲w = argmin_{\ma…
∙
\bullet
∙ 最优解的必要条件为一阶导数为0:
∂
J
(
w
;
λ
)
∂
w
=
0
\frac{\partial J(\mathbf w; \lambda)}{\partial\mathbf w} = 0
∂w∂J(w;λ)=0
∙
\bullet
∙ 同线性回归模型不同,Logistic回归模型的参数无法用解析求解法求得最优解,可采用迭代求法求解:
1)一阶近似:梯度相关:梯度下降、随机梯度下降(SGD)、随机平均梯度下降(SAG)、随机平均梯度改进版(SAGA)、共轭梯度、座标轴下降。没有列出小批量梯度下降(MBGD)啊?平均梯度下降也是第一次听说。
2)二阶近似:牛顿法、拟牛顿法(BFGS、LBFGS)
梯度
∙
\bullet
∙ 训练集上损失函数和部分:
J
1
(
w
)
=
∑
i
=
1
N
−
y
i
l
o
g
μ
(
x
i
;
w
)
−
(
1
−
y
i
)
l
o
g
(
1
−
μ
(
x
i
;
w
)
)
J_{1}(\mathbf w) = \sum_{i=1}^{N}-y_{i}log\mu(\mathbf x_{i};\mathbf w) - (1-y_{i})log(1-\mu(\mathbf x_{i};\mathbf w))
J1(w)=i=1∑N−yilogμ(xi;w)−(1−yi)log(1−μ(xi;w))
∙
\bullet
∙ 记
μ
i
=
μ
(
x
i
;
w
)
=
σ
(
w
T
x
)
\mu_{i} = \mu(\mathbf x_{i};\mathbf w) = \sigma(\mathbf w^T\mathbf x)
μi=μ(xi;w)=σ(wTx)
∙
\bullet
∙ 先给出结论,梯度:
g
(
w
)
=
∇
J
1
(
w
)
=
∑
i
=
1
N
(
μ
i
−
y
i
)
x
i
=
X
T
(
μ
−
y
)
g(\mathbf w) = \nabla J_{1}(\mathbf w) = \sum_{i=1}^{N}(\mu_{i} - y_{i})\mathbf x_{i} = \mathbf X^T(\mathbf \mu - \mathbf y)
g(w)=∇J1(w)=∑i=1N(μi−yi)xi=XT(μ−y)
矩阵X一行是一个样本,一列是一个特征,转置后,一行就是一个特征,刚好与后面的
(
μ
−
y
)
(\mu - y)
(μ−y)相乘,
μ
\mu
μ和
y
y
y都是列向量。
g
(
w
)
=
∇
w
J
1
(
w
)
=
∂
J
1
(
w
)
∂
w
g(\mathbf w) = \nabla_{\mathbf w} J_{1}(\mathbf w) = \frac{\partial J_{1}(\mathbf w)}{\partial \mathbf w}
g(w)=∇wJ1(w)=∂w∂J1(w)
=
−
∑
i
=
1
N
(
y
i
1
μ
i
−
(
1
−
y
i
)
1
1
−
μ
i
)
∗
∂
μ
i
∂
w
=-\sum_{i=1}^{N}(y_{i}\frac{1}{\mu_{i}} - (1-y_{i}) \frac{1}{1-\mu_{i}} )*\frac{\partial \mu_{i}}{\partial \mathbf w}
=−i=1∑N(yiμi1−(1−yi)1−μi1)∗∂w∂μi注意:上一步骤的复合函数求导中,
1
−
μ
i
1-\mu_{i}
1−μi也是一个复合函数。
=
−
∑
i
=
1
N
(
y
i
1
μ
i
−
(
1
−
y
i
)
1
1
−
μ
i
)
∗
μ
i
(
1
−
μ
i
)
x
i
=-\sum_{i=1}^{N}(y_{i}\frac{1}{\mu_{i}} - (1-y_{i}) \frac{1}{1-\mu_{i}} )*\mu_{i}(1-\mu_{i})\mathbf x_{i}
=−i=1∑N(yiμi1−(1−yi)1−μi1)∗μi(1−μi)xi注意:上一步骤中,直接使用了结论:
∂
μ
i
w
=
μ
i
(
1
−
μ
i
)
x
i
\frac{\partial \mu_{i}}{\mathbf w} = \mu_{i}(1-\mu_{i})\mathbf x_{i}
w∂μi=μi(1−μi)xi,后边会有推导过程。
=
−
∑
i
=
1
N
[
y
i
(
1
−
μ
i
)
−
(
1
−
y
i
)
μ
i
]
x
i
=-\sum_{i=1}^{N}[y_{i}(1-\mu_{i}) - (1-y_{i})\mu_{i}]\mathbf x_{i}
=−i=1∑N[yi(1−μi)−(1−yi)μi]xi
=
−
∑
i
=
1
N
(
y
i
−
μ
i
)
x
i
=-\sum_{i=1}^{N}(y_{i} - \mu_{i}) \mathbf x_{i}
=−i=1∑N(yi−μi)xi
=
∑
i
=
1
N
(
μ
i
−
y
i
)
x
i
=\sum_{i=1}^{N}(\mu_{i} - y_{i}) \mathbf x_{i}
=i=1∑N(μi−yi)xi下面推导上面直接使用导的结论
d
σ
(
z
)
d
z
=
d
(
1
1
+
e
−
z
)
d
z
=
−
1
(
1
+
e
−
z
)
2
∗
(
−
e
−
z
)
\frac{d\sigma(z)}{dz} = \frac{d(\frac{1}{1+e^{-z}})}{dz} = -\frac{1}{(1+e^{-z})^2} * (-e^{-z})
dzdσ(z)=dzd(1+e−z1)=−(1+e−z)21∗(−e−z)
=
1
(
1
+
e
−
z
)
2
∗
e
−
z
=\frac{1}{(1+e^{-z})^2} * e^{-z}
=(1+e−z)21∗e−z
=
1
1
+
e
−
z
∗
e
−
z
1
+
e
−
z
=\frac {1}{1 + e^{-z}} * \frac{e^{-z}}{1+e^{-z}}
=1+e−z1∗1+e−ze−z
=
1
1
+
e
−
z
∗
(
1
−
1
1
+
e
−
z
)
=\frac {1}{1 + e^{-z}} * (1 - \frac{1}{1+e^{-z}})
=1+e−z1∗(1−1+e−z1)
=
σ
(
z
)
∗
(
1
−
σ
(
z
)
=\sigma(z) * (1-\sigma(z)
=σ(z)∗(1−σ(z)这是sigmoid函数的求导结论,下面推导线性模型作为自变量的sigmoid函数的求导公式:
∂
μ
∂
w
=
∂
σ
(
w
T
x
)
∂
w
\frac{\partial \mu}{\partial \mathbf w} = \frac{\partial \sigma(\mathbf w^T\mathbf x)}{\partial \mathbf w}
∂w∂μ=∂w∂σ(wTx)
=
∂
σ
(
z
)
∂
z
∗
∂
z
∂
w
= \frac{\partial \sigma(z)}{\partial z} * \frac{\partial z}{\partial \mathbf w}
=∂z∂σ(z)∗∂w∂z
=
σ
(
z
)
∗
(
1
−
σ
(
z
)
∗
x
i
=\sigma(z) * (1-\sigma(z)* \mathbf x_{i}
=σ(z)∗(1−σ(z)∗xi根据前面的定义,
σ
=
μ
\sigma = \mu
σ=μ
=
μ
∗
(
1
−
μ
)
∗
x
i
=\mu * (1-\mu) * \mathbf x_{i}
=μ∗(1−μ)∗xi注意:上式得到的其实是一个向量。
用牛顿法求解Logistic损失函数和的极小值:IRLS
不是完全明白,直接贴处PPT,之后再来弄清楚细节。
∙
\bullet
∙ IRLS的翻译为迭代加权最小二乘,主要是因为倒数第三个公式里的S,是在倒数第二个公式的基础上的加权值。倒数第二个公式,是标准的最小二乘解析求解的公式。
∙
\bullet
∙ 加权最小二乘又通过共轭梯度法求解,因此Scikit-Learn中采用的牛顿法求解的算法名称取为“Newton-CG”。
∙
\bullet
∙ 此处讲的最小二乘与上一节讲过的用“线性回归”模型计算
d
t
d^t
dt之间是什么关系?
Logistic回归优化求解
∙
\bullet
∙ Logistic回归优化求解有多种方法:牛顿法、梯度、随机梯度、共轭梯度都可以。
∙
\bullet
∙ L2正则函数连续,可采用所有的优化方法。
∙
\bullet
∙ 由于L1正则函数不连续,所以需要用梯度/Hessian矩阵的方法不适用。类似Lasso求解,可采用坐标轴下降。
Scikit-Learn中实现Logistic回归的类
class sklearn.linear_model.LogisticRegression(penalty='l2',...,solver='liblinear',...)
∙
\bullet
∙ 参数solver表示优化算法,可选:
1)liblinear:使用开源的liblinear库实现,内部使用了坐标轴下降算法来优化损失函数,支持L1正则和L2正则。
2)lbfgs:拟牛顿法,只支持L2。
3)newton-cg:牛顿法(每个大迭代中的加权在这里插入代码片
最小二乘回归部分采用共轭梯度实现,拟牛顿法是这样的吗?没写出来就应该不是的吧?拟牛顿法,应该涉及到计算更新量的问题,因为它只是换各方式计算海森矩阵,没说不用计算更新量。),只支持L2正则。
4)sag:随机平均梯度下降,梯度下降的变种,适合于样本数据多(如大于5万)的时候,只支持L2正则。
5)saga:改进的随机平均梯度下降,支持L1正则。what,梯度下降类算法不是不支持L1正则吗?老师原话说的是,在最新版的Scikit-Learn中已经可以支持L1正则了。看来此处不是笔误啊。
∙
\bullet
∙ liblinear是一个大规模线性方程求解的库。
根据上面的信息,在Scikit-Learn中,若想用L1正则,则只有liblinear和saga两种选择,样本数小的时候用libliner,样本数特别大的时候用saga。
在讲这张PPT的时候,老师说道:若要用L2,数据量小的时候用liblinear、newton_cg,数据量大的时候用lbfgs、sag,数据量再大一些的时候用saga。说道的根PPT里的内容好像有细微的区别。
大数据还可以考虑SGDClassifier,用logloss就是logistic回归,用hingelos,就是用随机梯度下降实现的SVM。
注意最后一句话,其实加正则也需要做数据缩放。