算法推导、面试、调用——LogisticRegression(LR)

本秂侑毒 提交于 2019-11-29 08:27:46

# 算法解析

> LogisticRegression是线性回归的一个变形,对于线性回归请参阅[线性回归](www)一节

 

LR模型是线性模型处理分类任务的一种,是联系函数$g(\cdot)=sigmoid(\cdot)$时的广义线性模型。二分类任务的预测值$y\in\{0, 1\}$,而线性回归模型的预测值是一个实数,因此必须用一个映射函数将线性回归模型的预测值映射到$\{0, 1\}$。最理想的映射函数为单位阶跃函数$y=\begin{} \end{}$,但是单位阶跃函数并不连续可导,这将对后续求解模型参数带来困难,因此我们通常采取对数几率函数$y=sigmoid(x)=\frac{1}{1+e^{(-x)}}$作为映射函数。**sigmoid(x)函数能将输入值$x$映射到$(0,1)$之间的一个值**,这个值可以作为二分类问题预测值为1、0的概率。

![sigmoid函数图像](_v_images/20190908170933507_1988946760.jpg =400x)

 

LogisticRegression模型:

 

$$f(x_i)=\frac{1}{1+e^{-(w^Tx_i+b)}} $$

令$\beta=(w^Tx_i;b), \hat{x}=(x;1)$,损失函数为:

 

$$L(\beta)=\sum_{i=1}^{N}(-y_i\beta^T\hat{x_i}+ln(1+e^{\beta^T\hat{x_i}}))$$

**损失函数的推导如下:**

 

LR模型为

 

$$y=\frac{1}{1+e^{-(w^Tx+b)}}$$

假设$y$为样本$x$预测值为1的概率(假设为预测值为0的概率也可以,不影响推导),那么$1-y$则是预测值为0的概率。则预测值为1(即$y_i=1$)、0的概率分别为

 

$$ \begin{align}

& P(y_i=1|\hat{x_i};\beta)=\frac{1}{1+e^{-\beta^T\hat{x_i}}}=\frac{e^{\beta^T\hat{x_i}}}{1+e^{\beta^T\hat{x_i}}} \tag{1}\\

& P(y_i=0|\hat{x_i};\beta)=1-\frac{1}{1+e^{-\beta^T\hat{x_i}}}=\frac{1}{1+e^{\beta^T\hat{x_i}}}\tag{2}

\end{align}$$

则结合上述两个公式可得

 

$$ \begin{align}

P(y_i|\hat{x_i};\beta) &= y_i\cdot P(y_i=1|\hat{x_i};\beta)+(1-y_i)\cdot P(y_i=0|\hat{x_i};\beta) \notag \\

&=\frac{y_i\cdot e^{\beta^T\hat{x_i}}+1-y_i}{1+e^{\beta^T\hat{x_i}}} \tag{3}

\end{align}$$

我们使用极大似然法估计参数$\beta$的值,具体方法为最大化参数$\beta$的极大似然函数。则取参数$\beta$的极大似然函数的相反数作为损失函数,那么最小化损失函数等价于最大化$\beta$的极大似然函数。损失函数为:

 

$$L(\beta)=-\sum_{i=1}^{N}lnP(y_i|\hat{x_i};\beta) \\ $$

而结合公式$(3)$得:

 

$$ \begin{align}

L(\beta) &=\sum_{i=1}^{N}-ln\frac{y_i\cdot e^{\beta^T\hat{x_i}}+1-y_i}{1+e^{\beta^T\hat{x_i}}} \notag \\

&= \sum_{i=1}^{N}[-ln(y_i\cdot e^{\beta^T\hat{x_i}}+1-y_i)+ln(1+e^{\beta^T\hat{x_i}})] \notag \\ \notag\\

&=

\begin{cases}

\sum_{i=1}^{N}[-1\cdot \beta^T\hat{x_i}+ln(1+e^{\beta^T\hat{x_i}})] &,y_i=1 \\

\\

\sum_{i=1}^{N}[-0\cdot \beta^T\hat{x_i}+ln(1+e^{\beta^T\hat{x_i}})] &,y_i=0

\end{cases} \notag \\ \notag \\

 

&= \sum_{i=1}^{N}[-y_i\cdot \beta^T\hat{x_i}+ln(1+e^{\beta^T\hat{x_i}})]\notag

\end{align}$$

得到的损失函数是关于$\beta$的高阶可导连续凸函数,可以使用梯度下降法、牛顿法等求解。(求导数为0,然后使用牛顿法求解)

> 牛顿法

> 对$f(x)$进行泰勒展开(展开到二次并舍弃误差)得:$f(x)=f(x_0)+f^{'}(x_0)(x-x_0)$

> 令$f(x)=0$,求解出$x$得:$x=x_0 - \frac{f(x_0)}{f^{'}(x_0)}$

> 如此便得到了牛顿法迭代公式:$x_{k+1} = x_{k} - \frac{f(x_k)}{f^{'}(x_k)}$

 

# 面试题

## 1. LR为什么是线性模型

使用联系函数(或者说映射函数)可以将线性回归变成广义线性模型,使其能拟合一些非线性的数据,而LR就是联系函数取sigmoid函数时的情况。sigmoid函数能将自变量映射到$(0,1)$之间,对于LR来说,当$W^TX>0$时$y=1$,当$W^TX$y=0$,可以看到$W^TX=0$是LR模型隐含的线性分类超平面,因此说LR本质上是一个线性模型。

 

也由于LR属于线性模型,在实际情况中的数据往往不是完全线性的,故大多数情况下LR模型的性能并不好(相比于集成方法等)。

## 2. 推导LR的损失函数

见\<公式推导\>

## 3. LR和SVM的异同

**1. 相同点**

1. LR和SVM都是有监督的分类算法

2. 不考虑核函数,LR和SVM都是线性分类算法

3. LR和SVM都是判别模型

 

**2. 不同点**

1. 损失函数的不同

> - LR采用log loss(对数损失函数)

> - SVM采用hinge loss(合页损失函数)

2. 分类原理的不同

> - LR基于概率理论,通过极大似然估计法估计出参数的值

> - SVM基于几何间隔最大化原理,以最大几何间隔的分类面为最优分类面,从最大间隔出发,转化为求对变量w和b的凸二次规划问题

3. 受到样本的影响不同

> - LR受所有样本影响

> - SVM只受支持向量影响,在支持向量外添加样本点是没有影响的

4. 使用之前对数据的预处理不同

> - LR要先对数据做balancing(因为LR受数据影响较大)

> - SVM要先对数据做normalization标准化(因为SVM依赖数据表达的距离测度)

5. 损失函数的正则不同

> - LR必须主动为损失函数添加正则

> - SVM的损失函数自带正则

## 4. LR和线性回归的异同

 

## 5. LR和SVM的选择

1. 如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM

2. 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel

3. 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况

 

## 6. 为什么一般LR的性能差

LR是线性的,对于非线性的数据拟合效果很差,而实际数据大多不会是完全线性的,这就导致了LR在实际上的性能表现一般。

 

## 6. LR正则项的选择

1. L1正则

2. L2正则

 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!