[分类] 逻辑回归-Logistic Regression

2018-11-09  本文已影响0人  数据麻瓜

终于到了大名鼎鼎的逻辑回归,在学逻辑回归的时候,从偏传统的统计那边学过一次,然后又从机器学习这边学过一次,感觉还是挺不一样的。

从传统那边,老师说之所以要进行logit变换的原因是在生物统计方面觉得这个transformation比较合理,但从机器学习上看,这个transformation跟LDA(Linear Discriminant Analysis)有关,在了解了LDA之后,有Logistic这个想法还是蛮直接。

在传统上会有对Group Data做逻辑回归的情况,但是在机器学习上,好像很少会有这种问题出现。不过个人以为,从Logistics Regression这个名字来看,最开始应该还是传统统计这边有了成果,然后之后才算到了ML算法中。

话不多说,既然整理的是ML算法,那就从ML这边说起。刚才讲了,logistic的想法与LDA有关。在LDA判别某一个点属于哪一类时,需要计算这个式子log(P(G=k|X=x))=log(\frac{f_k(x)\pi_k}{\sum_{l=1}^K f_l(x)\pi_l})=C1+log(f_k(x)\pi_k)=C+x^T\Sigma^{-1}\mu_k-\frac{1}{2}\mu_k^T\Sigma^{-1}\mu_k+log(\pi_k)=\beta'_0+\beta' X,为了使所有的\sum \delta_k(x)=1,做一个系数的变换:
log\frac{P(G=1|X=x)}{P(G=K|X=x)}=\beta_{10}+\beta_1X
... ... ....
log\frac{P(G=K-1|X=x)}{P(G=K|X=x)}=\beta_{(K-1)0}+\beta_{(K-1)}X
由上式,可以导出:
P(G=k|X=x)=\frac{exp(\beta_{k0}+\beta_k x)}{1+\sum_{l=1}^{K-1}exp(\beta_{k0}+\beta_k x)},k=1,2,...,K-1
P(G=K|X=x)=\frac{1}{1+\sum_{l=1}^{K-1}exp(\beta_{k0}+\beta_k x)}
这也叫做Softmax函数。因为是由LDA导出的,所以就直接处理了一个多分类的问题。

那如果从传统统计这边导,Logistic最开始不完全是为了处理分类问题存在的,他可以看做是对占比的一个预测,这也就是逻辑回归为什么有回归这两个字。


Lecture Notes-Burhman

就像上面这个例子,我们要拟合percent和Age的关系。那在一开始画percent和Age的散点图的时候,我们会发现他们的关系并不是完全线性的,反而呈现一种S-shape(类似Sigmoid Function),那对于这种问题,我们还是会想要把他转化为一个线性关系来处理嘛,所以就对percent做一个logit transformation,这是为什么算法叫logistic的原因。\pi'=logit(\pi)=log(\frac{\pi}{1-\pi}),这样转换以后话散点图,发现pi'和X有成性关系,于是\pi'=\beta_0+\beta X。这样一来,\pi =P(K=1|X)= \frac{exp(\beta_0+\beta X)}{1+exp(\beta_0+\beta X)},P(K=0|X)= \frac{1}{1+exp(\beta_0+\beta X)},这也叫做Sigmoid Function

仔细观察从LDA导出的式子和刚才的式子,可以发现其实他们是一样的,softmax可以看做是Sigmoid的一个拓展,但本质相同。

所以在做参数估计的时候,我们可以先从统计这边来看。由于统计上一开始处理的是一个估计percentage的问题,那其实这就很明显可以看做一个二项分布,类似的,多分类可以看做是一个Multinomial的分布。为了简单处理,以下只考虑二分类问题,并且将\beta_0一并归到\beta中。那从统计上来说,参数估计一般是用最大似然估计,二项分布可以看做是多个伯努利分布,所以:

L(\beta)=\prod_{i=1}^N p(x_i;\beta)^{y_i}(1-p(x_i;\beta))^{1-y_i}
l=In(L)=\sum_{i=1}^N[y_ilog(p(x_i;\beta))+(1-y_i)log((1-p(x_i;\beta)))]
=\sum_{i=1}^N[y_i log(p(x_i;\beta)/(1-p(x_i;\beta))+log((1-p(x_i;\beta))]=\sum_{i=1}^N[y_i\beta x_i-log(1+exp(\beta x_i))]
\frac{\partial l}{\partial \beta}=\sum_{i=1}^Nx_i(y_i-p(x_i;\beta))=0

因为这个式子不能得到显式的答案,所以需要用牛顿法/最优化方法来数值逼近方程根。然后因为呈sigmoid的形态,所以模型在两端的导数很小,所以迭代起来会很慢。所以一般初始值可以另\beta=0或一些0附近比较小的值,然后learning rate需要很小,我自己试下来有时候需要<0.000001才能让算法收敛。如果自己写logistic算法的话,处置选取和learning rate需要谨慎选择,然后最好是对数据先进行标准化再做拟合。

Sigmoid

那对于logistic,我们一般选取的损失函数式Cross-Entrophy:
−(ylog(p)+(1−y)log(1−p)),如果是多分类问题:−\sum_ky_klog(p_k),可以发现,其实和最大似然估计的式子是一样的。

模型选择时,如果是subset selection的话一个个拟合很耗时间,所以一般会用Rao score test 去test是否要加feature,用Wald test决定是否要去变量 ->bi direction stepwise

或者是直接加入一个L1正则项,来剔除一些变量

TBC

上一篇 下一篇

猜你喜欢

热点阅读