逻辑回归
介绍
逻辑回归是用来做分类的,样本已经做好了分类,我们构建模型使得面对一个新的样本时可以对它进行分类。
sigmoid函数
先来看这样一个函数
y=11+e−x
y = \frac{1}{1+e^{-x}}
y=1+e−x1
这个函数叫做sigmoid函数,它的图像是这样的
可以看到无论x去什么值,总能把y映射到0~1之间。
hθ(x)=11+e−θTx
h_\theta(x)=\frac{1}{1+e^{-\theta^T x}}
hθ(x)=1+e−θTx1
通过这个式子,我们就把原本的y值重新映射了一遍,所有的hθ(x)h_\theta(x)hθ(x)都处在0~1之间,对于h值大于0.5的我们将其类别标记为1,对于h值小于0.5的我们将其类别标记为0。这样就完成了分类。
极大似然估计
一些事情已经发生了,我们就把他们当做是在最大概率的情况下发生的,这就是极大似然估计。
举个例子,一个盒子里有100个球,有黑白两种颜色,但不知道黑白具体数量。
现在你一把抓了10个球,9黑1白,那么盒子里最有可能的分布是什么?
自然是90个黑球,10个白球,因为这种情况会让我们有最大概率抓到9黑1白。
也就是说我们要找到最大概率使得现状发生的这种情况,这种情况也就是最有可能的原有状况。
假设事件xix_ixi发生的概率为PxiP_{x_i}Pxi,那么这些事件都发生的概率就是:
P总=∏i=1nPxi
P_总=\prod_{i=1}^nP_{x_i}
P总=i=1∏nPxi
此时我们还不知道θ\thetaθ的具体值,我们的目的就是求出使得P总P_总P总达到最大的θ\thetaθ.
∏i=1nP(xi,θ)\prod_{i=1}^{n}P(x_i,\theta)∏i=1nP(xi,θ)也被称为似然函数。
代价函数
sigmoid函数的值域处在0~1之间,正好用来表示概率。
因此事件xix_ixi发生的概率就是
P(xi,θ)={hθ(xi) ,y=11−hθ(xi),y=0
P(x_i,\theta)=
\begin{cases}
h_\theta(x_i) \,\,\,\,\,\,\,\,\,\,,y=1 \\
1-h_\theta(x_i) ,y=0
\end{cases}
P(xi,θ)={hθ(xi),y=11−hθ(xi),y=0
写成一个式子就是
P(xi,θ)=hθ(xi)y(1−hθ(xi))1−y
P(x_i,\theta)=h_\theta(x_i)^y(1-h_\theta(x_i))^{1-y}
P(xi,θ)=hθ(xi)y(1−hθ(xi))1−y
那么P总P_总P总就是
P总=∏i=1nhθ(xi)yi(1−hθ(xi))1−yi
P_总=\prod_{i=1}^n h_\theta(x_i)^{y_i}(1-h_\theta(x_i))^{1-y_i}
P总=i=1∏nhθ(xi)yi(1−hθ(xi))1−yi
乘法太麻烦,我们求lnP总lnP_总lnP总的最大值也是一样
lnP总=∑i=1nyilnhθ(xi)+(1−yi)ln(1−hθ(xi))
lnP_总=\sum_{i=1}^ny_ilnh_\theta(x_i)+(1-y_i)ln(1-h_\theta(x_i))
lnP总=i=1∑nyilnhθ(xi)+(1−yi)ln(1−hθ(xi))
一般代价函数都会写成求最小值,所以我们在lnP总lnP_总lnP总加个负号。
J(θ)=−∑i=1nyilnhθ(xi)+(1−yi)ln(1−hθ(xi))
J(\theta)=-\sum_{i=1}^ny_ilnh_\theta(x_i)+(1-y_i)ln(1-h_\theta(x_i))
J(θ)=−i=1∑nyilnhθ(xi)+(1−yi)ln(1−hθ(xi))
这就是根据极大似然估计得出的逻辑回归的代价函数。
梯度下降
梯度下降是老办法了
θj:=θj−α∂∂θjJ(θ)
\theta_j := \theta_j - \alpha\frac{∂}{∂\theta_j}J(\theta)
θj:=θj−α∂θj∂J(θ)
还是求偏导
J(θ)=−∑i=1nyilnhθ(xi)+(1−yi)ln(1−hθ(xi))
J(\theta)=-\sum_{i=1}^ny_ilnh_\theta(x_i)+(1-y_i)ln(1-h_\theta(x_i))
J(θ)=−i=1∑nyilnhθ(xi)+(1−yi)ln(1−hθ(xi))
∂J(θ)∂θ=−∑i=1n(yihθ(xi)−1−yi1−hθ(xi))∂hθ(xi)∂θ \frac{\partial J(\theta)}{\partial \theta}=-\sum_{i=1}^n(\frac{y_i}{h_\theta(x_i)}-\frac{1-y_i}{1-h_\theta(x_i)})\frac{\partial h_\theta(x_i)}{\partial \theta} ∂θ∂J(θ)=−i=1∑n(hθ(xi)yi−1−hθ(xi)1−yi)∂θ∂hθ(xi)
在最开始我们已经得到
hθ(x)=11+e−θTx
h_\theta(x)=\frac{1}{1+e^{-\theta^T x}}
hθ(x)=1+e−θTx1
我们令θTx=t\theta^T x=tθTx=t
那么h(t)=11+e−th(t)=\frac{1}{1+e^{-t}}h(t)=1+e−t1
h,(t)=1et+e−t+2
h^,(t)=\frac{1}{e^t+e^{-t}+2}
h,(t)=et+e−t+21
又因为
h(t)∗(1−h(t))=1et+e−t+2
h(t)*(1-h(t))=\frac{1}{e^t+e^{-t}+2}
h(t)∗(1−h(t))=et+e−t+21
故
h,(t)=h(t)∗(1−h(t))
h^,(t)=h(t)*(1-h(t))
h,(t)=h(t)∗(1−h(t))
∂hθ(xi)∂θ=h,(t)∗∂t∂θ=h,(t)∗∂θTx∂θ=h(t)∗(1−h(t))∗xi=hθ(xi)(1−hθ(xi))∗xi \frac{\partial h_\theta(x_i)}{\partial \theta}=h^,(t)*\frac{\partial t}{\partial \theta}=h^,(t)*\frac{\partial \theta^Tx}{\partial \theta}=h(t)*(1-h(t))*x_i=h_\theta(x_i)(1-h_\theta(x_i))*x_i ∂θ∂hθ(xi)=h,(t)∗∂θ∂t=h,(t)∗∂θ∂θTx=h(t)∗(1−h(t))∗xi=hθ(xi)(1−hθ(xi))∗xi
∂J(θ)∂θ=∑i=1nxi(hθ(xi)−yi) \frac{\partial J(\theta)}{\partial \theta}=\sum_{i=1}^{n}x_i(h_\theta(x_i)-y_i) ∂θ∂J(θ)=i=1∑nxi(hθ(xi)−yi)
这么一来迭代的函数就有了
θj:=θj−α∑i=1nxi(hθ(xi)−yi)
\theta_j := \theta_j - \alpha\sum_{i=1}^{n}x_i(h_\theta(x_i)-y_i)
θj:=θj−αi=1∑nxi(hθ(xi)−yi)