机器学习——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\) & $_{x -} 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 y_i) = 2 P(X_i) P(y_i = +1|X_i) + 2 P(X_i) (1 - P(y_i = +1|X_i)) \(.各个样本之间是独立的话,那么出现这个样本集的概率等于:\)_{i=1}^{n}P(X_i 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\),从而得到较好的逻辑回归效果。