对于逻辑回归模型,我们有如下假设:
$$ y=h(x)=sigmoid(g(x))=\frac{1}{1+\exp(-g(x))}=\frac{1}{1+\exp(-W.T\times x)} $$其中有:
$$ sigmoid(x)=\frac{1}{1+exp(-x)} $$$$ g(x)=W.T\times x $$这里的 $ h(x) $ 可以理解成当输入特征为 $ x $ 时,输出为 $ y=1 $ 的概率,即:
$$ P(y=1|x;W)=h(x) $$$$ P(y=0|x;W)=1-h(x) $$把上面两个公式联合在一起,得出如下方程:
$$ P(y|x;W)=h(x)^{y}(1-h(x))^{1-y} $$这里可以理解成 $ P(y|x;W) $ 是服从伯努利分布的,即:
$$ P(y|x;W)\sim Bernoulli(h(x)) $$为了使我的假设的模型尽量和真实的情况相符,亦即求出模型的最大似然:
$$ \max \prod_{i=1}^{m}P(y_i|x_i;W_i) $$令 $ L(W) $ 为模型关于参数 $ W $ 的似然函数:
$$ L(W)=\prod_{i=1}^{m}P(y_i|x_i;W_i) $$采用梯度上升算法求解,令:
$$ Q=\sum_{i=1}^{m}y_iln(h(x_i))+(1-y_i)ln(1-h(x_i)) $$其梯度表达式为:
$$ \frac{\partial Q}{\partial W_i}=\frac{y_i}{h(x_i)}\frac{\partial h(x_i)}{\partial W_i}-\frac{1-y_i}{1-h(x_i)}\frac{\partial h(x_i)}{\partial W_i} $$因此我们可以得出参数 $ W $ 的更新方程为:
$$ W^k_i=W^{k-1}_i+a\frac{\partial Q}{\partial W_i} $$其中 $ a $ 为学习率,一下为逻辑回归的python实现:
In [1]:
import numpy as np
# y的列向量
y = np.mat([
[1],
[1],
[1],
[0],
[0]
]).T # 1,5
# x的列向量
x = np.mat([
[1,2,1],
[2,2,1],
[3,1,1],
[7,8,1],
[9,10,1]
]).T # 3,5
# 权重
W = np.mat([1.0,1.0,1.0]) # 1,3
# 迭代次数
niter = 20000
# 学习率
lr = 0.001
def sigmoid(x):
return 1.0 / (1 + np.exp(-x))
for i in range(niter):
W = W + lr * (y - sigmoid(W * x)) * x.T
print(W)
其实大家有没有留意,其实logistic regression,就是神经网络的一个神经元。