Bootstrap

机器学习之逻辑回归、一(学习理论)

P(D|θ)

一、前言

逻辑回归,看似容易,学习起来真的是挺复杂,涉及的东西挺多。越是学习越觉得盲区越多。遂,先懂是什么,接着联系实践,至于更深层理论,以后慢慢学习。

二、逻辑回归的由来

逻辑回归是由19世纪末到20世纪初的数学家皮尔斯(Charles Sanders Peirce)和逻辑学家沃德(John Ward)提出的。最初,逻辑回归被用于预测二元事件(即成功或失败,真或假等)。它使用线性回归模型来建立一个分类器,并将输出映射到概率值(也称为“sigmoid函数”)。逻辑回归算法可以通过对数据进行拟合,找到一组最优参数,从而得到一个能够准确分类新数据的模型。
随着时间的推移,逻辑回归在诸如医学、金融、社会科学等领域中得到了广泛应用。

三、到底什么是逻辑回归

(1). 先对逻辑回归有个大概感觉

  1. 逻辑回归的本质是利用数学模型对数据进行建模,从而实现分类任务。具体来说,逻辑回归通过构建一个线性模型,并将输出映射到概率值,来对输入数据进行分类。
  2. 在训练阶段,逻辑回归使用交叉熵损失函数来衡量模型预测结果与真实结果之间的差异,并利用梯度下降等优化算法调整模型参数,使得损失函数最小化。最终,我们可以得到一个能够准确分类新数据的逻辑回归模型。
  3. 逻辑回归的本质不仅是一个分类器,同时也是一种推断方法。它的特点在于能够输出概率值,可以用于判断类别之间的相对可能性,还可以通过改变输出阈值来调整分类结果的灵敏度。

(2).逻辑回归与线性回归的区别

逻辑回归和线性回归都是常见的机器学习算法,但是它们的应用场景、模型假设、损失函数等方面存在很大区别。

  1. 线性回归是用于建立输入特征和连续目标变量之间的关系模型。它假设输入特征与目标变量之间存在线性关系,并使用最小二乘法等方法来尽可能地拟合数据点。而逻辑回归是用于建立输入特征和离散目标变量之间的关系模型。它假设输入特征与目标变量之间存在一种非线性的关系,我们需要通过对数据进行拟合,找到最优的参数来构建一个分类器
  2. 两者的模型假设也不同。线性回归认为目标变量的误差服从正态分布,即在给定输入特征时,目标变量服从均值为 θ T x \theta^Tx θTx正态分布;而逻辑回归假设目标变量服从伯努利分布,即当输入特征为 x x x时,目标变量为10的概率分别为 h θ ( x ) h_{\theta}(x) hθ(x) 1 − h θ ( x ) 1-h_{\theta}(x) 1hθ(x)
  3. 它们的损失函数也不同。线性回归通常使用平方损失函数衡量预测结果与真实值之间的差距;而逻辑回归通常使用交叉熵损失函数来衡量模型预测结果与真实结果之间的差异。

(3).sigmoid函数

为什么要说下这个函数:

  1. sigmoid函数是逻辑回归算法的核心之一,它将线性预测输出映射到概率值。具体来说,sigmoid函数可以将任何实数映射到区间(0, 1)内的一个概率值,
    其公式为: h θ ( x ) = 1 1 + e − θ T x h_{\theta}(x) = \frac{1}{1+e^{-\theta^Tx}} hθ(x)=1+eθTx1
  2. 在逻辑回归中,我们使用sigmoid函数将线性预测转换为概率值,并将这些概率值作为目标变量为1的概率估计。例如,当sigmoid函数的输出值为0.8时,代表模型预测输入 x x x属于第一类别的概率为0.8,属于第二类别的概率为0.2。
  3. 在模型训练过程中,我们通过最大化似然函数或最小化交叉熵损失函数来学习逻辑回归模型参数,从而得到一个能够准确分类新数据的模型。sigmoid函数的使用使得模型能够输出概率值,同时也保证了输出结果的可导性,方便利用梯度下降等优化算法进行模型训练。

因此:学习逻辑回归之前,绕不开这个函数。

在这里插入图片描述
通过代码实现就是:

import numpy as np
import matplotlib.pyplot as plt
def sigmoid(z):
    return 1. / (1. + np.exp(-z))

#画出sigmoid函数图像
x = np.linspace(-10,10,100)
y = sigmoid(x)
plt.plot(x,y)
plt.title("sigmoid函数图像")
plt.show()

在这里插入图片描述

参数说明:z是一个矩阵,θ是参数列向量(要求解的),x是样本列向量(给定的数据集)。θ^T表示θ的转置。g(z)函数实现了任意实数到[0,1]的映射,这样我们的数据集([x0,x1,…,xn]),不管是大于1或者小于0,都可以映射到[0,1]区间进行分类。hθ(x)给出了输出为1的概率。比如当hθ(x)=0.7,那么说明有70%的概率输出为1。输出为0的概率是输出为1的补集,也就是30%。

(4)目标函数:似然函数

在(3)里面有介绍到:sigmoid函数是一种常用的激活函数,它将任何实数映射到区间(0, 1)内的一个概率值。sigmoid函数的运算结果就是这个概率值

具体来说,sigmoid函数的公式为: h ( x ) = 1 1 + e − x h(x) = \frac{1}{1+e^{-x}} h(x)=1+ex1。当输入 x x x为任意实数时,sigmoid函数会将其转换为一个介于0和1之间的概率值,表示在当前条件下事件发生的可能性大小。例如,当sigmoid函数的输入值为5时,其输出值为0.9933,代表事件发生的概率相对较大。而当sigmoid函数的输入值为-5时,其输出值为0.0067,代表事件发生的概率相对较小

而且

逻辑回归假设目标变量服从伯努利分布,即当输入特征为 x x x时,目标变量为10的概率分别为 h θ ( x ) h_{\theta}(x) hθ(x) 1 − h θ ( x ) 1-h_{\theta}(x) 1hθ(x)


在这里插入图片描述

再有就是

Logistic回归模型的目标是从输入变量预测输出变量的概率,即给定输入变量x,模型输出的是对应的输出变量y取值为1概率P(y=1|x),这是一个典型条件概率表示。

那么就可以有:

在这里插入图片描述

这里的变形,可以将z当做要求得结果,使用对数,将上面的个g(z)内容带入到这个公式计算化简就明白了,ln()的结果就是z

接着假设后验概率

在这里插入图片描述在这里插入图片描述在这里插入图片描述

如此我们就得到了似然函数

(4)问题转化(让问题简单起来)

对于上面的似然函数,可以根据,最大似然估计牛顿法等都可以计算出θ

但是对于工程师来说,我更倾向于能快速工程化的解决方法:
逻辑回归的目标函数通常是最大化似然函数最小化交叉熵损失函数。这两种方法本质上是等价的,因此在实际应用中通常选择一种比较方便计算的方法。

对于二元分类问题而言,我们可以将样本的真实类别标签表示为一个one-hot编码的向量,比如[0, 1]代表样本属于第二类别[1, 0]代表样本属于第一类别;而模型输出的结果通常是一个概率值,例如0.7代表模型认为该样本属于第二类别的概率为0.7。

最大化似然函数的方法是,假设训练集中的样本都是独立同分布的,那么似然函数就可以写成所有样本概率的乘积。我们需要找到一组模型参数 θ \theta θ,使得给定 θ \theta θ的条件下,观测到训练数据的概率最大。这个过程可以通过最大化似然函数来完成,其数学形式为:

ℓ ( θ ) = ∏ i = 1 m ( h θ ( x i ) ) y i ( 1 − h θ ( x i ) ) 1 − y i , \ell(\theta) = \prod_{i=1}^{m} (h_\theta(x_i))^{y_i} (1-h_\theta(x_i))^{1-y_i}, (θ)=i=1m(hθ(xi))yi(1hθ(xi))1yi,

其中 h θ ( x i ) h_\theta(x_i) hθ(xi)是模型在输入 x i x_i xi时输出的预测值也就是上边我们计算的p y i y_i yi是样本 i i i的真实类别标签, θ \theta θ是模型的参数, m m m是样本数量。求解的目标是最大化似然函数,即:

θ ∗ = arg ⁡ max ⁡ θ ℓ ( θ ) . \theta^* = \arg\max_\theta \ell(\theta). θ=argθmax(θ).

将似然函数取对数后,上述问题等价于最小化交叉熵损失函数,其数学形式为:

J ( θ ) = − 1 m ∑ i = 1 m [ y i l o g ( h θ ( x i ) ) + ( 1 − y i ) l o g ( 1 − h θ ( x i ) ) ] , 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))], J(θ)=m1i=1m[yilog(hθ(xi))+(1yi)log(1hθ(xi))],

其中 h θ ( x i ) h_\theta(x_i) hθ(xi)是模型在输入 x i x_i xi时输出的预测值 y i y_i yi是样本 i i i真实类别标签 θ \theta θ是模型的参数 m m m样本数量。求解的目标是最小化交叉熵损失函数,即:

θ ∗ = arg ⁡ min ⁡ θ J ( θ ) . \theta^* = \arg\min_\theta J(\theta). θ=argθminJ(θ).

因此,逻辑回归的目标函数可以是最大化似然函数或最小化交叉熵损失函数。这两种方法本质上是等价的,但在实际应用中通常选择一种比较方便计算的方法。

(5)逻辑回归的目标函数,代价函数,损失函数

逻辑回归是一种二分类算法,目标是根据输入特征预测每个样本属于正类还是负类。在逻辑回归中,我们使用逻辑函数(或称为sigmoid函数)将连续的预测值转换为0或1的概率值。

  1. 目标函数是在训练过程中需要最小化的函数,它是模型要优化的量。对于逻辑回归来说,目标函数通常是负对数似然函数。

  2. 代价函数也称为损失函数或误差函数,它表示了模型预测值与真实值之间的差距。对于逻辑回归来说,代价函数通常是平均交叉熵损失。

  3. 目标函数和代价函数之间的区别是,目标函数是在整个数据集上计算的,而代价函数是在单个样本上计算的。目标函数用于指导模型优化的方向,而代价函数用于衡量模型预测的准确程度。

以下是逻辑回归中目标函数和代价函数的公式:

目标函数: J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] 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)}))] J(θ)=m1i=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]

其中, m m m表示样本数量, y ( i ) y^{(i)} y(i)表示第 i i i个样本的真实标签(0或1), h θ ( x ( i ) ) h_{\theta}(x^{(i)}) hθ(x(i))表示模型预测第 i i i个样本为正类的概率值。

代价函数: J ( θ ) = − [ y log ⁡ ( h θ ( x ) ) + ( 1 − y ) log ⁡ ( 1 − h θ ( x ) ) ] J(\theta) = -[y\log(h_{\theta}(x)) + (1-y)\log(1-h_{\theta}(x))] J(θ)=[ylog(hθ(x))+(1y)log(1hθ(x))]

其中, y y y是指单个样本的真实标签, h θ ( x ) h_{\theta}(x) hθ(x)是指模型预测该样本为正类的概率值。

损失函数(通常等同于代价函数): E ( θ ) = J ( θ ) E(\boldsymbol{\theta}) = J(\boldsymbol{\theta}) E(θ)=J(θ)

这里的目标函数代价函数都采用了交叉熵函数,但它们的计算对象不同。目标函数用来衡量模型整体的性能,在训练过程中需要最大化它;而代价函数则用来衡量单个样本的预测误差,我们需要最小化代价函数来优化模型参数。损失函数通常等同于代价函数,也是用来衡量整个模型的性能。

总的来说,目标函数和代价函数都是用来衡量预测结果与真实结果之间的差异,但它们所关注的内容不同。在训练模型时,我们需要最大化目标函数以使模型性能更好,同时通过梯度下降算法最小化代价函数以调整模型参数。

(6)为什么这么问题转化

逻辑回归的目标是最大化似然函数,即找到一个模型参数 θ \theta θ,使得在给定特征下,观测数据集中所有正样本的条件概率乘积与负样本的条件概率乘积之和最大

然而,直接求解这个似然函数并不容易,因为这个函数中包含了多个对数指数运算。为了方便求解,我们通常采用对数似然,将原始似然函数转化成一个更方便计算的形式

对数似然函数可以表示为:

L ( θ ) = ∑ i = 1 m [ y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] L(\theta) = \sum_{i=1}^m[y^{(i)}\log h_{\theta}(x^{(i)}) + (1-y^{(i)})\log(1-h_{\theta}(x^{(i)}))] L(θ)=i=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

其中, y ( i ) y^{(i)} y(i)表示第 i i i个样本的真实标签(0或1), h θ ( x ( i ) ) h_{\theta}(x^{(i)}) hθ(x(i))表示模型预测第 i i i个样本为正类的概率值。

我们需要最大化对数似然函数,相当于最小化对数似然函数的相反数的平均值

J ( θ ) = − 1 m L ( θ ) J(\theta) = -\frac{1}{m}L(\theta) J(θ)=m1L(θ)

由于对数函数单调递增的,所以最大化对数似然函数等价于最小化其相反数,即最小化交叉熵损失函数

J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] 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)}))] J(θ)=m1i=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]

因此,逻辑回归算法目标最小化交叉熵损失函数,这样可以方便地使用梯度下降等优化算法求解模型参数 θ \theta θ,使得模型预测的结果尽可能接近真实值。

(7)使用梯度下降来计算求解

1. 什么是交叉熵损失函数

详细的推导过程

2. 梯度下降

梯度下降推导

3. 计算公式

交叉熵损失函数通常使用梯度下降等最优化算法来进行求解。具体而言,我们需要计算损失函数关于模型参数 θ \theta θ的偏导数,然后利用梯度下降等方法来调整参数 θ \theta θ,以最小化损失函数。

对于二元分类问题而言,交叉熵损失函数的表达式如下:

J ( θ ) = − 1 m ∑ i = 1 m y i l o g ( h θ ( x i ) ) + ( 1 − y i ) l o g ( 1 − h θ ( x i ) ) , 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)), J(θ)=m1i=1myilog(hθ(xi))+(1yi)log(1hθ(xi)),

其中 y i y_i yi是样本 i i i的真实类别标签(即目标变量), h θ ( x i ) h_\theta(x_i) hθ(xi)是模型在输入 x i x_i xi时输出的预测值, θ \theta θ是模型的参数, m m m是样本数量。

为了最小化损失函数 J ( θ ) J(\theta) J(θ),我们需要计算它关于模型参数 θ j \theta_j θj的偏导数,公式如下:

∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x i j . \frac{\partial J(\theta)}{\partial \theta_j} = \frac{1}{m} \sum_{i=1}^m (h_\theta(x_i) - y_i)x_{ij}. θjJ(θ)=m1i=1m(hθ(xi)yi)xij.

在这里插入图片描述

其中 x i j x_{ij} xij表示样本 i i i的第 j j j个特征值, h θ ( x i ) h_\theta(x_i) hθ(xi)是模型在输入 x i x_i xi时输出的预测值。

利用上述偏导数公式,我们可以逐步更新模型参数,直至损失函数收敛。具体地,可以使用批量梯度下降算法、随机梯度下降算法、小批量梯度下降算法等方法进行参数更新。需要注意的是,优化算法的选择会影响模型的训练速度和精度,因此需要根据实际情况进行选择。

四、逻辑回归优缺点

逻辑回归是一种经典的分类算法,其优缺点如下:

优点

  1. 简单易懂:逻辑回归是一种简单且易于理解的算法,不需要复杂的数学知识,在实际应用中得到了广泛的应用。

  2. 计算效率高:逻辑回归模型的训练和预测速度都很快,适合处理大规模数据。

  3. 可解释性强:逻辑回归模型能够给出每个特征的权重,可以解释变量之间的关系。

  4. 适用范围广:逻辑回归可以处理二分类问题,也可以通过一些技巧将其扩展到多分类问题上。

  5. 鲁棒性好:逻辑回归对异常值的鲁棒性较好,不会对模型产生很大影响。

缺点

  1. 假设线性可分:逻辑回归假设样本数据是线性可分的,即可以通过一条直线或超平面进行分类。如果数据集非线性可分,则逻辑回归表现会比较差。

  2. 容易欠拟合:当特征之间相关性较强或特征数量很多时,逻辑回归容易出现欠拟合问题。

  3. 不能很好地处理大量特征:当特征数量非常大时,逻辑回归需要更多的计算资源和训练时间。

  4. 对缺失值敏感:如果数据集存在缺失值或异常值,会影响逻辑回归模型的性能。

总结

这个学习起来还是挺复杂的,先有个大概认知,明天敲一敲代码,梳理下里面逻辑

五、参考文献

[1].https://blog.csdn.net/iqdutao/article/details/109478633
[2].https://blog.csdn.net/iqdutao/article/details/107174240
[3].https://blog.csdn.net/lgb_love/article/details/80592147
[4].https://blog.csdn.net/c406495762/article/details/77723333
[5].https://zhuanlan.zhihu.com/p/128102048
[6].https://zhuanlan.zhihu.com/p/74874291

;