LionKing数据科学专栏

购买普通会员高级会员可以解锁网站精华内容且享受VIP服务的优惠

想要查看更多数据科学相关的内容请关注我们的微信公众号知乎专栏

逻辑回归(logistic regression)原理及算法实现

逻辑回归的原理

逻辑回归是一个用来处理分类问题的判别模型(discriminative model)。其思路是对数据为正例的概率进行建模。

我们认为数据是正例的概率是特征的线性组合$\beta_0 + \beta_1x_1 + \ldots + \beta_px_p$后进行sigmoid激活函数:

$$\Pr[y = 1|x] = \sigma(\beta_0 + \beta_1x_1 + \ldots + \beta_px_p) = \frac{1}{1 + e^{-\beta_0 -\beta^Tx}}$$

$$\Pr[y = 0|x] = 1 - \sigma(\beta_0 + \beta^Tx) = \frac{e^{-\beta_0 - \beta^Tx}}{1 + e^{-\beta_0 - \beta^Tx}}$$

更简洁的写法是

$$\Pr[y|x] = \sigma(\beta_0 + \beta^Tx)^y\left[1 - \sigma(\beta_0 + \beta^Tx)\right]^{1 - y}$$

在预测阶段,对于测试数据$x$,如果$\beta_0 + \beta^Tx \gt 0$,则$x$属于正例;否则属于负例。

算法

获得参数$\beta_0, \beta_1, \ldots, \beta_p$的方法是对训练数据的似然函数进行最大化:

$$\begin{align*} L(\beta_0, \beta_1, \ldots, \beta_p) &= \prod_{i=1}^{n}\Pr[y^{(i)}|x^{(i)}; \beta_0, \beta]\\ &= \prod_{i=1}^{n}\sigma(\beta_0 + \beta^Tx^{(i)})^{y^{(i)}}\left[1 - \sigma(\beta_0 + \beta^Tx^{(i)})\right]^{1 - y^{(i)}} \end{align*}$$

等价于负对数似然函数最小化

$$-l(\beta_0, \beta) = -\sum_{i=1}^{n}\left[y^{(i)}\log{\sigma(\beta_0 + \beta^Tx^{(i)}} + (1 - y^{(i)})\log{(1 - \sigma(\beta_0 + \beta^Tx^{(i)}))}\right]$$

对于逻辑回归的损失函数也可以加入$\ell_1$或$\ell_2$正则项。

使用梯度下降(gradient descent)算法即可得到最优的参数。

当数据量很大时,使用随机梯度下降(stochastic gradient descent)得到近似的参数。

Python实现

sklearn中逻辑回归默认使用了损失函数的正则化,这里将C设置得充分大用来取出正则化带来的影响。

需要购买普通会员高级会员登录后刷新该页面查看

训练数据和逻辑回归模型的决策边界(decision boundary)如下:

测试集上的ROC曲线(ROC curve)如下:

常见面试问题

Q:逻辑回归有哪些优缺点?

需要购买普通会员高级会员登录后刷新该页面查看

Q:逻辑回归的损失函数是什么?梯度是什么?损失函数关于参数是否为凸函数?

需要购买普通会员高级会员登录后刷新该页面查看

Q:逻辑回归如何处理类别型特征?

需要购买普通会员高级会员登录后刷新该页面查看

Q:逻辑回归为何不常使用类似SVM核函数的方法?

需要购买普通会员高级会员登录后刷新该页面查看

Q:从损失函数的角度解释逻辑回归。

需要购买普通会员高级会员登录后刷新该页面查看

Q:对比逻辑回归和SVM。

需要购买普通会员高级会员登录后刷新该页面查看

更多机器学习相关问题见本网站论坛机器学习理论版面机器学习实践版面

更多面试问题见面试真题汇总

想要查看更多数据科学相关的内容请关注我们的微信公众号知乎专栏