假设$\left{x^{(1)},y^{(1)}\right}$,$\left{x^{(2)},y^{(2)}\right}$...$\left{x^{(m)},y^{(m)}\right}$是m个训练样本,
其中$x^{(i)}$是n维向量($\forall i\in{1,2,...m}$).设损失函数为$J(\theta)$ 其中$\theta$是模型训练的参数。则logistic
regression模型的损失函数为:
$$\begin{aligned}
J(\theta) &=\sum_{i=1}^{m}[y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]
\
&=\sum_{i=1}^{m}J_{i}(\theta)
\end{aligned}$$
其中$h_{\theta}(x^{(i)})=\frac{1}{1+e^{-\theta^{T}x^{(i)}}}$
梯度上升公式为:
$\theta_{j}:=\theta_{j}+\eta\frac{\partial{J(\theta)}}{\partial{\theta_{j}}}$
其中$\eta$称为学习率
$$\begin{aligned}
\frac{\partial{J(\theta)}}{\partial{\theta_{j}}}
& =\sum_{i=1}^{m}\frac{\partial{J_{i}(\theta)}}{\partial{h_{\theta}(x^{(i)})}}\times\frac{\partial{h_{\theta}(x^{(i)})}}{\partial{(\theta^{T}x^{(i)}})}\times\frac{\partial{\theta^{T}x^{(i)}}}{\partial{\theta_{j}}}
\
& =\sum_{i=1}^{m}[y^{(i)}\frac{1}{h_{\theta}(x^{(i)})}+(y^{(i)}-1)\frac{1}{1-h_{\theta}(x^{(i)})}]\times[h_{\theta}(x^{(i)})(1-h_{\theta}(x^{(i)})]\times x_{j}^{(i)}
\
& =\sum_{i=1}^{m}[(y^{(i)}-h_{\theta}(x^{(i)}))]x_{j}^{(i)}
\end{aligned}$$
其中$x_{j}^{(i)}$表示第i个训练样本输入向量的第j个分量。
故$\theta_{j}:=\theta_{j}+\eta\sum_{i=1}^{m}[(y^{(i)}-h_{\theta}(x^{(i)}))]x_{j}^{(i)}$
关于为什么要用log做梯度上升:
1.减少计算量。取对数可以将连乘的形式化为求和的形式,在求导的时候也会更加方便
2.防止浮点数下溢。当数据集很大的时候,连乘的结果会趋向0,非常不利于后续的计算
3.取对数不影响单调性。