机器学习中的Logistic回归算法详解
机器学习中的Logistic回归算法详解
一、基本概念
逻辑回归(Logistic Regression)是一种广泛使用的统计方法,用于预测一个二分类结果发生的概率。尽管它被称为“回归”,但它实际上是用于分类问题的。逻辑回归的核心是使用逻辑函数(也称为sigmoid函数)来模拟因变量与自变量之间的关系。
Logistic回归算法用的是Logistic函数,该函数定义如下:
$$
y = \frac{1}{1+e^{-x}}
$$
其函数图像如下:
当自变量的值是0时,它的值为0.5;当自变量的值趋于$-\infty$时,函数的值趋近于0;当自变量的值趋近于$\infty$时,函数的值就趋近于1。
由于Logistic函数图像的形状类似于“S”,所以它又被成为Sigmoid函数。
二、决策边界
Logistic回归算法中,我们需要解决的基本问题是,寻找一条"决策边界",将样本点进行分开。
所谓决策边界,它在二维空间空间中是一条线,在三维空间中是一个面,在更高维的空间中是一个超平面。用于将样本点进行区分,它是分类问题中分类决策的依据。
如果二维空间中的样本点存在一条直线的决策边界;三维空间中的样本点存在一个平面的决策边界;更高维空间中的样本点存在一个超平面的决策边界,则我们称这些样本点是线性可分的。
对于二维空间中线性可分问题,其函数如下:
$$
f(x) = \theta_0 + \theta_1x_1 + \theta_2x_2 + ...+ \theta_nx_n = \theta^T X
$$
令
$$
g(x)= \frac{1}{1+e^{-x}}
$$
再令
$$
h_\theta(x)=g(f(x))=g(\theta_0 + \theta_1x_1 + \theta_2x_2 + ...+ \theta_nx_n)
$$
求出了其中的$\theta_0, \theta_1, ..., \theta_n$就可以用上面的函数对新的数据进行判断(判断结果是它属于正样本的概率值)。
三、损失函数
假设我们采集了$m$个样本的$n$个特征并完成了数据标注。
$$
x_1^{i},x_2^{i},...,x_n^{i},y^i \quad (1 \leq i \leq m)
$$
其中正样本的$y^i=1$,负样本的$y^i =0$。
我们假定这N个特征是现行可分的,即存在一条如下直线将两类样本进行划分
$$
\theta_0 + \theta_1x_1 + \theta_2x_2+\cdots +\theta_nx_n = 0
$$
令
$$
d = \theta_0+ \theta_1x_1 + \theta_2x_2+\cdots +\theta_nx_n
$$
此处$d$表示样本点到决策边界的距离,它是有正负的一个值。
将第$i$个样本点的所有特征数据带入上式中,就可以求出该样本点距离直线的距离。
$$
d^{(i)} = \theta_0+ \theta_1x^{(i)}_1 + \theta_2x^{(i)}_2+\cdots +\theta_nx^{(i)}_n
$$
此处我们将$d(\theta)$带入logistic函数可以得到
$$
h_\theta(x)=\frac{1}{1+e^{-d(\theta)}}
$$
它是正样本属于正类的概率,也是关于$\theta$的函数
对于正样本我们用$h_\theta(x)$表示属于正样本的概率,用$1-h_\theta(x)$表示属于负样本的概率。
因此所有$m$个样本的概率值如下:
$$
\begin{cases}
P(y=1 | x;\theta) = h_\theta(x)\
P(y=0 | x;\theta) = 1- h_\theta(x)
\end{cases}
$$
该公式表示含义如下
- $P(y=1 | x;\theta) = h_\theta(x)$,表示 给定参数$x$和$\theta$,输出$y$为1的概率.
- $P(y=0 | x;\theta) = 1- h_\theta(x)$,表示 给定参数$x$和$\theta$,输出$y$为0的概率.
将上式合并可以得到
$$
P(y| x;\theta) = h_\theta(x)^y(1-h_\theta(x))^{1-y}
$$
合并过程如下
为了得到一个更通用的表达式,我们考虑$y$可以是0或1的情况。我们想要一个表达式,它能够同时表示$y=0$和$y=1$的情况。这里我们使用概率的乘法法则,即联合概率可以表示为各个条件概率的乘积。
对于$y=1$,我们有
$$
P(y=1 | x;\theta) = h_\theta(x)
$$
对于$y=0$,我们有
$$
P(y=0 | x;\theta) = 1- h_\theta(x)
$$
我们想要一个表达式,它能够根据$y$的值自动选择正确的条件概率。这可以通过指数函数来实现,因为指数函数可以很容易地根据指数的值(0或1)来选择是否包含某个项。
因此,我们得到:
$$
P(y| x;\theta) = h_\theta(x)^y(1-h_\theta(x))^{1-y}
$$
以上函数的似然函数是
$$
L(\theta) = P(\vec y| X;\theta) = \prod_i^m h_\theta(x^{(i)})^{y^{(i)}}(1-h_\theta(x^{(i)})^{1-y^{(i)}}
$$
则似然函数对应的对数函数为
$$
\begin{aligned}
& l(\theta) = In(L(\theta)) \
&= \sum_{i=1} ^{m} (y^{(i)} In(h_\theta(x^{(i)})) + (1- y^{(i)})In(1-h_\theta(x^{(i)})) \
\end{aligned}
$$
似然函数取得最大值时,模型为最优,因此我们可以定义损失函数为:
$$
J(\theta) = -l(\theta) = \sum_{i=1} ^{m} (-y^{(i)} In(h_\theta(x^{(i)})) - (1- y^{(i)})In(1-h_\theta(x^{(i)}))
$$
即是Logistic回归的损失函数。
四、交叉熵(CrossEntropy)损失函数
交叉熵(CrossEntropy)损失函数是一种在分类问题中常用的损失函数,特别是在二分类和多分类问题中。它衡量的是模型预测的概率分布与真实标签的概率分布之间的差异。交叉熵损失函数的定义如下:
1、二分类问题的交叉熵损失函数
对于二分类问题,交叉熵损失函数可以表示为:
$$
L(y,\hat y) = -[y log(\hat y) + (1-y)log(1-\hat y)]
$$
其中:
- $y$是真实标签,取值0或1
- $\hat y$是模型预测的概率,即$P(y = 1|x)$
2、多分类问题的交叉熵损失函数
对于多分类问题,交叉熵损失函数可以表示为:
$$
L(y,\hat y) = -\sum_{c=1}^M y_c log(\hat y_c)
$$
其中:
- $M$是类别的总数
- $y_c$是一个指示变量,如果样本属于类别$c$,则$y_c = 1$,否则$y_c = 0$。
- $\hat y_c$是模型预测样本属于类别$c$的概率。
3、交叉熵损失函数的特点
- 优化目标:交叉熵损失函数的目标是使得模型预测的概率分布尽可能接近真实的概率分布。
- 可微性:交叉熵损失函数是可微的,这使得它可以通过梯度下降等优化算法进行训练。
- 凸性:在大多数情况下,交叉熵损失函数是凸的,这意味着它有一个全局最小值,优化过程可以保证收敛到最优解。
4、交叉熵损失函数的应用
交叉熵损失函数在机器学习中被广泛应用于各种分类模型,如逻辑回归、支持向量机、神经网络等。它特别适用于那些输出层使用softmax激活函数的模型,因为softmax函数的输出是一个概率分布,可以直接用于计算交叉熵损失。
五、模型参数求解
$$
J(\theta) = -l(\theta) = \sum_{i=1} ^{m} (-y^{(i)} In(h_\theta(x^{(i)})) - (1- y^{(i)})In(1-h_\theta(x^{(i)}))
$$
上述的损失函数被称为交叉熵(CrossEntropy)损失函数,它是一个凸函数,可以表示为:
$$
Cost(h_\theta(x),y) =
\begin{cases}
-ln(h_\theta(x)) & (y=1) \
-ln(1- h_\theta(x)) & (y=0)
\end{cases}
$$
该函数的含义如下:
- 如果样本是一个正样本$(y=1)$,当$h_\theta(x)$接近于1时,损失函数接近于0;当$h_\theta(x)$接近于0时,损失函数接近于无穷大。
- 如果样本是一个负样本$(y=0)$,当$h_\theta(x)$接近于1时,损失函数接近于无穷大;当$h_\theta(x)$接近于0时,损失函数接近于0。
下面我们用最大似然估计来求解模型的最佳值,也就是求$l(\theta)$最大的时候的$\theta$,而$\theta = (\theta_0,\theta_a,\cdots,\theta_n)$是一个向量,所以我们用$l(\theta)$对于该向量的每一个分量进行求偏导:
$$
\begin{align*}
\frac{\partial l(\theta)}{\partial\left(\theta_{j}\right)}&=\sum_{i=1}^{m}\frac{\partial\left(y^{(i)}\ln\left(h_{\theta}\left(x^{(i)}\right)\right)+\left(1-y^{(i)}\right)\ln\left(1-h_{\theta}\left(x^{(i)}\right)\right)\right)}{\partial\left(\theta_{j}\right)}\
&=\sum_{i=1}^{m}\left(\frac{\partial\left(y^{(i)}\ln\left(h_{\theta}\left(x^{(i)}\right)\right)\right)}{\partial\left(\theta_{j}\right)}+\frac{\partial\left(\left(1-y^{(i)}\right)\ln\left(1-h_{\theta}\left(x^{(i)}\right)\right)\right.}{\partial\left(\theta_{j}\right)}\right) \qquad(1) \
&=\sum_{i=1}^{m}\left(\frac{y^{(i)}}{h_{\theta}\left(x^{(i)}\right)}-\frac{1-y^{(i)}}{1-h_{\theta}\left(x^{(i)}\right)}\right)\frac{\partial\left(h_{\theta}\left(x^{(i)}\right)\right)}{\partial\left(\theta_{j}\right)}
\end{align*}
$$
接下来我们求
$$
\frac{\partial\left(h_{\theta}\left(x^{(i)}\right)\right)}{\partial\left(\theta_{j}\right)}
$$
由于
$$
h_\theta(x)=\frac{1}{1+e^{-d(\theta)}}
$$
这里我们先求函数
$$
y= \frac{1}{1+e^{-x}}
$$
的导数
$$
\begin{align*}
\frac{d y}{d x}&=\left(-\frac{1}{\left(1+e^{-x}\right)^2}\right)* e^{-x}(-1)\
&=\frac{1}{1+e^{-x}}\frac{e^{-x}}{1+e^{-x}}\
&=\frac{1}{1+e^{-x}}\left(1-\frac{1}{1+e^{-x}}\right)\
&=y(1-y)
\end{align*}
$$
因而
$$
\frac{\partial\left(h_{\theta}\left(x^{(i)}\right)\right)}{\partial\left(\theta_{j}\right)}
$$
可以写成
$$
\frac{\partial\left(h_\theta\left(x^{(i)}\right)\right)}{\partial\left(\theta_j\right)}=h_\theta\left(x^{(i)}\right)\left(1-h_\theta\left(x^{(i)}\right)\right)\frac{\partial d(\theta)}{\partial\theta_j}
$$
此时,式(1) 可以写成
$$
\begin{align*}
\frac{\partial l(\theta)}{\partial\left(\theta_{j}\right)}&=\sum_{i=1}^{m}\left(\frac{y^{(i)}}{h_{\theta}\left(x^{(i)}\right)}-\frac{1-y^{(i)}}{1-h_{\theta}\left(x^{(i)}\right)}\right)\frac{\partial\left(h_{\theta}\left(x^{(i)}\right)\right)}{\partial\left(\theta_{j}\right)}\
&=\sum_{i=1}^{m}\left(\frac{y^{(i)}}{h_{\theta}\left(x^{(i)}\right)}-\frac{1-y^{(i)}}{1-h_{\theta}\left(x^{(i)}\right)}\right)* h_{\theta}\left(x^{(i)}\right)\left(1-h_{\theta}\left(x^{(i)}\right)\right)\frac{\partial d(\theta)}{\partial\theta_{j}}\
&=\sum_{i=1}^{m}\left(y^{(i)}\left(1-h_{\theta}\left(x^{(i)}\right)\right)-\left(1-y^{(i)}\right) h_{\theta}\left(x^{(i)}\right)\right)\frac{\partial d(\theta)}{\partial\theta_{j}}\
&=\sum_{i=1}^{m}\left(y^{(i)}-h_{\theta}\left(x^{(i)}\right)\right)\frac{\partial d(\theta)}{\partial\theta_{j}}
\end{align*}
$$
我们要求对数似然函数的最大值,因此需要求
$$
\frac {\partial l(\theta)}{\partial (\theta_j)} = 0
$$
直接求解该方程比较困难,实战中我们常采用梯度下降的方式进行求解。
六、Logistic函数的应用及优缺点
1、应用场景
- 机器学习中的分类问题:Logistic函数是逻辑回归模型的核心,用于二分类问题,通过Sigmoid函数将线性回归的输出转换为概率值,从而进行分类。
- 生物统计学:在生物统计学中,Logistic函数常用于描述种群增长模型,特别是当资源有限时的S型增长曲线。
- 流行病学:在流行病学中,Logistic函数可以用来模拟疾病传播的速率,尤其是在资源有限或免疫人群增加时的增长减缓。
- 市场研究:在市场研究中,Logistic函数可以用来预测产品的市场渗透率,模拟产品从引入到成熟的整个过程。
2、优点
- 简单易懂:Logistic回归模型相对简单,易于理解和实现。
- 计算效率高:Logistic函数的计算相对简单,可以快速进行分类。
- 概率输出:Logistic回归可以输出概率值,这在某些应用中非常有用,如风险评估。
- 可扩展性:Logistic回归可以扩展到多分类问题,通过softmax函数实现。
3、缺点
- 线性假设:Logistic回归假设特征和输出之间存在线性关系,这在现实世界中可能不总是成立。
- 对异常值敏感:Logistic回归可能对异常值敏感,这可能会影响模型的准确性。
- 过拟合风险:如果特征数量过多,Logistic回归可能会过拟合,尤其是在样本量较小的情况下。
- 预测能力有限:对于非线性可分的数据,Logistic回归的预测能力有限,可能需要更复杂的模型如神经网络。