【算法】逻辑回归虽然名字中有“回归“,但通常用于二分类任务。如何理解学习?

【算法】逻辑回归虽然名字中有"回归",但通常用于二分类任务。如何理解学习?

逻辑回归 = 用"回归"的方法(线性变换)预测"概率"(连续值),然后用概率做"分类"决策。

它叫"回归"是因为核心计算是线性的,但最终目的是分类。这就像"打印机"可以扫描一样------主要功能是打印,但也能做别的事。

一、前言:它输出的是概率 (连续值),但用于分类决策

复制代码
逻辑回归的工作流程:

输入特征 X
    ↓
线性变换: z = w·X + b  ← 这是"回归"部分(输出连续值)
    ↓
Sigmoid函数: p = 1/(1+e^(-z))  ← 将连续值压缩到(0,1)概率区间
    ↓
概率 p ∈ (0,1)  ← 连续值(回归的本质)
    ↓
分类决策: 如果 p > 0.5 则类别1,否则类别0

二、对比理解

模型 输出 用途 为什么叫这个名字
线性回归 任意实数 (-∞, +∞) 预测连续值(房价、温度) 真的是回归
逻辑回归 概率 (0, 1) 二分类(是/否) 用回归方法解决分类问题

三、Sigmoid函数是桥梁

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

def sigmoid(z):
    """Sigmoid函数:将任意实数映射到(0,1)"""
    return 1 / (1 + np.exp(-z))

# 示例
z_values = np.array([-5, -2, 0, 2, 5])
p_values = sigmoid(z_values)

print("线性输出 z → 概率 p")
for z, p in zip(z_values, p_values):
    print(f"z = {z:2d} → p = {p:.4f} → 预测类别: {1 if p > 0.5 else 0}")

输出:

复制代码
z = -5 → p = 0.0067 → 预测类别: 0
z = -2 → p = 0.1192 → 预测类别: 0
z =  0 → p = 0.5000 → 预测类别: 0/1(边界)
z =  2 → p = 0.8808 → 预测类别: 1
z =  5 → p = 0.9933 → 预测类别: 1

四、形象理解

复制代码
线性回归:预测"明天温度是多少度" → 25.3°C(连续值)

逻辑回归:预测"明天会下雨吗" 
         → 先计算"下雨概率" = 0.75(连续值,回归部分)
         → 再决策:0.75 > 0.5 → 会下雨(分类结果)

五、 为什么不用线性回归直接做分类?

python 复制代码
# 问题:线性回归输出范围是(-∞, +∞)
# 但概率必须在(0, 1)之间!

# 错误做法(线性回归直接分类)
def bad_classification(x):
    y = 2 * x - 3  # 线性输出
    # y可能是负数或大于1,无法解释为概率!
    return 1 if y > 0.5 else 0

# 正确做法(逻辑回归)
def good_classification(x):
    z = 2 * x - 3   # 线性部分
    p = sigmoid(z)  # 压缩到(0,1)
    # p一定是有效的概率值!
    return 1 if p > 0.5 else 0

六、损失函数也不同

模型 损失函数 原因
线性回归 MSE (均方误差) 预测值与真实值的差距
逻辑回归 交叉熵损失 (Cross-Entropy) 衡量概率分布的差异
python 复制代码
# 逻辑回归的损失函数
def cross_entropy_loss(y_true, y_pred_prob):
    """
    y_true: 真实标签 (0 或 1)
    y_pred_prob: 预测概率 (0~1之间)
    """
    # 当 y=1 时,希望预测概率接近1
    # 当 y=0 时,希望预测概率接近0
    loss = - (y_true * np.log(y_pred_prob) + 
              (1 - y_true) * np.log(1 - y_pred_prob))
    return loss

# 示例
print(cross_entropy_loss(1, 0.9))   # 预测正确,损失小: 0.105
print(cross_entropy_loss(1, 0.1))   # 预测错误,损失大: 2.303
相关推荐
用户9385156350716 小时前
从 O(n²) 到 O(nlogn):一文读懂快速排序的“快”与“妙”
javascript·算法
To_OC17 小时前
手写快排次次翻车?别死背快排模板了,这才是面试官想听的底层逻辑
javascript·算法·排序算法
饼干哥哥18 小时前
Reddit VOC调研太慢?搭一个AI专家团队半小时洞察任何品类|以猫用饮水机为例
人工智能·算法·ai编程
地平线开发者19 小时前
Transformer模型部署之性能优化指南
算法
地平线开发者19 小时前
人在途中:从“编译失败”到“模型可落地”——CUDA 自定义算子
算法·自动驾驶
半个落月1 天前
从递归到快速排序:用 JavaScript 把分治思想讲明白
javascript·算法·面试
小月土星1 天前
JavaScript 快速排序:从 pivot、双指针到分治思想
javascript·算法·面试
小月土星1 天前
JavaScript 递归入门:从 1 到 n 求和,再到数组扁平化
javascript·算法·面试
To_OC2 天前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode