# 算法解析
> 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的概率。

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正则