机器学习全景指南-进阶篇——解决分类问题的逻辑回归

目录规划

为了将这所有博客里的知识点逻辑顺畅地串联起来,特此设计了以下目录结构。这个顺序遵循了"概念引入 -> 基础回归 -> 分类进阶 -> 无监督学习"的学习路径:

  1. 第一章:启蒙篇------人工智能与机器学习的宏观版图
    • 来源博客:人工智能和机器学习
    • 核心内容:AI、ML、DL的关系,机器学习的分类(监督/无监督/强化),基本工作流程。
  2. 第二章:基石篇------预测连续值的线性回归
    • 来源博客:线性回归
    • 核心内容:一元/多元线性回归,损失函数,梯度下降,代码实战。
  3. 第三章:进阶篇------解决分类问题的逻辑回归
    • 来源博客:逻辑回归
    • 核心内容:从回归到分类的跨越,Sigmoid函数,决策边界,代码实战。
  4. 第四章:直觉篇------基于距离的K-近邻 (KNN)
    • 来源博客:KNN算法
    • 核心内容:KNN原理,K值选择,距离计算,优缺点分析,代码实战。
  5. 第五章:探索篇------发现数据内在结构的聚类算法
    • 来源博客:聚类算法
    • 核心内容:K-Means原理,簇的概念,与分类的区别,应用场景。
  6. 第六章:总结与展望
    • 综合对比五大算法,如何选择适合的模型。

文章目录

  • 目录规划
  • 第三章:进阶篇------解决分类问题的逻辑回归
    • [3.1 为什么线性回归不能直接用于分类?](#3.1 为什么线性回归不能直接用于分类?)
    • [3.2 核心引擎:Sigmoid 函数](#3.2 核心引擎:Sigmoid 函数)
      • [1. 函数公式](#1. 函数公式)
      • [2. 函数特性](#2. 函数特性)
      • [3. 逻辑回归的最终假设](#3. 逻辑回归的最终假设)
    • [3.3 损失函数:为什么不能用 MSE?](#3.3 损失函数:为什么不能用 MSE?)
    • [3.4 决策边界 (Decision Boundary)](#3.4 决策边界 (Decision Boundary))
    • [3.5 代码实战:手写数字识别(二分类)](#3.5 代码实战:手写数字识别(二分类))
    • [3.6 逻辑回归 vs 线性回归:关键区别总结](#3.6 逻辑回归 vs 线性回归:关键区别总结)
    • [3.7 优缺点分析](#3.7 优缺点分析)
      • [✅ 优点](#✅ 优点)
      • [❌ 缺点](#❌ 缺点)
    • [3.8 本章小结](#3.8 本章小结)

第三章:进阶篇------解决分类问题的逻辑回归

导读:在上一章中,我们学会了用线性回归预测"房价是多少"这样的连续数值。但如果问题变成了"这封邮件是不是垃圾邮件?"或者"这个肿瘤是良性还是恶性?",线性回归就束手无策了。

本章基于文档《04_逻辑回归.pdf》,带你走进逻辑回归 (Logistic Regression)的世界。尽管名字里带有"回归",但它其实是机器学习中最经典、最常用的分类算法之一。我们将揭示它如何通过一个神奇的函数,将连续的预测值转化为离散的类别概率。

3.1 为什么线性回归不能直接用于分类?

假设我们要根据"肿瘤大小"预测"恶性肿瘤 (1)"还是"良性肿瘤 (0)"。

如果我们强行使用线性回归

  1. 输出范围不可控 :线性回归的输出可以是任意实数。但分类问题我们需要的是 0 或 1 ,或者是 0 到 1 之间的概率 。如果模型预测出,这在分类任务中是没有意义的。
  2. 阈值敏感 :如果我们设定 ,那么只要数据中增加一个极端的异常点,拟合的直线就会发生剧烈倾斜,导致原本分类正确的点被分错。

我们需要什么?

我们需要一个函数,它能接收线性回归的输出 (),然后将其压缩(0, 1) 区间内,代表属于某一类的概率

3.2 核心引擎:Sigmoid 函数

逻辑回归的秘诀就在于引入了 Sigmoid 函数(也叫 Logistic 函数)。

1. 函数公式

2. 函数特性

  • 形状:呈"S"形曲线。

3. 逻辑回归的最终假设

形象理解 :线性部分 ( w x + b wx+b wx+b) 负责打分,分数可正可负;Sigmoid 函数负责把分数"挤压"成概率,分数越高,概率越接近 100%。

3.3 损失函数:为什么不能用 MSE?

在线性回归中,我们使用均方误差 (MSE)。但在逻辑回归中,由于 Sigmoid 函数的非线性特性,如果使用 MSE,损失函数会变成非凸函数(有很多个局部最低点),梯度下降很容易陷入局部最优,找不到全局最佳解。

因此,逻辑回归使用 对数损失函数 (Log Loss) ,也称为 交叉熵损失 (Cross-Entropy Loss)

公式

结论 :对数损失函数是一个凸函数,保证梯度下降能找到全局最优解。

3.4 决策边界 (Decision Boundary)

逻辑回归本质上还是线性的。

  • 决策边界由定义。
  • 在二维平面上,这是一条直线
  • 在高维空间中,这是一个超平面
  • 这条线将空间划分为两部分:一边预测为 0,一边预测为 1。

3.5 代码实战:手写数字识别(二分类)

为了展示逻辑回归的威力,我们用 sklearn 来实现一个经典的二分类任务:识别手写数字是"0"还是"1"

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix

# 1. 加载数据
# load_digits 包含 0-9 的手写图片,我们只取 0 和 1 来做二分类
digits = load_digits()
X = digits.data       # 特征:每张图 64 个像素点
y = digits.target     # 标签:0-9

# 过滤数据,只保留 0 和 1
mask = (y == 0) | (y == 1)
X = X[mask]
y = y[mask]

print(f"数据形状: {X.shape}, 标签分布: {np.bincount(y)}")

# 2. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 3. 实例化并训练模型
# C 参数是正则化强度的倒数,默认即可
model = LogisticRegression()
model.fit(X_train, y_train)

# 4. 预测与评估
y_pred = model.predict(X_test)
y_prob = model.predict_proba(X_test) # 获取概率值

print("\n--- 模型评估 ---")
print(f"准确率 (Accuracy): {model.score(X_test, y_test):.4f}")
print("\n分类报告:")
print(classification_report(y_test, y_pred))

# 5. 可视化:看看模型是怎么"看"数字的
# 我们可以画出权重 w,看看哪些像素对区分 0 和 1 最重要
weights = model.coef_[0]
plt.figure(figsize=(8, 4))

plt.subplot(1, 2, 1)
plt.imshow(weights.reshape(8, 8), cmap='coolwarm')
plt.title('模型学到的权重 (Weight Map)\n红色有助于判为1,蓝色有助于判为0')
plt.colorbar()

plt.subplot(1, 2, 2)
# 随机选一张测试图展示
idx = 0
plt.imshow(X_test[idx].reshape(8, 8), cmap='gray')
true_label = y_test[idx]
pred_prob = y_prob[idx][1] # 属于类别1的概率
plt.title(f'真实: {true_label}\n预测为1的概率: {pred_prob:.2f}')
plt.axis('off')

plt.tight_layout()
plt.show()

代码深度解析

  1. 数据准备:我们使用了 sklearn 自带的Digits数据集,并人工筛选了 0 和 1,构建了一个二分类问题。
  2. predict_proba :这是逻辑回归的神器。它不仅告诉你结果是 0 还是 1,还告诉你置信度(概率)。比如输出 0.98,说明模型非常有把握;输出 0.51,说明模型很犹豫。
  3. 权重可视化
    • 逻辑回归的 coef_ 告诉我们每个像素点对结果的贡献。
    • 在生成的热力图中,红色区域 表示如果这里有墨迹,模型倾向于认为是"1";蓝色区域表示如果有墨迹,倾向于认为是"0"。
    • 你会发现,权重图往往长得很像"1"和"0"的差异部分(例如"0"的圆圈部分权重为负,"1"的竖线部分权重为正)。这再次证明了逻辑回归极强的可解释性

3.6 逻辑回归 vs 线性回归:关键区别总结

3.7 优缺点分析

✅ 优点

  1. 计算代价低:训练和预测速度非常快,适合大规模数据。
  2. 可解释性强:可以通过权重系数清楚地看到每个特征对结果的影响方向和程度。
  3. 输出概率:不仅给出分类结果,还给出概率,方便后续根据业务需求调整阈值(例如在医疗诊断中,为了不漏诊,可以将阈值从 0.5 降到 0.3)。
  4. 不易过拟合:配合正则化(L1/L2),效果很稳健。

❌ 缺点

  1. 特征与目标需线性相关:本质还是线性分类器,处理复杂的非线性关系能力较弱(除非手动做特征组合)。
  2. 特征数量巨大时表现一般:相比 SVM 或神经网络,在超高维特征空间下可能不是最优解。
  3. 对多重共线性敏感:如果特征之间高度相关,权重估计会不稳定。

3.8 本章小结

  • 逻辑回归 虽然名字带"回归",实则是分类算法之王。
  • 它通过 Sigmoid 函数 将线性输出映射为概率。
  • 它使用 对数损失函数 来优化模型,确保找到全局最优。
  • 它的最大优势在于简单、快速且可解释,是工业界(如广告点击率预估、风控评分卡)应用最广泛的模型之一。

掌握了线性回归和逻辑回归,我们就解决了机器学习中两大基础任务:预测数值二分类。但是,如果我们的邻居不只两个,或者有十个类别怎么办?如果数据没有标签,我们该怎么分组?

接下来,我们将学习一种基于"直觉"和"距离"的算法------K-近邻 (KNN),看看它如何处理多分类问题,以及它与前面两种基于"公式"的算法有何不同。


下一章预告:《第四章:直觉篇------基于距离的 K-近邻 (KNN) 算法》,我们将抛弃复杂的公式推导,用最朴素的"近朱者赤"思想来解决分类难题。

相关推荐
袋鼠云数栈1 小时前
能源矿产行业 Data + AI 数智化全景解决方案——构建集团级智慧运营生产体系的系统路径
大数据·人工智能·能源·数据治理
算法狗21 小时前
大模型面试题:prefixDecodercausalDecoder和EncoderDecodder的区别是什么
人工智能·深度学习·语言模型
火山引擎开发者社区1 小时前
来ArkClaw零门槛「养虾」!火山方舟Coding Plan用户抢先体验
人工智能
coft1 小时前
想搭上 AI 这趟车?你不需要先学编程
人工智能
双层吉士憨包1 小时前
Google Voice保号教程
大数据·服务器·人工智能
SeaTunnel2 小时前
Apache SeaTunnel 2.3.13 版本前瞻:核心引擎变化和 AI ETL 趋势值得关注
数据仓库·人工智能·apache·etl·seatunnel·数据同步
輕華2 小时前
零基础吃透 CNN 卷积神经网络:MNIST 手写数字识别实战全解(附完整可运行代码)
人工智能·神经网络·cnn
天涯明月19932 小时前
OpenClaw项目(龙虾)架构和实现原理详解
人工智能·大模型
Microvision维视智造2 小时前
小龙虾包装前缺陷智能视觉检测方案:告别人工分选,实现高效标准化品控
人工智能·计算机视觉·视觉检测·检测设备