机器学习算法实践-Logistic回归与梯度上升算法(上)
前言
关于Logistic回归分类器我打算用两部分总结,第一部分主要介绍Logistic回归的理论相关的部分,因为这里涉及到通过似然函数建立Logistic回归模型以及使用梯度上升算法优化参数两个主要的内容, 感觉可能比较多, 不过对于学习过最优化方法, 概率论以及线性代数的基础内容童鞋来说,这部分也是很快就掌握得啦。第二部分主要总结Logistic回归模型的代码实现和模型训练以及测试等。
Logistic回归
Logistic回归为概率型非线性回归模型, 是研究二值型输出分类的一种多变量分析方法。通过logistic回归我们可以将二分类的观察结果$y$与一些影响因素$[x_{1}, x_{2}, x_{3}, …]$ 建立起关系从而对某些因素条件下某个结果发生的概率进行估计并分类。
Sigmoid函数
对于二分类问题,我们想要一个函数能够接受所有输入然后预测出两种类别,可以通过输出0或者1。这个函数就是sigmoid函数,它是一种阶跃函数具体的计算公式如下:
$$
\sigma(z) = \frac{1}{1 + e^{-z}}
$$
Sigmoid函数的性质: 当$x$为0时,Sigmoid函数值为0.5,随着$x$的增大对应的Sigmoid值将逼近于1; 而随着$x$的减小, Sigmoid函数会趋近于0。
Logistic回归分类器(Logistic Regression Classifier)
Logistic回归分类器是这样一种分类器:
在分类情形下,经过学习后的LR分类器是一组权值
$$
\overline{\omega} = [\omega_{0}, \omega_{1}, \omega_{2}, … , \omega_{n}]^{T}
$$
,样本也可以用一组向量 $\overline{x}$ 表示:
$$
\overline{x} = [x_{0}, x_{1}, x_{2}, x_{3}, … , x_{n}]^{T}
$$
其中$x_{0} = 1$
将 $\overline{x}$ 根据 $\overline{w}$ 线性叠加带入到Sigmoid函数中便可以得到范围在 $(0, 1)$, 之间的数值,大于$0.5$被分入1类,小于$0.5$的被归入0类:
$$
z = \overline{x}^{T}\centerdot\overline{\omega}
$$
$$
p(y=1 | \overline{x}) = \frac{1}{1 + e^{-z}}
$$
其中$p(y=1 | \overline{x})$就是指在特征为$\overline{x}$属于类1的条件概率, 当然也可以容易得到属于类0的概率为:
$$
p(y=0 | \overline{x}) = 1 - p(y=1 | \overline{x}) = \frac{1}{1 + e^{z}}
$$
所以Logistic回归最关键的问题就是研究如何求得 $\overline{\omega}$ 。这个问题就需要用似然函数进行极大似然估计来处理了。
似然函数(Likelihood function)
In statistics, a likelihood function (often simply the likelihood) is a function of the parameters of a statistical model given data.
从似然函数的英文定义中可以看到,似然函数是与统计模型中的参数的函数。虽然似然性和概率的意思差不多,但是在统计学中却有着明确的区分:
- 概率(Probability)使我们平时用的最多的,用于在一直某些参数的值的情况下预测某个事件被观测到的可能性。
- 似然性(Likelihood)则是在一直观测到的结果时,对有关参数进行估计。
可见这两个是个概念是个可逆的过程,即似然函数是条件概率的逆反.
对于某个已发生的事件 $x$, 某个参数或者某个参数向量 $\theta$ 的似然函数的值与已知参数 $\theta$ 前提下相同事件 $x$ 放生的条件概率(概率密度)的值相等, 即:
$$
\mathcal{L}(\theta | x) = P(x | \theta)
$$
似然函数对于离散和连续随机分布的表示形式是不同的:
离散型
对于具有与参数 $\theta$ 相关离散概率分布 $p$ 的变量 $X$, 对于某个变量 $X = x$ $\theta$ 的似然函数表示成:
$$
\mathcal{L}(\theta | x) = p_{\theta}(x) = P_{\theta}(X=x)
$$
连续型
连续性的分布我们则用概率密度 $f$ 来表示:
$$
\mathcal{L}(\theta | x) = f_{\theta}(x)
$$
注意似然函数并不是一个条件概率,虽然表达式与条件概率的形式相同。因为 $\theta$ 并不是一个随机变量而是一个参数。
极大似然估计
极大似然估计是似然函数最初也是最然的应用,我们优化Logistic模型就行极大似然估计的过程(求似然函数的极大值),通过极大似然估计,我们可以得到最合理的参数。
Logistic回归中的极大似然估计
上一部分总结了什么似然函数和极大似然估计,这里就总结下Logistic模型的极大似然估计。
在LR分类器部分我们推导了Sigmoid函数计算两类问题的概率表达式,由于是二分类,分类结果是0和1,我们可以将两种类别的概率用一个式子表达, 对于一个样本 $\overline{x_{i}}$ 得到一个观测值为 $y_{i}$ 的概率为:
$$
P(y = y_{i} | \overline{x_{i}}) = p(y = 1 | \overline{x_{i}})^{y_{i}}(1 - p(y = 0 | \overline{x_{i}})^{1 - y_{i}} = (\frac{1}{1 + e^{-\overline{x_{i}}\centerdot\overline{\omega}^{T}}})^{y_{i}}(\frac{1}{1 + e^{\overline{x_{i}}\centerdot\overline{\omega}^{T}}})^{1 - y_{i}}
$$
若各个样本之间是相互独立的,则联合概率为各个样本概率的乘积。于是根据这系列的样本,我们就能得到关于参数向量 $\overline{\omega}$ 的似然函数 $\mathcal{L}(\overline{\omega})$ :
$$
\mathcal{L}(\overline{\omega}) = \prod_{i=1}^{n}(\frac{1}{1 + e^{-\overline{x_{i}}\centerdot\overline{\omega}^{T}}})^{y_{i}}(\frac{1}{1 + e^{\overline{x_{i}}\centerdot\overline{\omega}^{T}}})^{1 - y_{i}}
$$
我们的目的就是要对这个似然函数的极大值进行参数估计,这便是我们训练Logistic回归模型的过程。通过极大似然估计我们便可以通过所有样本得到满足训练数据集的最合理的参数 $\overline{\omega}$
通过梯度上升算法进行极大似然估计
有了似然函数,我们便可以通过优化算法来进行优化了。使用梯度上升需要计算目标函数的梯度,下面我简单对梯度的计算进行一下推导:
为了方便,我们将似然函数取自然对数先,
$$
ln\mathcal{L}(\overline{\omega}) = \sum_{i=1}^{n}[y_{i}\centerdot ln\frac{exp(x_{i})}{exp(x_{i} + 1)} + (1 - y_{i}\centerdot ln\frac{1}{exp(x_{i} + 1)})]
$$
$$
ln\mathcal{L}(\overline{\omega}) = \sum_{i=1}^{m}[y_{i} \centerdot ln(exp(x_{i})) - y_{i} \centerdot ln(1 + exp(x_{i})) - (1 - y_{i})ln(1 + exp(x_{i}))]
$$
$$
ln\mathcal{L}(\overline{\omega}) = \sum_{i=1}^{n}(x_{i}y_{i} - ln(1 + exp(x_{i})))
$$
然后我们对去过对数的函数的梯度进行计算:
$$
\frac{\partial ln \mathcal{L}(\overline{\omega})}{\partial \omega_{k}} = \sum_{i=1}^{m}x_{ik}(y_{i} - \frac{1}{1 + exp(\overline{\omega} \centerdot \overline{x_{i}})})
$$
通过矩阵乘法直接表示成梯度:
$$
\nabla ln\mathcal{L}(\overline{\omega}) = \overline{x} \centerdot (\overline{y} - \overline{\pi(\overline{x})}) = \overline{x} \centerdot \overline{error}
$$
设步长为 \alpha, 则迭代得到的新的权重参数为:
$$
\overline{w} := \overline{w} + \alpha \nabla ln\mathcal{L}(\overline{\omega})
$$
这样我们通过梯度上升法做极大似然估计来做Logistic回归的过程就很清楚了,剩下的我们就需要通过代码来实现Logistic回归吧.
总结
本文主要总结了Logistic回归相关的原理以及使用梯度上升法做回归优化的过程推导,为我们自己实现Logistic回归分类器做好了充足的准备。
参考
- https://en.wikipedia.org/wiki/Likelihood_function
- 《Machine Learning in Action》