【Python机器学习】1.7. 逻辑回归理论(进阶):多维度(因子)逻辑回归问题、决策边界、交叉熵损失函数、最小化损失函数

喜欢的话别忘了点赞、收藏加关注哦(关注即可查看全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=^・ω・^=)

1.7.1. 多维度(因子)逻辑回归问题

在上一篇文章 1.6. 逻辑回归理论(基础) 中我们讨论了简单的逻辑回归问题。这篇文章我们来讨论复杂的逻辑回归问题:

原来我们只有一个维度(比如说小明的余额),但这个图里我们有两个维度------x_1x_2

虽然这个图看上去仍然是一个二维图像,但是它的两个轴都是输入变量。实际的输出是图中的三角形和圆形。

也就是说,这里的目标是通过x_1x_2去分辨三角形和圆形。

怎么去求解呢?对于逻辑回归问题肯定得用逻辑函数:
P ( x ) = 1 1 + e − x P(x) = \frac{1}{1 + e^{-x}} P(x)=1+e−x1

但是这个函数的参数只有一个,所以我们得改一下:
P ( x ) = 1 1 + e − g ( x ) g ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 \begin{aligned} P(x) &= \frac{1}{1 + e^{-g(x)}} \\ g(x) &= \theta_0 + \theta_1 x_1 + \theta_2 x_2 \end{aligned} P(x)g(x)=1+e−g(x)1=θ0+θ1x1+θ2x2

  • e的指数中的x替换为了g(x)
  • g(x)实际上是一个线性回归方程,代表了图中的蓝色线,其中:
    • θ_0截距(bias)
    • θ_1, θ_2特征的权重(回归系数)
    • x_1, x_2是输入的两个特征(因子)

不仅如此,这里我们只展示了有两个输入变量的情况,g(x)还可以有更多的输入变量:
g ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n g(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \dots + \theta_n x_n g(x)=θ0+θ1x1+θ2x2+⋯+θnxn

g(x),也就是蓝色这条线通过点(4,0)(0,4),可以表示为:
x 1 + x 2 = 4 x_1 + x_2 = 4 x1+x2=4

就可以等价地写为:
g ( x ) = − 4 + x 1 + x 2 = 0 g(x) = -4 + x_1 + x_2 = 0 g(x)=−4+x1+x2=0

这条线又叫决策边界(decision boundary) 。有了决策边界之后,我们就能把三角形和圆形的分开:
g ( x ) = − 4 + x 1 + x 2 > 0 : 三角形 g ( x ) = − 4 + x 1 + x 2 < 0 : 圆形 \begin{aligned} g(x) = -4 + x_1 + x_2 > 0 & : \text{ 三角形} \\ g(x) = -4 + x_1 + x_2 < 0 & : \text{ 圆形} \end{aligned} g(x)=−4+x1+x2>0g(x)=−4+x1+x2<0: 三角形: 圆形

对于多维度(因子)的逻辑回归问题来说,最重要也是最难的步骤就是找出这条决策边界。


这时候再增加一点难度,如果决策边界是圆怎么办?

首先确定逻辑函数是保持不变的:
P ( x ) = 1 1 + e − g ( x ) P(x) = \frac{1}{1 + e^{-g(x)}} P(x)=1+e−g(x)1

目标是要找出决策曲线,也就是逻辑函数中的g(x)这一项的表达式。

这里我提供两种解法:

方法1: 根据圆的表达式来推导

其实很简单,大家还记得圆在平面直角坐标系的表达式吗:
( x − a ) 2 + ( y − b ) 2 = r 2 (x - a)^2 + (y - b)^2 = r^2 (x−a)2+(y−b)2=r2

由于这里圆心在原点上,所以可以化简为:
x 2 + y 2 = r 2 x^2 + y^2 = r^2 x2+y2=r2

因为图中决策曲线这个圆过了(1,0)(-1,0)(0,1)(0,-1),所以知道半径r = 1,代入原式:
x 2 + y 2 = 1 x^2 + y^2 = 1 x2+y2=1

再移项即可得:
g ( x ) = − 1 + x 2 + y 2 = 0 g(x) = -1 + x^2 + y^2 = 0 g(x)=−1+x2+y2=0

这就是我们所要的决策边界解析式,由此可得:

g ( x ) = − 1 + x 1 2 + x 2 2 { > 0 , 三角形 < 0 , 圆形 g(x) = -1 + x_1^2 + x_2^2 \begin{cases} > 0, & \text{三角形} \\ < 0, & \text{圆形} \end{cases} g(x)=−1+x12+x22{>0,<0,三角形圆形


方法2: 从回归方程推导

我们都知道线性回归方程基本式长这样:
g ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 g(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 g(x)=θ0+θ1x1+θ2x2

但是我们这里是有曲线的,所以不可能是线性的。也就是说,x的指数不可能只有1次。所以我们要引入二次项:
g ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 2 + θ 4 x 2 2 g(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_1^2 + \theta_4 x_2^2 g(x)=θ0+θ1x1+θ2x2+θ3x12+θ4x22

  • x_1^2和`x_2`^2是新的非线性特征 ,用于捕捉曲线(尤其是圆形)模式
  • 这样,我们的决策边界可以不再是直线,而是更复杂的形状,比如椭圆或圆

如果我们进一步简化,只保留二次项(假设θ_1 = θ_2 = 0),我们得到:
g ( x ) = θ 0 + θ 3 x 1 2 + θ 4 x 2 2 g(x) = \theta_0 + \theta_3 x_1^2 + \theta_4 x_2^2 g(x)=θ0+θ3x12+θ4x22

θ_0 = -r^2 θ_3 = θ_4 = 1,我们得到:
g ( x ) = x 1 2 + x 2 2 − r 2 g(x) = x_1^2 + x_2^2 - r^2 g(x)=x12+x22−r2

g(x) = 0时:
x 1 2 + x 2 2 = r 2 x_1^2 + x_2^2 = r^2 x12+x22=r2

这正是圆的方程!然后我们就可以根据法1的逻辑推理到g(x)的解析式了。


从这些例子我们可以看出:逻辑回归结合多项式边界函数可以解决复杂的分类问题。

1.7.2. 逻辑回归的本质

我们把逻辑回归的函数放在这里:
P ( x ) = 1 1 + e − g ( x ) g ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . \begin{aligned} P(x) &= \frac{1}{1 + e^{-g(x)}} \\ g(x) &= \theta_0 + \theta_1 x_1 + \theta_2 x_2 + ... \end{aligned} P(x)g(x)=1+e−g(x)1=θ0+θ1x1+θ2x2+...

根据刚才的讲解,我们清楚了:逻辑回归问题的关键在于寻找决策边界g(x),而寻找逻辑边界g(x)的关键就在于寻找参数θ_0θ_1θ_2...

有没有觉得熟悉?寻找g(x)中各项的参数不就是线性回归模型在做的事吗 !那我可不可以用最小化损失函数呢:
minimize { 1 2 m ∑ i = 1 m ( y i ′ − y i ) 2 } \textit{minimize} \left\{ \frac{1}{2m} \sum_{i=1}^{m} (y'_i - y_i)^2 \right\} minimize{2m1i=1∑m(yi′−yi)2}

会让你感到失望的是,这样做其实是不行的。因为分类问题标签和预测结果都是离散的点(比如说只有0和1两个值),不是连续的值,使用它无法求导,也就无法寻找到极小值点。

但是思路没有问题,我们就是要找一个损失函数并让它的结果尽可能的小。John Nelder和Robert Wedderburn在1972年的论文《Generalized Linear Models》中提出了交叉熵损失(Cross-Entropy Loss)函数:

J_i = \\begin{cases} * \\log(P(x_i)), \& \\text{if } y_i = 1 \\ * \\log(1 - P(x_i)), \& \\text{if } y_i = 0 \\end{cases}

它的核心思想是:

  • y = 1时(也就是真实情况是1),你计算出的P(x)(也就是你的模型预估出的情况)越接近1就代表损失越小,越接近0就代表损失越大
  • y = 0时(也就是真实情况是1),你计算出的P(x)(也就是你的模型预估出的情况)越接近0就代表损失越小,越接近1就代表损失越大

把两个方程式结合起来,转化为下面这个方程,获得交叉熵损失的平均值:
J = 1 m ∑ i = 1 m J i = − 1 m [ ∑ i = 1 m ( y i log ⁡ P ( x i ) + ( 1 − y i ) log ⁡ ( 1 − P ( x i ) ) ) ] J = \frac{1}{m} \sum_{i=1}^{m} J_i = -\frac{1}{m} \left[ \sum_{i=1}^{m} \left( y_i \log P(x_i) + (1 - y_i) \log (1 - P(x_i)) \right) \right] J=m1i=1∑mJi=−m1[i=1∑m(yilogP(xi)+(1−yi)log(1−P(xi)))]

而其中:
P ( x ) = 1 1 + e − g ( x ) g ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . \begin{aligned} P(x) &= \frac{1}{1 + e^{-g(x)}} \\ g(x) &= \theta_0 + \theta_1 x_1 + \theta_2 x_2 + ... \end{aligned} P(x)g(x)=1+e−g(x)1=θ0+θ1x1+θ2x2+...

所以说逻辑回归最核心的就是:
minimize { J ( θ ) } \textit{minimize} \left\{ J(\theta) \right\} minimize{J(θ)}

1.7.3. 最小化损失函数

我们知道了如何计算损失之后,又该如何最小化它呢?其实它的思路跟线性回归的梯度下降法差不多。

我们先来回顾一下梯度下降法:
p i + 1 = p i − α ∂ ∂ p i f ( p i ) p_{i+1} = p_i - \alpha \frac{\partial}{\partial p_i} f(p_i) pi+1=pi−α∂pi∂f(pi)

  • p_i+1是更新后的参数值 ,由当前值p_i进行调整
  • α(学习率):控制每次更新的步长
  • α后面跟的那一串是函数f(p) 在当前点p_i处的梯度(偏导数),表示f(p)在该点变化的方向和大小。

逻辑回归也要运用梯度下降法:
{ temp θ j = θ j − α ∂ ∂ θ j J ( θ ) θ j = temp θ j \left\{ \begin{array}{l} \textit{temp}{\theta_j} = \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta) \\ \theta_j = \textit{temp}{\theta_j} \end{array} \right. {tempθj=θj−α∂θj∂J(θ)θj=tempθj

也是一样的通过系数减梯度不断重复计算直到函数收敛。

相关推荐
萧鼎44 分钟前
深入解析 Umi-OCR:高效的免费开源 OCR 文字识别工具
python·ocr·umi-ocr
Jet45051 小时前
玩转ChatGPT:GPT 深入研究功能
人工智能·gpt·chatgpt·deep research·深入研究
毕加锁1 小时前
chatgpt完成python提取PDF简历指定内容的案例
人工智能·chatgpt
Wis4e3 小时前
基于PyTorch的深度学习3——基于autograd的反向传播
人工智能·pytorch·深度学习
西猫雷婶3 小时前
神经网络|(十四)|霍普菲尔德神经网络-Hebbian训练
人工智能·深度学习·神经网络
梦丶晓羽4 小时前
自然语言处理:文本分类
人工智能·python·自然语言处理·文本分类·朴素贝叶斯·逻辑斯谛回归
SuperCreators4 小时前
DeepSeek与浏览器自动化AI Agent构建指南
人工智能·自动化
美狐美颜sdk5 小时前
什么是美颜SDK?从几何变换到深度学习驱动的美颜算法详解
人工智能·深度学习·算法·美颜sdk·第三方美颜sdk·视频美颜sdk·美颜api
訾博ZiBo5 小时前
AI日报 - 2025年3月10日
人工智能
waicsdn_haha5 小时前
Postman v11 安装与API测试入门教程(Windows平台)
人工智能·windows·测试工具·mysql·postman·dbeaver·rest