逻辑回归多分类与Softmax回归

我们已经知道,普通的logistic回归只能针对二分类(Binary Classification)问题,要想实现多个类别的分类,我们必须要改进logistic回归,让其适应多分类问题。 关于这种改进,**有两种方式**可以做到。 1. **第一种方式**是直接**根据每个类别,都建立一个二分类器**,带有这个类别的样本标记为1,带有其他类别的样本标记为0。假如我们有个类别,最后我们就得到了个针对不同标记的普通的logistic分类器。 2. **第二种方式**是**修改logistic回归的损失函数**,让其适应多分类问题。这个损失函数不再笼统地只考虑二分类非1就0的损失,而是具体考虑每个样本标记的损失。这种方法叫做**Softmax回归**,即logistic回归的多分类版本。 # 第一种方式 对于二分类问题,我们只需要一个分类器即可,但是对于多分类问题,我们需要多个分类器才行。$\mathbf{X} \in \mathbb{R}^{m \times n},$ 它们的标记 $\mathbf{Y} \in \mathbb{R}^{k}$,即这些样本有$k$个不同的类别。 我们挑选出标记为$c(c \leq k)$的样本,将挑选出来的带有标记$c$的样本的标记置为1,将剩下的不带有标记$c$的样本的标记置为0。然后就用这些数据训练出一个分类器,我们得到 $h_c(x)$(表示针对标记$c$的logistic分类函数)。 按照上面的步骤,我们可以得到$k$个不同的分类器。针对一个测试样本,我们需要找到这$k$个分类函数输出值最大的那一个,即为测试样本的标记: ::: hljs-center <font size=5> $\arg \max _{c} h_{c}(x) \quad c=1,2, \cdots, k$ </font> ::: # 第二种方式(Softmax回归) 对于分类,逻辑回归使用的是$sigmoid$函数,将$wx+b$的值映射到$(0, 1)$的区间,输出的结果为样本标签等于1的概率值;而$Softmax$回归采用的是$Softmax$函数,将$wx+b$的值映射到$[0, 1]$的区间,输出的结果为一个向量,向量里的值为样本属于每个标签的概率值. ## $Softmax$函数 我们先来看一下$Softmax$函数,它将非标准化的输入$z_j,j=1,2,3,...,k$, 归一化为概率分布,所以$\sum_{j}^{K}\sigma _j=1$。指数函数将$z_j$的值映射到$(0, +\infty )$,$\sum_{k=1}^{K}e^{z_k}$为归一化常数。 ::: hljs-center <font size=5>$\sigma(\mathbf{z})_{j}=\frac{e^{z_{j}}}{\sum_{k=1}^{K} e^{z_{k}}} \quad$ for $j=1, \ldots, K$</font> ::: $Softmax$建模使用的分布是分类分布,当仅有两种类别时就是伯努利分布,也就是logistic所使用的分布。 **下面我们来看一下$Softmax$回归。** 为了对应输出的结果为一个向量,需要对样本的标签值要进行one-hot编码。例如,现在有三类样本,分别为红,绿和蓝。假设样本x的标签为红,进行one-hot编码以后该样本的标签就为$[1,0,0]$,一个长度等于类别数目,只有该样本所对应的标签为1,其他类别标签都为0的向量. 假设对于样本 $\{(x_1, y_1)\},(x_2, y_2),...,(x_m, y_m)\}$,样本有K个类别,即 $y_i \in\{1,2, \ldots, k\}$ ; $Softmax$回归主要是估算对于输入样本 $x^{(i)}$ 属于每一类别的概率,所以softmax回归的假设函数如下: **假设函数$h_\theta {(x)}$:** ::: hljs-center <font size=5>$h_{\theta}\left(x_{i}\right)=\left[\begin{array}{c}p\left(y_{i}=1 \mid x_{i} ; \theta\right) \\ p\left(y_{i}=2 \mid x_{i} ; \theta\right) \\ \vdots \\ p\left(y_{i}=k \mid x_{i} ; \theta\right)\end{array}\right]=\frac{1}{\sum_{j=1}^{k} e^{\theta_{j}^{T} x_{i}}}\left[\begin{array}{c}e^{\theta_{1}^{T} x_{i}} \\ e^{\theta_{2}^{T} x_{i}} \\ \vdots \\ e^{\theta_{k}^{T} x_{i}}\end{array}\right]$</font> ::: $\theta _1,\theta _2,\theta _3,...,\theta _k$为模型参数,一共有$k$个类别。<font color=red>其中每一$\textstyle \theta_j$为一个向量</font>,表示类别等于$j$ 时的每个特征分量的权重。 **对数损失函数 :** $1_{y_i=j}$为指示函数,当样本的标签等于要计算的标签时(即$y_i=j$时)为1,否则为0。 ::: hljs-center <font size=5>$L(\theta)=-\sum_{i=1}^{l} \sum_{j=1}^{k}\left(1_{y_{i}=j} \log \frac{\exp \left(\theta_{j}^{\top} x_{i}\right)}{\sum_{t=1}^{k} \exp \left(\theta_{t}^{\top} x_{i}\right)}\right)$</font> ::: ## 采用梯度下降法跟新参数,对参数求偏导: ::: hljs-center <font size=5>$\nabla_{\theta_{j}} L(\theta)=\sum_{i=1}^{l}\left(x_{i}\left(1_{y_{i}=j}-p\left(y_{i}=j \mid x_{i} ; \theta\right)\right)\right)$</font> ::: ::: hljs-center <font size=5>$p\left(y_{i}=j \mid x_{i} ; \theta\right)=\log \frac{\exp ^{\left(\theta_{j}^{T} x_{i}\right)}}{\sum_{t=1}^{K} \exp ^{\left(\theta_{t}^{T} x_{i}\right)}}$</font> ::: 这时,$Softmax$回归在求解参数时最小化的解不止一个。 假设我们从参数向量 $\textstyle \theta_j$ 中减去了向量 $\textstyle \psi$,这时,每一个 $\textstyle \theta_j$ 都变成了 $\textstyle \theta_j - \psi(\textstyle j=1, \ldots, k)$。此时假设函数变成了以下的式子: ::: hljs-center <font size=5>$\begin{aligned} p\left(y_{i}=j \mid x_{i} ; \theta\right) &=\frac{e^{\left(\theta_{j}-\psi\right)^{T} x_{i}}}{\sum_{l=1}^{k} e^{\left(\theta_{l}-\psi\right)^{T} x_{i}}} \\ &=\frac{e^{\theta_{j}^{T} x_{i}} e^{-\psi^{T} x_{i}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x_{(i)} e^{-\psi^{T} x_{i}}}} \\ &=\frac{e^{\theta_{j}^{T} x_{i}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x_{i}}} \end{aligned}$</font> ::: 从上面的推导,我们可以看到推导出的结果和原来参数$\textstyle \theta_j$未减去$\textstyle \psi$的结果是相等的(见红方框)。换句话说,从$\theta _j$中减去$\textstyle \psi$完全不影响假设函数的预测结果。这表明**此时的$Softmax$回归模型中存在冗余的参数**。更正式一点来说,$Softmax$模型被过度参数化了。对于任意一个用于拟合数据的假设函数,可以求出多组参数值,这些参数得到的是完全相同的假设函数。 进一步而言,如果参数$(\theta _1,\theta _2,\theta _3,...,\theta _k)$是损失函数的极小值,那么$(\theta _1-\varphi ,\theta _2-\varphi,\theta _3-\varphi,...,\theta _k-\varphi)$同样也是它的极小值点,其中$\varphi$可以是任意向量。因此是损失函数最小化的解不是唯一的。感觉这个和SVM里面的函数间隔很像,函数间隔可以对参数成比例的变化,但是得到的超平面并没有变。(有趣的是,由于损失函数仍然是一个凸函数,因此梯度下降时不会遇到局部最优解的问题。但是Hessian矩阵是不可逆的,这会直接导致采用牛顿优化就遇到数值计算的问题) 为了解决这个问题,可以添加权重衰减项$\frac{\lambda }{2}\sum_{i=1}^{k}\sum_{j=0}^{n}\theta_{ij}^2$来约束参数, $n$为样本的维度,$k$为样本的类别数,**感觉这个就是L2正则化**,所以还可以防止过拟合。加了权重衰减项以后的对数损失函数为: ::: hljs-center <font size=5>$L(\theta )=-\sum_{i=1}^{l}\sum_{j=1}^{k}\left ( 1_{y_{i}=j}log\frac{exp(\theta _j^Tx_i)}{\sum_{t=1}^{k}exp(\theta _t^Tx_i)} \right )+\frac{\lambda }{2}\sum_{i=1}^{k}\sum_{j=0}^{n}\theta_{ij}^2$</font> ::: 这个时候损失函数为严格的凸函数,可以保证收敛到全局的最优解。 **对参数求偏导:** ::: hljs-center <font size=4>$\bigtriangledown _{\theta _j}L(\theta )=\sum_{i=1}^{l}(x_i(1_{y_i=j}-p(y_i=j|x_i;\theta )))+\lambda \theta _j$</font> ::: 然后使用梯度下降法迭代求解参数。 # 二者使用区别 其实在做多分类是也可以使用oneVSall方法,建立多个独立的逻辑回归模型。但这两中方法在使用场景下有些许区别。 - **$Softmax回归$:** 适用于样本的**标签互斥**的情况。比如,样本的标签为,房子,小车和自行车,这三类之间是没有关系的。样本只能是属于其中一个标签。 - **逻辑回归:** 使用于样本的**标签有重叠**的情况。比如:外套,大衣和毛衣,一件衣服可以即属于大衣,由属于外套。这个时候就需要三个独立的逻辑回归模型。 --- 转载:[softmax回归](https://blog.csdn.net/zx1245773445/article/details/85627427)