手推逻辑回归--面试前拯救一下

4,641 阅读4分钟

一些基本概念

LogisticRegression,逻辑回归。虽然其名称中含有回归二字,但其是一种非线性分类模型。逻辑回归的模型引入了sigmoid函数映射,是非线性模型,但其本质上又是一个线性回归模型。其仅仅是在线性分类之外套了一层sigmoid映射,所以在sigmoid约束后的样本空间内,LR的分割超平面是线性的。所以LR 本质是一个线性分类模型。

这里我们需要注意一下:很多博客将逻辑回归只写成线性分类模型,并举例逻辑回归的分割超平面是线性的来证明线性关系。我觉得有失妥当。以下为个人观点:网友们举例逻辑回归分割超平面是线性的,其样本已经不是原来的样本了,是经过sigmoid函数映射过后的样本了。逻辑回归的分割超平面在原样本空间还是非线性的。按照网友们那种做法,那么带有核函数的SVM模型也是线性模型了,因为在高维空间我们SVM分割超平面总是线性超平面。这里我觉得只能表达出逻辑回归和SVM本质是线性模型,而不能说他们就是线性模型。(欢迎网友来反驳)

为什么LR要使用Sigmod函数?

说到底源于sigmoid的最大熵的性质。熵用在概率分布上可以表示这个分布中所包含的不确定度,熵越大不确定度越大。所以,均匀分布熵最大,因为基本新数据是任何值的概率都均等。而我们现在关心的是,给定某些假设之后,熵最大的分布。也就是说这个分布应该在满足我假设的前提下越均匀越好。比如大家熟知的正态分布,正是假设已知mean和variance后熵最大的分布。回过来看logistic regression,这里假设了什么呢?首先,我们在建模预测 Y|X,并认为 Y|X 服从伯努利分布,所以我们只需要知道 P(Y|X);其次我们需要一个线性模型,所以P(Y|X) = f(wx)。接下来我们就只需要知道 f 是什么就行了。而我们可以通过最大熵原则推出的这个 f,就是sigmoid。可知伯努利分布的指数函数族形式,也即是 1/ (1 + e^-z)

优点

线性回归要求变量服从正态分布,logistic回归对变量分布没有要求。

  1. 适合需要得到一个分类概率的场景,它的输出结果不仅可以用于分类,还可以表征某个样本属于某类别的概率
  2. 计算代价不高,容易理解实现。LR在时间和内存需求上相当高效。它可以应用于分布式数据,并且还有在线算法实现,用较少的资源处理大型数据。
  3. LR对于数据中小噪声的鲁棒性很好,并且不会受到轻微的多重共线性的特别影响。(严重的多重共线性则可以使用逻辑回归结合L2正则化来解决,但是若要得到一个简约模型,L2正则化并不是最好的选择,因为它建立的模型涵盖了全部的特征。

缺点

  1. 容易欠拟合,分类精度不高。
  2. 数据特征有缺失或者特征空间很大时表现效果并不好。

手推公式

  1. 确定分类决策函数

线性二分类模型:

f(x) = \theta^T x

逻辑回归决策函数是将此线性二分类嵌套一个sigmoid函数:

h_{\theta}(x) = sigmoid(f(x)) = \frac{1}{1+e^{-\theta^Tx}}
  1. 推导出loss函数

我们采用似然函数作为模型更新的loss,不过这里我们是最大化似然函数,所以严格意义来说,最后的优化是“最大化”损失函数:

L(\theta) = p(\hat y|X;\theta) = \prod_{i=1}^m p(y^{(i)}|x^{(i)};\theta)
\qquad\qquad \qquad = \prod_{i=1}^m (h_{\theta}(x^{(i)}))^{y^{(i)}} (1-h_{\theta}(x^{(i)}))^{(1-y^{(i)})}

这个损失函数很难求导,于是我们将其取log,变成对数似然函数:

loss(\theta) = log(L(\theta)) = \sum_{i=1}^m y^{(i)}log(h(x^{(i)})) + (1-y^{(i)})log(1-h(x^{(i)}))
  1. 梯度下降(上升)优化问题

sigmoid函数的特殊性质:

\sigma^{\prime}(x) = \sigma(x)(1-\sigma(x))

求梯度:

\frac{d}{d{\theta_i}}loss(\theta) = (y \frac{1}{\sigma(\theta^Tx)}-(1-y)\frac{1}{1-\sigma(\theta^Tx)})\frac{d}{d{\theta_i}}\sigma(\theta^Tx)
\qquad \qquad \qquad \qquad \qquad =(y \frac{1}{\sigma(\theta^Tx)}-(1-y)\frac{1}{1-\sigma(\theta^Tx)})\sigma(\theta^Tx)(1-\sigma(\theta^Tx))\frac{d}{d{\theta_i}}\theta^Tx
= (y(1-\sigma(\theta^Tx))-(1-y)\sigma(\theta^Tx))x_i
= (y-h_{\theta}(x))x_i

注意一会儿有\sum一会儿没有的,其实我们更倾向于不用,采用矩阵相乘的方式更加简洁。只是在表达似然函数,使用\sum更加直观

\theta_i := \theta_j + \alpha(y^{(i)}-h_{\theta}(x^{(i)}))x_j^{(i)}