机器学习——logistic Regression

通过线性分类,我们预测的是一个样本是positive,还是negative,不过有时候我们并不想要那样明确的结果。有时候,这种情况在医学中更为常见,我们想知道一个样本是正的概率,比如医院中对肿瘤良性与恶性的预测,来决定后续的治疗方式。概率是从0到1的实数,因此对概率的预测依然属于回归而非分类。

理想中,我们希望样本的样子是这样的:{X1,0.9},{x2,0.2},{x3,0.65}...\{X_1,0.9\},\{x_2,0.2\},\{x_3,0.65\}...,即对每个样本,都已知它是positive的概率。但是实际上我们往往无法得到这样的结果,我们无法确切知道某个样本是正的概率。我们得到的样本,往往与分类问题的样本一样,对每个样本,知道它是negative,还是positive。不过我们可以假想,得到的训练集是理想情况+噪声造成的:如果是negative,我们可以说它是positive的概率为0,如果是positive,我们称该概率为1。我们希望可以预测出概率。

首先,有之前的pla与linear regression的基础,很容易想到,使用WXWX去得到预测值。但是预测值虽然是实数,但是因为是概率,所以它的分布仅在于[0,1][0,1],因此仅仅使用WXWX是不符合预期的。

这里,将介绍一种函数叫logistic函数:f(x)=11+exf(x) = \frac {1} {1+e^{-x} }(在数学上这个定义更加严格一点,而此处是logistic函数的一种).这个函数的图像如下:

它满足下面的条件:limx+f(x)=1\lim_ {x \to +\infty} f(x) = 1 & $_ {x -} f(x) = 0 $,它的值域是(0,1),这个性质目前很符合我们的期望。

接下来,我们需要定义的就是EinE_ {in},因为有EinE_ {in}我们才能从H种找到一个g,它的EinE_ {in}最小。但是EinE_ {in}是不能随便定义的。之前的EinE_ {in},都是在找与真正对应的yy之间的距离,这里我们不知道真正的yy(也就是概率值),因此我们要换种考虑方法。

假如有一个理想的函数ff,能知道样本为positive的真实概率,表示为:P(yi=+1|Xi)=f(Xi)P(y_i=+1|X_i) = f(X_i),那么该样本是现在这个样子的概率为:P(Xiyi=+1)=P(Xi)×P(yi=+1|Xi)P(X_i \bigcap y_i = +1) = P(X_i) \times P(y_i=+1|X_i),而当yi=1y_i = -1时,P(Xiyi=1)=P(Xi)×(1P(yi=+1|Xi))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)$。

目前,我们不知道ff,但是假如我们用HH中的某个hh来代替,这就意味着在函数h的情况下,出现这个样本集的概率,当然我们想要做的是令这个概率越大越好。平时处理的EinE_ {in}都是和,而这次我们依然希望用和来处理,而不是连乘,因此我们为上式加上一个ln\ln,而因为P(X_i)的概率都是一定的,所以我们无需关注。省掉P(Xi)P(X_i),再进行上面的处理之后变为: 1Ni=1nln((yi+1)2h(Xi)+(1yi)2(1h(Xi)))\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)))}.

但是这不符合EinE_ {in},因为我们想要的是EinE_ {in}越小越好,而上面的式子是越大越好,因此需要加上一个负号,同时,如果我们使用之前的logistic function作为h,我们可以发现它有一个性质:1 - h(x) = h(-x),因此,可以得到下面的式子:

Ein=1ni=1nln((yi+1)2h(Xi)+(1yi)2(1h(Xi)))=i=1nlnh(yiXi). 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 带入上式:

Ein=1ni=1nln(1+eyiWTXi) E_ {in} =\frac{1}{n} \sum _ {i = 1}^{n} \ln(1+e^{-y_iW^TX_i})

从上式可以看出来,如果yi=1y_i = 1,而预测它为1的概率小于0.5(WTXi<0W^TX_i<0),那么EinE_ {in}的值会大于ln2ln2,而EinE_ {in}是没有上界的。错的越离谱,惩罚就越大。

接下来的问题,就是如何让EinE_ {in}取到最小了。

首先,可以证明的是,这个EinE_ {in}也是一个凸函数(证明办法需要用到更深入的线性代数知识),因此我们可以找到一个最小值。和线性回归时候遇到的情况一样,要得到极值点,就要找到梯度为0的点。因此首先要得到的是EinE_ {in}的梯度。从微积分里,我们知道梯度的求法,也就是对每个方向求偏导,由它们组成的向量。为了得到梯度,我们首先应该求出EinE_ {in}对每个wiw_i的偏导数,对于偏导数的求法在微积分中课程中我们也学习过,可以得到下面的结果: dEindwi=1Nn=1NeynWTXn×(ynxn,i)1+eynWTXn \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} } 注意:上式中为了方便,我们用NN替代了之前的nn,用nn替代了ii,并且用ii代表了WW向量中维度序列。

如果对上式向量化,我们可以得到 Ein(𝒘)=1Nn=1Nθ(yn𝒘T𝒙n)(yn𝒙n)\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)}.

上式中,θ(x)=11+ex\theta(x) = \frac {1} {1+e^{-x} }.

由此,我们求到了EinE_ {in}的梯度。为了让这个梯度为0,首先我们想到的是,所有的θ(yn𝒘T𝒙n)\theta\left({-y_n \mathbf{w}^T \mathbf{x}_n}\right)等于0,这要求所有的ynWTXny_nW^TX_n都是远大于0,这意味着原来的数据是线性可分的。

如果不是这种情况,原来的数据则不是线性可分(大多数情况下我们的数据都不是这么理想),想使得最终结果为0,那么各个数据是加权加起来最后得0.那么我们希望可以像线性回归一样通过某种表达式直接求得一个解,不过遗憾的是这个函数不是线性函数,我们没有办法一下求得这个解。我们能做的只能是步步逼近,类似于之前的PLA算法。

这就要介绍一个方法,叫梯度下降(gradient decent)。

梯度下降具体内容查看:Gradient Decent

通过梯度下降,我们可以找到一个合适的WW,从而得到较好的逻辑回归效果。