机器学习笔记(二)Logistic Regression的推导与实现

什么是Logistic Regression

逻辑斯蒂回归本质上是一个线性的二分类算法,通过sigmod函数把线性函数 \(z=w^T*x+b\) 从实数范围映射到\([0,1]\)之间,来表示一个概率值。

sigmod函数

我们先来看看sigmod函数长啥样,\(sigmod(z)=\frac{1}{1+e^{-z}}\)

用matplotlib把它画出来

1
2
3
4
5
6
7
8
9
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
def sigmod(x):
return (1/(1+np.exp(-x)))
x=np.linspace(-10,10,50)
y=sigmod(x)
plt.plot(x,y)
plt.show()
png

png

sigmod函数有个很特别的地方就是
$ y'==y*(1-y) $

极大释然法推导logistic regression

\(h(x)=\frac{1}{1+e^{-({w^T}*x+b)}}\)当h(x)>=0.5的时候,y的值为1,相反y值则判定为0.当模型确定以后,就是通过算法求解参数了。 w,b是我们需要求解的模型参数,因为我们的参数要尽可能的拟合数据集\((x_1,y_1),(x_2,y_2)..,(x_i,y_i)\)所以我们可能理解成求\(l(w,b)\) 的极大释然函数:

\(l(w,b)=\prod\limits_{i=1}^{m}{p(y_i|x_i;w,b)}\)

由于上面释然函数是连乘的形式,没法通过凸优化去求解,我们可以通过求对数释然函数的形式将其变成累加的形式

$ ln{l(w,b)}=_{i=1}^{m}ln{p(y_i|x_i;w,b)}$

损失函数

我们可以定义损失函数为 \(J(\theta)=-ln{l(w,b)}\) 这样我们就把求释然函数最大值变成了求解损失函数的最小值问题。

\(p(y=1|x_i;w,b)=h(x)\)

\(p(y=0|x_i;w,b)=1-h(x)\)

所以 \[ \begin{equation} \begin{aligned} p(y_i|x_i;w,b)&={h(x)^{y_i}}{(1-h(x))^{(1-y_i)}} \\ J(w,b)&=\sum\limits_{i=1}^{m} -ln{(h(x)^{y_i}{(1-h(x))^{(1-y_i)}})} \\ &=\sum\limits_{i=1}^{m} {({y_i}-1)ln(1-{h(x)})-{y_i}ln({h(x)})} \end{aligned} \end{equation} \] #梯度下降法求解 对\(w\)求偏倒数,有 \[ \begin{equation} \begin{aligned} {\frac{\partial J(w,b)}{\partial w}}&={\frac{1}{m}}\sum\limits_{i=1}^{m} ({\frac{(y_i -1)}{1-h(x)}}-{\frac{y_i}{h(x)}})*{\frac {\partial h(x)}{\partial w}} \\ &={\frac{1}{m}}\sum\limits_{i=1}^{m} ({\frac{(y_i -1)*-1}{1-h(x)}}-{\frac{y_i}{h(x)}})*h(x)*(1-h(x)){\frac {\partial z(x)}{\partial w}} \\ &={\frac{1}{m}}\sum\limits_{i=1}^{m}(h(x)-y_i)*{x_i} \end{aligned} \end{equation} \]\(b\)求偏倒数,有 \[ \begin{equation} \begin{aligned} {\frac{\partial J(w,b)}{\partial b}}&={\frac{1}{m}}\sum\limits_{i=1}^{m} ({\frac{(y_i -1)}{1-h(x)}}-{\frac{y_i}{h(x)}})*{\frac {\partial h(x)}{\partial b}} \\ &={\frac{1}{m}}\sum\limits_{i=1}^{m} ({\frac{(y_i -1)*-1}{1-h(x)}}-{\frac{y_i}{h(x)}})*h(x)*(1-h(x)){\frac {\partial z(x)}{\partial w}} \\ &={\frac{1}{m}}\sum\limits_{i=1}^{m}(h(x)-y_i) \end{aligned} \end{equation} \] 接下来通过用上面算出来w,b的梯度公式,不断去迭代,一直到找到使得经验损失最小的最优参数。

代码实现

。。。未完待续。。。