Logistic 回归
1.算法概述
在 《线性回归》一文中,我们提到过广义线性模型,通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。 而 Logistic 回归是广义线性回归中的重要代表,同线性回归中讲到的一样,因为简单容易实现,也具有很好的解释性,Logistic 在二分类的场景应用中几乎是使用最多的。
Logistic 回归虽然名字里带 “回归”,但它实际上是一种分类方法,即 LR 分类器(Logistic Regression Classifier),其数学模型是一个 sigmoid 函数,因图像像 S,又经常称之为 S 形曲线,sigmoid 本身就是 S 形的意思。
sigmoid 函数:
$$g(z)=\frac{1}{1+e^{-z}}$$
sigmoid 函数图像:
由于 sigmoid 函数的定义域是 (-INF, +INF),而值域为 (0, 1)。Logistic 回归通过 sigmoid 连接函数可以将变量映射到 (0, 1) 之间,这也是为什么最基本的 LR 分类器适合于对二分类(类 0,类 1)目标进行分类。
我们令 $z=\theta^{T}x$,便可得到 Logistic 函数:
$$h_\theta(x)=g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}}$$
注,Logistic 函数和 sigmoid 本质是一样的,有时候也会写成一样的形式。
对 sigmoid 函数求导可得:
$$\begin{align} g'(x)&=\left ( \frac{1}{1+e^{-x}}\right)’=\frac{e^{-x}}{(1+e^{-x})^2}\\&=\frac{1}{1+e^{-x}}\cdot \frac{e^{-x}}{1+e^{-x}}\\&=\frac{1}{1+e^{-x}}\cdot \left( 1-\frac{1}{1+e^{-x}}\right)\\&=g(x)\cdot(1-g(x)) \end{align}$$
2.算法推导
上一小节末尾,对 sigmoid 函数求导得到了”$g(x) \cdot (1-g(x)) $“,这个结果似乎有点熟悉,有点像对立事件的联合概率,在抛硬币试验中经常看到。实际上,LR 目标函数的确立,就是转变成了概率形式表达的,具体如何转变的呢?我们先从对数线性模型说起。
2.1.对数线性模型
几率(odds):一个事件的几率,是指该事件发生的概率与该事件不发生的概率的比值。
我们可以把二分类问题当做一个事件,那么被分到 “类 1” 的概率和 “类 0” 的概率可以分别表示为:
$$P(y=1|x;\theta)=h_\theta(x)$$
$$P(y=0|x;\theta)=1-h_\theta(x)$$
则二分类几率为:
$$odds = \frac{p}{1-p}=\frac{h_\theta(x)}{1-h_\theta(x)}$$
对数几率:也就是对几率取对数,称为 logit 函数。
那么二分类的对数几率为:
$$ \begin{equation}\begin{split} log it(p)&=\log\frac{p}{1-p}=\log\frac{h_\theta(x)}{1-h_\theta(x)}\\&=\log\lgroup\frac{\frac{1}{1+e^{-\theta^Tx}}}{\frac{e^{-\theta^Tx}}{1+e^{-\theta^Tx}}}\rgroup\\&=\theta^Tx\end{split}\end{equation} \\$$
由上面的公式可以证名上面二分类的几率的对数是线性的,也是一个线性模型,只不过是建立在对数上的,所以称之为对数线性模型,它是一个广义线性模型(GLM)。
我们令 $z=\theta^Tx$,然后对对数几率进行变换,得到
$$\log\frac{p}{1-p}=z \to p=\frac{1}{1+e^{-z}}$$
发现最后的结果就是 sigmoid 函数,而且 sigmoid 取值范围是 [0, 1],满足加和为 1(通过 $h_\theta(x)$和 $1-h_\theta(x)$自定义实现) ,都能够解释将 sigmoid 看做概率的合理性。
实际上,Logistic 回归是正是利用 logit 函数将普通的线性模型变换成为了广义线性模型,实现了自变量和因变量的非线性映射,logit 函数正是 Logistic 回归这个广义线性模型的连接函数。因此,Logistic 回归有时也会称作对数几率回归。
2.2.损失函数
既然可以转化成概率,那么便可以利用最大似然估计(MLE)来写出目标函数:
$$ \begin{equation}\begin{split} L(\theta)&=p(\vec{y} | X; \theta)\\&=\prod_{i=1}^{m}p(y_i|x_{i};\theta) \\&=\prod_{i=1}^{m}(h_\theta(x_{i}))^{y_{i}}(1-h_\theta(x_{i}))^{1-y_{i}}\end{split}\end{equation}$$
接下来就是求解 MLE 的老套路,取对数加负号,然后代入 $h_\theta(x)$,可以得到 LR 的损失函数,即对数损失:
$$ \begin{equation}\begin{split} J(\theta)&=loss(h_\theta(x_i), y_i)\\&=-\frac{1}{m}l(\theta)\\&=-\frac{1}{m}\sum_{i=1}^m(y_i\log h_\theta(x_i)+(1-y_i)\log(1-h_\theta(x_i)))\end{split}\end{equation}$$
在周志华版的机器学习中,将 sigmiod 函数代入 $h_{\theta}(x_i)$,并使用 ln 代替 log,上述公式还可以继续化简为:
$$\begin{aligned} J(\theta) &= – \frac{1}{m} \sum_{i=1}^m \left [ y_i \ln h_{\theta}(x_i) + (1-y_i) \ln(1-h_{\theta}(x_i) \right ]\\ &=- \frac{1}{m} \sum_{i=1}^m \left [ y_i\ln \frac{1}{1+e^{-\theta^T x_i}}+(1-y_i)\ln \frac{e^{-\theta^T x_i}}{1+e^{-\theta^T x_i}}\right ]\\ &=- \frac{1}{m} \sum_{i=1}^m \left [ \ln \frac{1}{1+e^{\theta^T x_i}} + y_i \ln \frac{1}{e^{-\theta^T x_i}}\right ]\\ &= \frac{1}{m} \sum_{i=1}^m \left [ -y_i \theta^T x_i + \ln(1+e^{\theta^T x_i})\right ] \end{aligned}$$
注意:
- 线性回归中的损失函数是均方误差,而 LR 中的损失函数用的是负对数似然(Negative Log-Likelihood,NLL),其实他们都是通过最大似然估计推导而来。
- 一般似然求最大,而损失函数求最小,所以给对数似然加负号,变成负对数似然。不过,业界习惯上依然将 Logistic 回归的损失函数称为对数损失,即对数似然损失 (Log-likelihood Loss), 也有人会称为逻辑斯谛回归损失 (Logistic Loss)。
- 对数损失等价于交叉熵损失(cross-entropy Loss),都是在概率估计上定义的,交叉熵损失可见 《机器学习中的各种熵》中的交叉熵。
- 对数损失(交叉熵损失)主要用于评估分类器的概率输出,十分常见,比如树模型、神经网络中都会用到,有时也会用于一些求期望极大算法的变体。
- 有时为了分类更方便辨别,会把 $y_i$的取值映射到 {-1,1},即 $y_i \in \{-1, 1\}$,这里的 {-1,1} 不是区间,而是-1 和 1 两个值。
- 损失函数中 $\frac{1}{m}$对结果没影响,有时候为了方便可以去掉。
3.参数优化
3.1.梯度下降法(Gradient Descent)
LR 的参数优化依然可通过梯度下降法来求得,先对损失函数求导:
$$\begin{aligned} &\frac{\delta}{\delta_{\theta_{j}}}J(\theta)=-\frac{1}{m}\sum_{i=1}^{m}\Bigg(y_{i}\frac{1}{h_{\theta}(x_{i})}\frac{\delta}{\delta\theta_{j}}h_{\theta}(x_{i})-(1-y_{i})\frac{1}{1-h_{\theta}(x_{i})}\frac{\delta}{\delta\theta_{j}}h_{\theta}(x_{i})\Bigg) \\ &=-\frac{1}{m}\sum_{i=1}^{m}\Bigg(y_{i}\frac{1}{g(\theta^{\mathrm{T}}x_{i})}-(1-\mathrm{y}_{i})\frac{1}{1-g(\theta^{\mathrm{T}}x_{i})}\Bigg)\frac{\delta}{\delta\theta_{j}}g(\theta^{\mathrm{T}}x_{i}) \\ &=-\frac{1}{m}\sum_{i=1}^{m}\Bigg(y_{i}\frac{1}{g(\theta^{\mathrm{T}}x_{i})}-(1-y_{i})\frac{1}{1-g(\theta^{\mathrm{T}}x_{i})}\Bigg)g(\theta^{\mathrm{T}}x_{i})(1-g(\theta^{\mathrm{T}}x_{i}))\frac{\delta}{\delta\theta_{_j}}\theta^{\mathrm{T}}x_{_i} \\ &=-\frac{1}{m}\sum_{i=1}^{m}\Big(y_{i}(1-g(\theta^{\mathrm{T}}x_{i}))-(1-y_{i})g(\theta^{\mathrm{T}}x_{i})\Big)x_{i}^{j} \\ &=-\frac{1}{m}\sum_{i=1}^{m}\Bigl(y_{i}-g(\theta^{\mathrm{T}}x_{i})\Bigr)x_{i}^{j} \\ &=\frac1m\sum_{i=1}^{m}\bigl(h_{\theta}(x_{i})-y_{i}\bigr)x_{i}^{j} \end{aligned}$$
最终得到 $\theta$的迭代公式,可以发现与线性回归的结论具有相同的形式,接下来选择一种梯度变种算法迭代优化即可,下面是 BGD 的例子:
$$\theta_j:= \theta_j-\alpha \frac{1}{m}\sum_{i=1}^m(h_\theta(x_i)-y_i)x_i^j$$
3.2.感知器算法(The perceptron learning algorithm)
逻辑回归通过输出 0~1 的概率值,拐了个弯来做分类,感知器算法则直接输出 0 或 1 的离散值,下面是其假设: $$h_\theta(x)=g(\theta^Tx)=\left\{\begin{array}\\0 &if(\theta^T>0)\\1&otherwish\end{array}\right.$$
通过与梯度下降同样的迭代,即可得到感知器算法。感知器算法是神经网络的基础,它会被作为分析的起点。
3.3.牛顿法(Newton’s method)
在这里提出牛顿法是因为它跟梯度法一样,可以用来求解最大化似然函数 $l(\theta)$的问题,而且往往牛顿法的收敛速度更快。 牛顿方法本身是一个求解多项式实根的迭代法,如 $f(x)=4x^3+2x^2+x+1$是一个难解的高次多项式,如果要求其 $f(x)=0$的实根,牛顿法是一个不错的选择。下面配图以说明牛顿法的思想:
如上图所示:
随机初始化一个值,此处令 $\theta^{(0)}=4.5$为初始值,在 $f(\theta^{(0)})$处做一条切线与 x 轴相交,令该切线与 x 轴的交点为 $\theta^{(0)}$的迭代值,此处为 $\theta^{(1)}=2.8$,在 $f(\theta^{(1)})$处再做切线,再取该切线与 x 轴的交点做迭代,直到 $f(\theta^{(n)})=0$,该 $\theta^{(n)}$即为 $f(\theta)$的实根。
下面推导其迭代规则:令 $\Delta=\theta^{(0)}-\theta^{(1)}$,我们可以得到 $f(\theta)$在 $\theta^{(0)}$处切线的斜率为 $f{‘}(\theta^{(0)})=\frac{f(\theta^{(0)})}{\Delta}$,由此可以得到 $\Delta=\frac{f(\theta^{(0)})}{f{‘}(\theta^{(0)})}$,从而有 $\theta^{(1)}=\theta^{(0)}-\Delta=\theta^{(0)}-\frac{f(\theta^{(0)})}{f{‘}(\theta^{(0)})}$,化为更一般的情况我们就有了迭代规则: $$\theta^{(n+1)}=\theta^{(n)}-\frac{f(\theta^{(n)})}{f{’}(\theta^{(n)})}$$
那么我们如何把牛顿法应用在最大化 $l(\theta)$的问题上呢? 上面我们说到,牛顿法是用来求解 $f(\theta)=0$的解的,相对应的,我们原来是如何使 $l(\theta)$最大化的? 之前的方法都是对 $l(\theta)$求导并使其导数为 0,即 “$l’(\theta)=0$”。 所以我们只要令 $f(\theta)=l’(\theta)$,并求解出 $\theta$,即可使 $l’(\theta)$最大化。此时的迭代规则为: $$\theta^{(n+1)}=\theta^{(n)}-\frac{l'(\theta)^{(n)}}{l”(\theta)^{(n)}}$$
上面是 $\theta$是实数的情况,当 $\theta$是向量时,迭代规则如下: $$\theta^{(n+1)}=\theta^{(n)}-H^{-1}\nabla_\theta l(\theta)$$
其中 $H$是函数 $l(\theta)$的二次导数矩阵,被称为 Hessian 矩阵,矩阵中每一个元素的值为: $$H_{ij}=\frac{\partial^2l(\theta)}{\partial\theta_i\partial\theta_j} $$
$H$是一个 $n \times n$矩阵,$n$是向量参数 $\theta$ 的长度。 牛顿法相比起梯度往往法收敛速度更快,特别是迭代值距离收敛值比较近的时候,每次迭代都能使误差变成原来的平方,但是在高维时矩阵 $H$的逆计算会非常耗时。
3.4.特征预处理
Logistic 回归算法本身特征处理和特征选择能力比较弱,除了数据本身外,其模型性能非常依赖特征工程。所以在应用 Logistic 回归算法之前,常常需要对特征进行预处理,以提高模型性能和准确性。下面是一些常用的特征预处理方法:
- 特征缩放(Feature Scaling):对于 Logistic 回归算法,特征缩放是一种常见的预处理方法。由于 Logistic 回归使用了 Sigmoid 函数作为激活函数,特征缩放可以将特征值映射到一个较小的范围,避免某些特征对模型的影响过大。常见的特征缩放方法包括标准化(Standardization)和归一化(Normalization)。
- 特征编码(Feature Encoding):如果特征是分类变量,通常需要将其转换为数值表示。常用的特征编码方法包括 One-Hot 编码和 Label Encoding。One-Hot 编码将每个类别转换为一个独立的二进制特征,而 Label Encoding 将每个类别映射为一个整数值。
- 处理缺失值(Handling Missing Values):如果特征中存在缺失值,需要进行适当的处理。常见的方法包括删除包含缺失值的样本、使用均值或中位数填充缺失值,或者使用其他预测模型来估计缺失值。
- 处理异常值(Handling Outliers):异常值可能对模型的性能产生影响,需要进行适当的处理。可以选择删除异常值、替换为特定值或使用其他异常值处理方法。
- 特征离散化(Feature Discretization):特征离散化是将连续特征转换为离散特征的过程。可以通过将连续值分成不同的区间或使用基于阈值的方法来实现。离散化的主要目的是将连续特征转换为有限数量的离散取值,以便更好地适应某些模型或算法的需求。离散化可以提高模型的鲁棒性,减少异常值的影响,并将连续特征的非线性关系转换为线性关系。常见的离散化方法包括等宽离散化(Equal-Width Discretization)和等频离散化(Equal-Frequency Discretization)。
- 特征升维(Feature Expansion):特征升维是指通过创建新的特征来扩展原始特征空间的维度。它可以通过多项式特征扩展、交互特征生成以及基于特征转换的方法来实现。特征升维的目的是引入更多的特征组合和非线性关系,以增强模型的表达能力。通过引入更多的特征,特征升维可以在一定程度上解决特征间的非线性关系,并提高模型的性能和预测能力。然而,特征升维也可能增加模型的复杂性和计算成本。
- 特征选择(Feature Selection):在 Logistic 回归中,选择合适的特征可以提高模型的性能和解释性。特征选择方法包括基于统计指标的方法(如方差选择、相关性选择)、正则化方法(如 L1 正则化、L2 正则化)以及基于特征重要性的方法(如基于树模型的特征重要性)。
- 数据平衡(Data Balancing):如果数据集中的样本类别存在不平衡,可以使用一些方法来平衡数据,例如欠采样、过采样或生成合成样本的方法。
4.算法拓展
4.1.多分类模型 softmax 回归
logistic 回归模型在多分类问题上进行推广,就是 Softmax 回归模型,该模型同样是应用广泛,在是卷积神经网络中经常作为最后一层用来进行多分类,计算机视觉深度学习领域中的很多算法都有 Softmax 回归的参与。
实际上作为二分类的 Logistic 回归也可以处理多分类问题,同 SVM 一样,所有二分类问题都可以变向地解决多分类问题,具体方法以后再讲。
4.1.1.算法推导
二分类问题的标记值只有两种结果,而多分类问题则可以取 K 个不同的值,多分类问题的概率通过 softmax 函数表示。
softmax 函数:
$$h_\theta(x^{(i)})=p(y^{(i)}=k|x^{(i)}; \theta)=\frac{\exp(\theta_k^T)}{\sum_{l=1}^K\exp(\theta_l^Tx^{(i)})}$$
其中,K 表示 K 个分类,k 表示第 k 类,其对应的参数是 $\theta_k$,
所有的 $\theta$组成一个二维矩阵 $\theta_{K\times N}$,$K$是类别总数,$N$是样本维度,需要注意的是,这里的 $K \times N$ 实际上冗余一个参数,因为 K 分类的自由度是 $(K-1) \times N$,因此参数个数严格来讲应该是,$(K-1) \times N$,详见下文 “softmax 回归和 logistic 回归之间的联系 “ 。
重点:
- softmax 函数转换概率的思路是评价每个类别,然后做归一化,这样每个输出都映射到 0~1 区间;
- $h_\theta(x)$表示的是 x 属于不同类别的概率组成的向量,哪个类别对应的概率大,就可能是哪个类别 ,即 $h_\theta(x^{(i)}) = \max{p(y^{(i)}=k|x^{(i)}; \theta)}$ ;
- Logistic 回归处理的是伯努利分布,而 softmax 回归处理的是多项式分布。
4.1.2.损失函数
根据最大似然估计来建立目标函数,我们认为每个样本都是独立且互斥的(假设空间),故所有样本的概率全部乘起来,其中某个θ使得概率最大,就是似然函数:
$$L(\theta)=\prod_{i=m}^m\prod_{k=1}^Kp(y^{(i)}=k|x^{(i)};\theta)^{y_k^{(i)}}=\prod_{i=m}^m\prod_{k=1}^K(\frac{\exp(\theta_k^Tx^{(i)})}{\sum_{l=1}^K\exp(\theta_l^Tx^{(i)})})^{y_k^{(i)}}$$
注:$y_k^{(i) }$ 表示第 $i$个样本,第 $k$个类别的标记值,$y^{(i) }$ 是个向量,第 $i$个样本有 $k$个 one-hot 编码,所以只有真正符合第 k 类的那个值概率是取 1 的,其他都取 0,比如 $k=3$,当 $i=3$时,$y_k^{(i)}=1$,$i$为其他值的时候都为 0。所以,公式中整体看起来是个乘积,但是因为其他类别的标记值都是 0,0 次幂的结果实际是 1,乘 1 是没有影响的。
最大化似然函数,也就是最小化负对数似然函数,对似然函数加负号取对数,得到 Softmax 的损失函数:
$$\begin{equation}\begin{split} J_m(\theta)&=-\frac{1}{m}\ln L(\theta)\\&=-\frac{1}{m}\left [\sum_{i=1}^m\sum_{k=1}^K y^{(i)}_k \cdot \log p(y^{(i)}=k|x^{(i)};\theta)\right ]\\&=-\frac{1}{m}\left [\sum_{i=1}^m\sum_{k=1}^K y^{(i)}_k \cdot \log \frac{\exp(\theta_k^Tx^{(i)})}{\sum_{l=1}^K\exp(\theta_l^Tx^{(i)})}\right ]\\&=-\frac{1}{m}\left [\sum_{i=1}^m\sum_{k=1}^K y^{(i)}_k \cdot \left (\theta^T_kx^{(i)}-\ln\sum_{l=1}^K\exp(\theta^T_lx^{(i)})\right)\right ]\end{split}\end{equation} $$
4.1.3.参数优化
一般使用梯度下降优化算法或者牛顿法来最小化损失函数,这里以梯度下降为例,$J(\theta)$对 $\theta_k$求偏导,得到,
$$\begin{equation}\begin{split}\frac {\nabla J(\theta)} {\nabla \theta_k} &= -\frac 1 m\sum_{i=1}^m \left [ \frac {\nabla\sum_{k=1}^K y^{(i)}_k\theta_k^T x^{(i)}} {\nabla \theta_k} – \frac {\nabla \sum_{k=1}^K y^{(i)}_k \ln(\sum_{l=1}^K \exp{(\theta_l^T x^{(i)}}))} {\nabla \theta_k} \right]\\& = -\frac 1 m\sum_{i=1}^m \left [ y^{(i)}_k x^{(i)} – \frac {\nabla\sum_{k=1}^K y^{(i)}_k\sum_{l=1}^K\exp{(\theta_l^T x^{(i)})}} {\sum_{l=1}^K \exp{(\theta_l^T x^{(i)})}\nabla \theta_k} \right] \\&=-\frac 1 m\sum_{i=1}^m \left [ y^{(i)}_kx^{(i)} – \frac {x^{(i)}\exp{(\theta_k^T x^{(i)})}} {\sum_{l=1}^K\exp{(\theta_l^Tx^{(i)})}} \right]\\&= -\frac 1 m\sum_{i=1}^m x^{(i)}\left [ y^{(i)}_k – p(y^{(i)}=k|x^{(i)};\theta) \right]\end{split}\end{equation} $$
接下来可选一种随机梯度下降变种方法,对 $\theta_k$进行迭代更新即可,以下以随机梯度下降为例:
$\theta_k:=\theta_k-\alpha\nabla_{\theta_k}J(\theta; x^{(i)};y^{(i)})$,
4.1.4.softmax 回归和 logistic 回归之间的联系
logistic 回归损失函数是 softmax 损失函数的特殊情况。因此,logistic 回归损失函数可以改为:
$$ \begin{equation}\begin{split} J(\theta)&=-\frac{1}{m}\sum_{i=1}^m(y_i\log h_\theta(x_i)+(1-y_i)\log(1-h_\theta(x_i)))\\&=-\frac{1}{m}\left [\sum_{i=1}^m\sum_{k=1}^K y^{(i)}_k \cdot \log p(y^{(i)}=k|x^{(i)};\theta)\right ]\end{split}\end{equation}$$
同样的,当类别数 $K = 2$时,softmax 回归退化为 logistic 回归。这表明 softmax 回归是 logistic 回归的一般形式。
为什么二分类中参数只有一个 $\theta$向量,而 k 分类中参数却有 K 个 $\theta$n 向量。
其实二分类中的是 y=1 情况下的参数,而 y=0 情况下其实未给出参数,因为 y=0 的假设函数值可以通过 1-(y=1 的假设函数值) 得到,也就是二分类的自由度是 $(2-1)\times N$。同理,K 分类自由度 $(K-1) \times N $,也就是参数其实只需要 $(K-1)\times N$个参数就可以了,多余的一个参数是冗余的。不过,这个多余出来的参数对结果没有影响。
@One-Hot 编码
什么是 One-Hot
One-Hot 编码,又称为一位有效编码,主要是采用 N 位状态寄存器来对 N 个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。
One-Hot 编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为 1。
One-Hot 编码示例
让我们用一个小例子来说明一下到底什么是 One-Hot 编码。假设我们有一个带有
red
和green
值的标签序列。我们可以将red
的整数值分配为 0,green
的整数值为 1。只要我们总是将这些数字分配给这些标签,这称为整数编码。一致性是重要的,所以我们可以稍后反转编码,并从整数值获取标签。接下来,我们可以创建一个二进制向量来表示每个整数值。对于 2 个可能的整数值,向量的长度为 2。
编码为 0 的
red
标签将用二进制向量 [1,0] 表示,其中第 0 个索引被标记为值 1。然后,编码为 1 的green
标签将用一个二进制向量 [0,1],其中第一个索引被标记为 1。假设有一个字符串类别型序列:
‘red’,‘red’,‘green’
我们可以用整数编码来表示它:
0,0,1
而 One-Hot 编码就为:
[1, 0], [1, 0], [0, 1]
为什么要使用 One-Hot 编码
One-Hot 编码是一种常用的特征编码方式,在机器学习和数据分析中经常被使用。它的主要目的是将具有离散取值的特征变量转换为机器学习算法可以直接处理的数值表示。
使用 One-Hot 编码的主要原因:
1)保留分类特征的信息:在某些情况下,特征的取值具有分类或离散的性质,使用原始的数值进行建模可能会引入误解。One-Hot 编码将每个类别转换为一个二进制特征,能够更好地反映分类特征的本质。
2)适用于无序分类特征:One-Hot 编码适用于具有无序分类特征的情况。使用整数编码可能会给模型带来误导,因为整数编码会引入了一个假设,即特征的不同取值之间存在有序关系。而 One-Hot 编码消除了这种假设,每个类别之间是独立的二进制特征。
3)避免特征权重偏置:在某些机器学习算法中,特征的数值大小会影响模型的权重分配,从而引入偏差。使用 One-Hot 编码可以避免这个问题,因为每个类别都被表示为独立的二进制特征。
4)改善算法性能:某些机器学习算法,特别是基于距离度量的算法(如 k 近邻算法),对于连续数值特征更敏感。通过使用 One-Hot 编码,可以将分类特征转换为数值特征,从而改善算法的性能。
尽管 One-Hot 编码有其优点,但它也会增加特征维度,可能导致高维稀疏数据,特别是当类别数量较多时。在这种情况下,可以考虑使用其他编码技术或特征选择方法来处理高维数据。
4.2.广义线性回归
4.2.1.指数族分布
指数族分布 (exponential family of distributions)亦称指数型分布族, 指数分布族是指可以表示为指数形式的概率分布。指数分布的形式如下:
$$P(y;\eta)=b(y)\exp(\eta^{T}T(y)-a(\eta))$$
其中,$η$成为分布的自然参数(nature parameter);
$T(y)$是充分统计量(sufficient statistic),通常 $T(y)=y$。
当参数 $a$、$b$、$T$ 都固定的时候,就定义了一个以 $η$为参数的函数族。
说明:
- exp 前面的是为了归一化,加了一个归一化系数!
- exp 后面的部分就相当于 g(x),
- 自然参数又称为连接函数(不一定规范)
4.2.2.构造广义线性模型
广义线性模型(Generalize Llinear Model,GLM)是线性模型的扩展,通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型实质上是假设误差或因变量服从指数族分布,下图是常见的指数族分布以及对应的连接函数(注:连接函数在也被称为联系函数)。
除了高斯分布与伯努利分布,大多数的概率分布都能表示成指数分布族的形式,如多项式分布(Multinomial),对有 K 个离散结果的事件建模;泊松分布(Poisson),对计数过程进行建模,如网站访问量的计数问题;指数分布(Exponential),对无记忆性质事件的等待时间或间隔进行建模,如预测公交车的到站时间的问题;等等,然后通过进一步的推导,就能得到各自的线性模型,这大大扩展了线性模型可解决问题的范围。
下面是 GLM 的三个假设:
- $y\mid x;\theta~ExponentialFamily(\eta)$:固定参数 $\theta$,在给定 $x$ 的情况下,$y$服从指数分布族(The exponential family)中以 $\eta$为参数的某个分布。
- 给定一个 $x$,我们需要的目标函数为 $h_\theta(x)=E\left[T(y)\mid x;\theta\right]$,后者为该分布的期望。
- 令 $\eta=\theta^Tx$。
前面我们已经接触过线性回归、Logistic 回归以及 Softmax 回归,接下来我们就从广义线性模型的假设入手,再梳理一遍这几个模型。
4.2.3.线性回归模型在广义线性模型下的推导
线性回归我们是通过对高斯分布的概率解释来获得确信的 $J(\theta)$的,那我们就尝试着将高斯分布放在广义线性模型下推导,看看能做出来什么模型。 首先我们看向 GLM 的第一点假设,将高斯分布表示成指数分布族的形式:
$$\begin{align} p(y;\mu)&=\frac{1}{\sqrt{2\pi}\sigma}\exp(-\frac{(y-\mu)^2}{2\sigma^2})\\ &=\frac{1}{\sqrt{2\pi}\sigma}\exp(-\frac{1}{2}y^2)\cdot \exp(\mu y-\frac{1}{2}\mu ^2) \end{align}$$
其中:
$$\begin{align} \eta&=\eta^T=\mu\\ T(y)&=y\\ a(\eta)&=\frac{1}{2}\mu ^2=\frac{1}{2}\eta ^2\\ b(y)&=\frac{1}{\sqrt{2\pi}\sigma}\exp(-\frac{1}{2}y^2) \end{align}$$
这就正好表示成了指数分布族的形式,符合了第 1 点假设的要求,接下来我们看向第二点假设,使我们的假设函数等于高斯分布的期望:
$$\begin{align} h_\theta(x)&=E\left[T(y)\mid x;\theta\right]\\ &=E\left[y\mid x;\theta\right]\\ &=\mu\end{align}$$
最后我们看向第三点假设,令 $\eta=\theta^Tx$,又根据上面 $\eta=\mu$,则:
$$\begin{align} h_\theta(x)&=\mu=\eta=\theta^Tx \end{align}$$
就这样得到了线性回归的公式。
4.2.4.Logistic 回归模型在广义线性模型下的推导
Logistic 回归的假设里是用到了伯努利分布的,我们同样地将伯努利分布放在广义线性模型下进行推导,看看是不是能得到 Logistic 回归的 $h_\theta(x)$。 还是从第一点看起,把伯努利分布表示成指数分布族的形式:
$$\begin{align} p(y;\phi)&=\phi^y(1-\phi)^{1-y}\\ &=(e^{\log\phi})^y(e^{\log(1-\phi)})^{1-y}\\ &=\exp(y\log\phi+(1-y)\log(1-\phi))\\ &=\exp((\log\frac{\phi}{1-\phi})y+\log(1-\phi))\end{align}$$
相应的参数为:
$$\begin{align} \eta&=\log\frac{\phi}{1-\phi}\Longrightarrow\phi=\frac{1}{1+e^{-\eta}}\\ T(y)&=y\\ a(\eta)&=-\log(1-\phi)=\log((1-\phi)^{-1})=\log(1+e^\eta)\\ b(y)&=1\end{align}$$
接下来执行第二点与第三点,令假设函数 $h_\theta(x)$等于伯努利函数的期望,并且令 $\eta=\theta^Tx$:
$$\begin{align} h_\theta(x)&=E\left[T(y)\mid x;\theta\right]\\ &=E\left[y\mid x;\theta\right]\\ &=\phi\\ &=\frac{1}{1+e^{-\eta}}\\ &=\frac{1}{1+e^{-\theta^Tx}} \end{align}$$
这就是 Logistic 函数的由来了。
4.2.5.多分类回归模型在广义线性模型下的推导
4.2.5.1.多项式分布
接下来再来利用多项式分布进行建模,得到解决多分类问题的模型,它是 Logistic 回归二分类模型的扩展。 首先我们给出多项式分布的一些公式:
$$\begin{align} p(y=i)&=\phi_i\\ \sum_{i=1}^k\phi_i&=1\end{align}$$
其中 $y \in{1,2,3,\cdots,k }$,又因为 $\phi_i$累加为 1,我们可以只保留 $k-1$个参数:
$$\phi_k=1-\sum_{i=1}^{k-1}\phi_i $$
4.2.5.2.从两点分布出发
为了有个直观的理解,我们先来看 $k=2$时的情况。 此时 $p(y=1)=\phi_1,p(y=2)=\phi_2$,并且 $\phi_1+\phi_2=1$,于是有 $\phi_2=1-\phi_1 $
$$\begin{align} p(y=1)&=\phi_1\\ p(y=2)&=\phi_2\\ \phi_1+\phi_2&=1 \Longrightarrow \phi_2=1-\phi_1\\ p(y\mid \phi_1)&=\phi_1^{2-y}\phi_2^{y-1}=\phi_1^{2-y}(1-\phi_1)^{y-1}\\ &\Longrightarrow p(y\mid \phi)=\phi^{2-y}(1-\phi)^{y-1} \end{align} $$
当 $y=1$时,只取 $\phi_1$;当 $y=2$时,只取 $\phi_2$,即 $1-\phi_1$,又因为只有一个参数 $\phi_1$了,干脆就直接令 $\phi_1=\phi$。这与两点分布所要表达的意义是一模一样的,只不过两点分布只做二分类,就采取了取 0 和 1 的方式,使得整个式子更简洁。
4.2.5.3.多项式概率分布
那么在更一般的多分类问题中,其概率分布为:
$$p(y;\phi)=\phi_1^{I(y=1)}\phi_2^{I(y=2)}\cdots\phi_k^{I(y=k)}$$
这个式子所要表达的意思是,当 y 的值取到 i 的时候,只取相应的 $\phi_i$的值。因为当 k 的取值不同之时,$\phi_i$的指数表示形式会不一样(如上面的例子,同是两点分布,仅是取值不同就会使得其指数表达不一样)。
为了更方便的表达,引入了上面的指示器函数(Indicator function),如果判断条件为真,输出 1,反之输出 0:
$$\begin{align} I\begin{Bmatrix} Ture \end{Bmatrix}&=1\\ I\begin{Bmatrix} False \end{Bmatrix}&=0 \end{align}$$
如 $I\begin{Bmatrix} 3=3 \end{Bmatrix}=1$,$I\begin{Bmatrix} 3=2 \end{Bmatrix}=0$。
所以,当 y=1 时,$p(y;\phi)$的第一个乘子 $\phi_1$的指数为 1,其他所有的乘子的指数全部为 0,进一步推广到所有取值的情况,就起到了当 y 的值取到 i 的时候,只取相应的ϕi 的值的作用。
但是这个指示器函数是一个抽象的东西,如何才能确实地实现这个作用呢?我们给出如下所示的 $T(y)$:
$$\begin{align} T(1)=\left[ \begin{matrix}1\\0\\0\\\vdots\\0\end{matrix}\right], T(2)=\left[ \begin{matrix}0\\1\\0\\\vdots\\0\end{matrix}\right],\cdots, T(k-1)=\left[ \begin{matrix}0\\0\\0\\\vdots\\1\end{matrix}\right], T(k)=\left[ \begin{matrix}0\\0\\0\\\vdots\\0\end{matrix}\right] \end{align}$$
这样 $T(y)$中的某个元素可以表示成:
$$\begin{align} T(y)_i=I\begin{Bmatrix} y=i \end{Bmatrix}\end{align}$$
举例来说,当 $y=2$时,
$T(2)$中的第一个元素为:$T(2)_1=I\begin{Bmatrix} 2=1 \end{Bmatrix}=0$;
$T(2)$中的第二个元素为:$T(2)_2=I\begin{Bmatrix} 2=2 \end{Bmatrix}=1$,这就解决了指数上标什么时候取 0 什么时候取 1 的问题。
于是我们进一步得到具体的多项式分布的概率分布:
$$\begin{align} p(y;\phi)&=\phi_1^{I\begin{Bmatrix} y=1\end{Bmatrix}}\phi_2^{I\begin{Bmatrix} y=2\end{Bmatrix}}\cdots\phi_k^{I\begin{Bmatrix} y=k \end{Bmatrix}}\\ &=\phi_1^{I\begin{Bmatrix} y=1\end{Bmatrix}}\phi_2^{I\begin{Bmatrix} y=2\end{Bmatrix}}\cdots\phi_k^{1-\sum_{i=1}^{k-1}I\begin{Bmatrix} y=i\end{Bmatrix}}\\ &=\phi_1^{T(y)_1}\phi_2^{T(y)_2}\cdots\phi_k^{1-\sum_{i=1}^{k-1}T(y)_i} \end{align}$$
4.2.5.4.在广义线性模型下的推导
还是从广义线性模型的第一点开始做起,将式(50)的概率分布表示成指数分布族的形式:
$$\begin{align} p(y;\phi)&=\phi_1^{T(y)_1}\phi_2^{T(y)_2}\cdots\phi_k^{1-\sum_{i=1}^{k-1}T(y)_i}\\ &=\exp(T(y)_1\log\phi_1+T(y)_2\log\phi_2+\cdots+((1-\sum_{i=1}^{k-1}T(y)_i)\log\phi_k)\\ &=\exp(T(y)_1\log\frac{\phi_1}{\phi_k}+T(y)_2\log\frac{\phi_2}{\phi_k}+\cdots+T(y)_{k-1}\log\frac{\phi_{k-1}}{\phi_k}+\log\phi_k)\\ &=b(y)\exp(\eta^TT(y)-a(\eta)) \end{align}$$
我们有:
$$\begin{align} \eta&=\left[ \begin{matrix}\log\frac{\phi_1}{\phi_k}\\\log\frac{\phi_2}{\phi_k}\\\vdots\\\log\frac{\phi_{k-1}}{\phi_k}\end{matrix}\right]\\ T(y)&=I\begin{Bmatrix} y=i \end{Bmatrix}, \; i=1,2, \cdots,k\\ a(\eta)&=-\log\phi_k\\ b(y)&=1 \end{align}$$
观察式上式我们可以发现,向量 $\eta$的第 i 个元素为:
$$\eta_i=\log\frac{\phi_i}{\phi_k}\Longrightarrow e^{\eta_i}=\frac{\phi_i}{\phi_k}$$
令其累加,得到:
$$\sum_{i=1}^ke^{\eta_i}=\frac{\sum_{i=1}^k\phi_i}{\phi_k}=\frac{1}{\phi_k}\Longrightarrow \phi_k=\frac{1}{\sum_{i=1}^ke^{\eta_i}}$$
把 $\phi_k$带入 $e^{\eta_i}$,即可得到多项式分布的期望:
$$\phi_i=\frac{e^{\eta_i}}{\sum_{i=1}^ke^{\eta_i}}$$
那么接下来的第二步与第三步,令假设函数 $h_\theta(x)$等于多项式分布的期望,并且令 $\eta=\theta^Tx$,就显得非常地顺理成章了:
$$\begin{align} h_\theta(x)&=E\left[T(y)\mid x;\theta\right]\\ &=E\left[ \begin{matrix}p(y=1\mid x;\theta)\\p(y=2\mid x;\theta)\\\vdots\\p(y={k-1}\mid x;\theta)\end{matrix}\right]\\ &=\left[ \begin{matrix}\phi_1\\\phi_2\\\vdots\\\phi_{k-1}\end{matrix}\right]\\ &=\left[ \begin{matrix}\frac{e^{\eta_1}}{\sum_{i=1}^ke^{\eta_i}}\\\frac{e^{\eta_2}}{\sum_{i=1}^ke^{\eta_i}}\\\vdots\\\frac{e^{\eta_{k-1}}}{\sum_{i=1}^ke^{\eta_i}}\end{matrix}\right] =\left[ \begin{matrix}\frac{e^{\theta_1^Tx}}{\sum_{i=1}^ke^{\theta_i^Tx}}\\\frac{e^{\theta_2^Tx}}{\sum_{i=1}^ke^{\theta_i^Tx}}\\\vdots\\\frac{e^{\theta_{k-1}^Tx}}{\sum_{i=1}^ke^{\theta_i^Tx}}\end{matrix}\right] \end{align}$$
这就是 softmax 回归的模型了。
5.算法优缺点
优点:
不仅可以做分类,还可以做概率预测
LR 分类器预测结果是界于 0 和 1 之间的概率,可得到近似概率预测,而不是仅预测出 “类别”,这对许多需利用概率辅助决策的任务很有用。在实际分类问题应用中,有时候根据具体情况可自行设定一个阈值,可能性高于阈值是一类,低于阈值是另一类,比如认为预测概率大于 0.7 才是用户喜欢的商品,而不是 0.5。
- 无需事先假设数据分布
LR 直接对分类可能性进行建模,无需事先假设数据分布,这样就避免了假设分布不准确所带来的问题。
可以适用于连续性和类别性自变量
即数值型和标称型数据都可用于 LR 分类器。
@数值型和标称型数据
标称型:一般在有限的数据中取,而且只存在 ‘是’ 和 ‘否’ 两种不同的结果(一般用于分类)
数值型:可以在无限的数据中取,而且数值比较具体化,例如 4.02、6.23 这种值(一般用于回归分析)
使用简单、计算方便且解释性强
对数几率函数 (logit) 是任意阶可导的凸函数,因此 LR 有很好的数学性质,现有的许多数值优化算法都可直接用于求取最优解,计算代价不高。
缺点:
- 对模型中自变量多重共线性较为敏感
例如两个高度相关自变量同时放入模型,可能导致较弱的一个自变量回归符号不符合预期,符号被扭转。需要利用因子分析或者变量聚类分析等手段来选择代表性的自变量,以减少候选变量之间的相关性;
- 变量变化对目标概率的影响区分度不明确,部分分类问题精度可能不高
预测结果呈 “S” 型,因此从 log(odds) 向概率转化的过程是非线性的,在两端随着 log(odds) 值的变化,概率变化很小,边际值太小,斜率(slope)太小,而中间概率的变化很大,很敏感。 导致很多区间的变量变化对目标概率的影响没有区分度,无法确定阈值。
- 各特征之间不需要满足条件独立假设,但各个特征的贡献是独立计算的。
逻辑回归不像朴素贝叶斯一样需要满足条件独立假设(因为它没有求后验概率)。但每个特征的贡献是独立计算的,特征在与目标构建关联的过程是相对隔离的,即 LR 是不会自动帮你关联不同的特征产生新特征的 (通常需要人为构建,不像树模型或深度神经网络这类模型)。举个例子,如果主题模型中,你需要 TF-IDF 这样的 feature,就必须明确的给出来,若仅仅分别给出两维 TF 和 IDF 是不够的,那样只会得到类似 aTF + bIDF 的结果,而不会有 cTF * IDF 的效果。
6.应用场景
Logistic 回归和线性回归一样,都是比较简单且解释性非常好的算法,它们常常可以用来作为最初探索数据的一种方法,通过通过最小化预测值与实际结果值之间的差距,而得到输入特征之间的最佳组合方式,从某种程度上可以作为一种特征选择的手段。当然,他们的性能也并不弱,在很多场景是可以堪当大用的。
应用领域:银行风控,信用风险度量,客户流失预测,患病率预测,其他大部分分类问题等。
数据规模:可以很大,并且有分布式实现
特征规模:可以很高
在线预测:可以支持,基于随机梯度下降
非常棒