对于有监督学习,按照解决问题的类型可以分成两类:一类是回归问题,前面的文章我们讨论的都是通过线性回归模型解决回归问题,另外一类问题是分类问题,logistic回归模型就是用于解决二元分类问题。
假设我们要预测一个事件A的概率,我们假设这个事件A发生的概率是p,那么该事件A不发生的概率就是1-p。对于表达式:
p/(1-p) (1)
如果p的结果大于等于0.5,那么表达式(1)的结果大于等于1,表明事件A发生的概率大于事件A不发生的概率。
对表达式(1)取对数,得到:
ln(p/(1-p)) (2)
我们假设表达式(2)的结果,是输入向量x的线性函数,即:
ln(p/(1-p)) = wTx (3)
其中:wT=(w0 w1 ..... wn),x=(x0 x1 ...... xn)T,x0=1,T表示矩阵的转置。
对(3)式,进行简单的推导,可以得到如下结果:
p=1/(1+exp(-wTx)) (4)
这样我们就确定了假设函数h(x):
h(x)=p=1/(1+exp(-wTx)) (5)
h(x)表示事件A发生的概率。
如果,令wTx=z,那么公式(5)可以改写成:
h(z)=1/(1+exp(-z)) (5.1)
(5.1)式的h(z)被称为Sigmoid函数。可以通过python绘制这个函数:
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> def sigmoid(x):
y = 1.0/(1.0+np.exp(-x))
return y
>>> plot_x = np.linspace(-10, 10, 100)
>>> plot_y = sigmoid(plot_x)
>>> plt.plot(plot_x, plot_y)
>>> plt.show()
接下来,我们用y=1表示A事件发生,y=0表示A事件不发生,那么
P(y=1|x)=h(x) (6)
P(y=0|x)=1-h(x) (7)
(6)和(7)表达式中|表示条件概率,就是说这个概率是基于输入参数x作为前提条件得到的概率。
假设我们的训练集有m个样例,那么第i个样例的条件概率可以表示成:
(8)
公式(8)是综合了公式(6)和(7)的表达式,当y(i)=1时,对应公式(6),y(i)=0时,对应公式(7)。
我们假设训练集中的各个样本都是相互独立的,那么这些样本对于y=y(i)同时出现的联合概率:
(9)
如果我们的模型能够通过调整w参数,得到联合概率的最大值,就说明预测损失最小,也就是损失函数取最小值。这样问题就转换成求L(w)的极大值的问题,也就是所谓的极大似然估计法。
ln函数是单调增函数,对L(w)求最大值和对L(w)的对数求最大值是一回事,因此,对(9)式两端取对数:
(10)
对于logistic回归模型,可以定义损失函数:
J(w) = -(1/m)l(w) (11)
对于损失函数求最小值和对数似然函数求出最大值实际上是等价的,后面的工作就是对J(w)求w向量的偏导数了。
微积分预备知识:
1)d(exp(x))/dx = exp(x)
2) d(ln(x))/dx = 1/x
3) 对于(5.1)式,对h(z)的函数求导:
以下是损失函数的梯度推导:
和最小二乘法不一样,这个梯度的最小值没有解析解。
因此我们需要用批量梯度下降优化方法通过每次把所有的样本作为输入,通过迭代计算来获得最优的w参数。
类似前面在线性回归模型中的讨论,也可以通过小批量梯度下降优化方法和随机梯度下降优化方法来减少迭代过程中的计算量:
参考资料:
《Python机器学习算法:原理,实现与案例》
《深度学习与图像识别:原理与实践》