机器学习——logistic Regression
通过线性分类,我们预测的是一个样本是positive,还是negative,不过有时候我们并不想要那样明确的结果。有时候,这种情况在医学中更为常见,我们想知道一个样本是正的概率,比如医院中对肿瘤良性与恶性的预测,来决定后续的治疗方式。概率是从0到1的实数,因此对概率的预测依然属于回归而非分类。
理想中,我们希望样本的样子是这样的:${X_1,0.9},{x_2,0.2},{x_3,0.65}…$,即对每个样本,都已知它是positive的概率。但是实际上我们往往无法得到这样的结果,我们无法确切知道某个样本是正的概率。我们得到的样本,往往与分类问题的样本一样,对每个样本,知道它是negative,还是positive。不过我们可以假想,得到的训练集是理想情况+噪声造成的:如果是negative,我们可以说它是positive的概率为0,如果是positive,我们称该概率为1。我们希望可以预测出概率。
首先,有之前的pla与linear regression的基础,很容易想到,使用$WX$去得到预测值。但是预测值虽然是实数,但是因为是概率,所以它的分布仅在于$[0,1]$,因此仅仅使用$WX$是不符合预期的。
这里,将介绍一种函数叫logistic函数:$f(x) = \frac {1} {1+e^{-x} }$(在数学上这个定义更加严格一点,而此处是logistic函数的一种).这个函数的图像如下:
它满足下面的条件:$\lim_{x \to +\infty} f(x) = 1$ & $\lim_{x \to -\infty} f(x) = 0 $,它的值域是(0,1),这个性质目前很符合我们的期望。
接下来,我们需要定义的就是$E_{in}$,因为有$E_{in}$我们才能从H种找到一个g,它的$E_{in}$最小。但是$E_{in}$是不能随便定义的。之前的$E_{in}$,都是在找与真正对应的$y$之间的距离,这里我们不知道真正的$y$(也就是概率值),因此我们要换种考虑方法。
假如有一个理想的函数$f$,能知道样本为positive的真实概率,表示为:$P(y_i=+1|X_i) = f(X_i)$,那么该样本是现在这个样子的概率为:$P(X_i \bigcap y_i = +1) = P(X_i) \times P(y_i=+1|X_i)$,而当$y_i = -1$时,$P(X_i \bigcap y_i = -1) = P(X_i) \times (1-P(y_i=+1|X_i))$,合并两种情况,得到:$P(X_i \bigcap y_i) =\frac {(y_i+1)} 2 P(X_i) \times P(y_i = +1|X_i) +\frac {(1 - y_i)} 2 P(X_i) \times (1 - P(y_i = +1|X_i)) $.各个样本之间是独立的话,那么出现这个样本集的概率等于:$\prod_{i=1}^{n}P(X_i \bigcap y_i)$。
目前,我们不知道$f$,但是假如我们用$H$中的某个$h$来代替,这就意味着在函数h的情况下,出现这个样本集的概率,当然我们想要做的是令这个概率越大越好。平时处理的$E_{in}$都是和,而这次我们依然希望用和来处理,而不是连乘,因此我们为上式加上一个$\ln$,而因为P(X_i)的概率都是一定的,所以我们无需关注。省掉$P(X_i)$,再进行上面的处理之后变为:
$\frac{1}{N} \sum _{i = 1}^{n} \ln {(\frac {(y_i+1)} 2 h(X_i) +\frac {(1 - y_i)} 2 (1 - h(X_i)))}$.
但是这不符合$E_{in}$,因为我们想要的是$E_{in}$越小越好,而上面的式子是越大越好,因此需要加上一个负号,同时,如果我们使用之前的logistic function作为h,我们可以发现它有一个性质:1 - h(x) = h(-x),因此,可以得到下面的式子:
$$
E_{in} = -\frac{1}{n} \sum _{i = 1}^{n} \ln {(\frac {(y_i+1)} 2 h(X_i) +\frac {(1 - y_i)} 2 (1 - h(X_i)))} = -\sum _{i = 1}^{n} \ln h(y_iX_i).
$$
将logistic function 带入上式:
$$
E_{in} =\frac{1}{n} \sum _{i = 1}^{n} \ln(1+e^{-y_iW^TX_i})
$$
从上式可以看出来,如果$y_i = 1$,而预测它为1的概率小于0.5($W^TX_i<0$),那么$E_{in}$的值会大于$ln2$,而$E_{in}$是没有上界的。错的越离谱,惩罚就越大。
接下来的问题,就是如何让$E_{in}$取到最小了。
首先,可以证明的是,这个$E_{in}$也是一个凸函数(证明办法需要用到更深入的线性代数知识),因此我们可以找到一个最小值。和线性回归时候遇到的情况一样,要得到极值点,就要找到梯度为0的点。因此首先要得到的是$E_{in}$的梯度。从微积分里,我们知道梯度的求法,也就是对每个方向求偏导,由它们组成的向量。为了得到梯度,我们首先应该求出$E_{in}$对每个$w_i$的偏导数,对于偏导数的求法在微积分中课程中我们也学习过,可以得到下面的结果:
$$
\frac {dE_{in} } {d{w_i} } =\frac{1}{N} \sum {n = 1}^N \frac {e^{-y_nW^TX_n} \times ( -y_nx{n,i})} {1+e^{-y_nW^TX_n} }
$$
注意:上式中为了方便,我们用$N$替代了之前的$n$,用$n$替代了$i$,并且用$i$代表了$W$向量中维度序列。
如果对上式向量化,我们可以得到 $\nabla E_{in}(\mathbf{w}) = \frac{1}{N} \sum\limits_{n=1}^N {\theta\left({-y_n \mathbf{w}^T \mathbf{x}_n}\right)} {\bigl(-y_n \mathbf{x}_n\bigr)}$.
上式中,$\theta(x) = \frac {1} {1+e^{-x} }$.
由此,我们求到了$E_{in}$的梯度。为了让这个梯度为0,首先我们想到的是,所有的$\theta\left({-y_n \mathbf{w}^T \mathbf{x}_n}\right)$等于0,这要求所有的$y_nW^TX_n$都是远大于0,这意味着原来的数据是线性可分的。
如果不是这种情况,原来的数据则不是线性可分(大多数情况下我们的数据都不是这么理想),想使得最终结果为0,那么各个数据是加权加起来最后得0.那么我们希望可以像线性回归一样通过某种表达式直接求得一个解,不过遗憾的是这个函数不是线性函数,我们没有办法一下求得这个解。我们能做的只能是步步逼近,类似于之前的PLA算法。
这就要介绍一个方法,叫梯度下降(gradient decent)。
梯度下降具体内容查看:Gradient Decent。
通过梯度下降,我们可以找到一个合适的$W$,从而得到较好的逻辑回归效果。