人工智能之核心基础 机器学习 第六章 朴素贝叶斯

人工智能之核心基础 机器学习

第六章 朴素贝叶斯


文章目录

  • [人工智能之核心基础 机器学习](#人工智能之核心基础 机器学习)
    • [6.1 贝叶斯定理基础](#6.1 贝叶斯定理基础)
      • [📌 核心公式:用已知反推未知](#📌 核心公式:用已知反推未知)
      • [💡 举个生活例子:疾病检测](#💡 举个生活例子:疾病检测)
    • [6.2 朴素贝叶斯的"朴素"假设](#6.2 朴素贝叶斯的“朴素”假设)
      • [🔑 核心假设:**特征条件独立**](#🔑 核心假设:特征条件独立)
    • [6.3 常见朴素贝叶斯模型](#6.3 常见朴素贝叶斯模型)
      • [📊 举例说明](#📊 举例说明)
    • [6.4 朴素贝叶斯的优缺点与适用场景](#6.4 朴素贝叶斯的优缺点与适用场景)
      • [✅ 优点](#✅ 优点)
      • [❌ 缺点](#❌ 缺点)
      • [🎯 最佳适用场景](#🎯 最佳适用场景)
    • [6.5 实战案例 + 代码实现](#6.5 实战案例 + 代码实现)
    • [🎯 本章总结](#🎯 本章总结)
  • 资料关注

6.1 贝叶斯定理基础

📌 核心公式:用已知反推未知

贝叶斯定理 告诉我们:

在看到某些证据后,如何更新对某件事发生的信念(概率)

公式如下:

P ( Y ∣ X ) = P ( X ∣ Y ) ⋅ P ( Y ) P ( X ) P(Y|X) = \frac{P(X|Y) \cdot P(Y)}{P(X)} P(Y∣X)=P(X)P(X∣Y)⋅P(Y)

  • P ( Y ∣ X ) P(Y|X) P(Y∣X):后验概率 ------ 看到数据 X X X 后,类别 Y Y Y 的概率(我们要预测的!)
  • P ( X ∣ Y ) P(X|Y) P(X∣Y):似然 ------ 如果是类别 Y Y Y,出现数据 X X X 的可能性
  • P ( Y ) P(Y) P(Y):先验概率 ------ 类别 Y Y Y 本身出现的频率(比如垃圾邮件占30%)
  • P ( X ) P(X) P(X):证据 ------ 数据 X X X 出现的总概率(对所有类别都一样,可忽略)

目标 :对每个类别 Y Y Y 计算 P ( Y ∣ X ) P(Y|X) P(Y∣X),选概率最大的那个!


💡 举个生活例子:疾病检测

  • 先验:人群中得病概率 P ( 病 ) = 1 % P(\text{病}) = 1\% P(病)=1%
  • 检测准确率:得病者检出阳性 P ( 阳 ∣ 病 ) = 99 % P(\text{阳}|\text{病}) = 99\% P(阳∣病)=99%
  • 假阳性率:健康人误检 P ( 阳 ∣ 健康 ) = 5 % P(\text{阳}|\text{健康}) = 5\% P(阳∣健康)=5%

问:你检测阳性,真得病的概率是多少?

用贝叶斯:

P ( 病 ∣ 阳 ) = 0.99 × 0.01 0.99 × 0.01 + 0.05 × 0.99 ≈ 16.7 % P(\text{病}|\text{阳}) = \frac{0.99 \times 0.01}{0.99 \times 0.01 + 0.05 \times 0.99} \approx 16.7\% P(病∣阳)=0.99×0.01+0.05×0.990.99×0.01≈16.7%

👉 即使检测阳性,真实得病概率也不高!这就是先验的重要性。


6.2 朴素贝叶斯的"朴素"假设

🔑 核心假设:特征条件独立

给定类别 Y Y Y,所有特征 x 1 , x 2 , . . . , x n x_1, x_2, ..., x_n x1,x2,...,xn 相互独立

即:

P ( X ∣ Y ) = P ( x 1 , x 2 , . . . , x n ∣ Y ) = P ( x 1 ∣ Y ) ⋅ P ( x 2 ∣ Y ) ⋅ . . . ⋅ P ( x n ∣ Y ) P(X|Y) = P(x_1, x_2, ..., x_n | Y) = P(x_1|Y) \cdot P(x_2|Y) \cdot ... \cdot P(x_n|Y) P(X∣Y)=P(x1,x2,...,xn∣Y)=P(x1∣Y)⋅P(x2∣Y)⋅...⋅P(xn∣Y)

❗ 这个假设在现实中几乎不成立 (比如"免费"和"赢钱"在垃圾邮件中常一起出现)

但神奇的是------即使假设错误,朴素贝叶斯依然效果很好!

为什么能work?

  • 分类只需比较相对大小,不需要精确概率
  • 对噪声和无关特征鲁棒
  • 训练快、参数少,不易过拟合

6.3 常见朴素贝叶斯模型

根据特征类型不同,选择不同概率分布:

模型 特征类型 概率分布 典型场景
高斯朴素贝叶斯 连续数值 假设特征服从正态分布 身高、体重、温度等连续值
多项式朴素贝叶斯 离散计数 特征为词频/次数 文本分类(TF、TF-IDF)
伯努利朴素贝叶斯 二值特征 特征为0/1(是否出现) 短文本、关键词存在性

📊 举例说明

  • 邮件内容 :"免费 免费 赢钱"
    • 多项式NB:统计词频 → "免费":2, "赢钱":1
    • 伯努利NB:只看是否出现 → "免费":1, "赢钱":1

📌 文本分类首选:多项式NB(保留词频信息)


6.4 朴素贝叶斯的优缺点与适用场景

✅ 优点

优势 说明
训练极快 只需统计频率,无需迭代
内存占用小 存储每个特征的分布参数
对小样本有效 即使数据少也能工作
天然支持多分类 直接计算所有类别概率
对噪声鲁棒 无关特征影响小

❌ 缺点

劣势 说明
独立性假设太强 实际特征常相关
无法捕捉特征交互 比如"不+好" ≠ "不好"
概率估计不准 输出概率不可靠(但排序可用)
零概率问题 某词在训练集中未出现 → 概率为0 → 整体为0

🔧 解决零概率拉普拉斯平滑 (Laplace Smoothing)

给每个计数加1,避免0概率


🎯 最佳适用场景

  • 文本分类(垃圾邮件、情感分析、新闻分类)
  • 实时预测(因推理速度极快)
  • 高维稀疏数据(如词袋模型)
  • ❌ 不适合:需要精确概率、特征高度相关、连续特征非高斯分布

💡 行业事实

尽管深度学习流行,朴素贝叶斯仍是工业界文本分类的baseline首选


6.5 实战案例 + 代码实现

案例1:垃圾邮件过滤(多项式NB)

python 复制代码
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
from sklearn.metrics import classification_report

# 构造垃圾邮件 vs 正常邮件数据(简化版)
emails = [
    "Free money now!!!", 
    "Win a million dollars!", 
    "Hey, how are you?", 
    "Meeting tomorrow at 3pm",
    "Claim your prize today!",
    "Can we reschedule the call?"
]
labels = [1, 1, 0, 0, 1, 0]  # 1=垃圾, 0=正常

# 创建管道:词袋 → TF-IDF → 多项式NB
text_clf = Pipeline([
    ('vect', CountVectorizer()),          # 生成词频
    ('tfidf', TfidfTransformer()),        # 转TF-IDF
    ('clf', MultinomialNB(alpha=1.0))     # alpha=拉普拉斯平滑参数
])

# 训练
text_clf.fit(emails, labels)

# 预测新邮件
new_emails = ["Congratulations! You won free cash!", "Let's have lunch"]
preds = text_clf.predict(new_emails)
for email, pred in zip(new_emails, preds):
    print(f"'{email}' → {'垃圾邮件' if pred == 1 else '正常邮件'}")

输出:

复制代码
'Congratulations! You won free cash!' → 垃圾邮件
'Let's have lunch' → 正常邮件

案例2:电影评论情感分析(正面/负面)

python 复制代码
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 模拟数据
reviews = [
    "This movie is amazing!", 
    "I love the acting", 
    "Terrible film, waste of time",
    "Boring and slow",
    "Great story and visuals",
    "Awful dialogue"
]
sentiments = [1, 1, 0, 0, 1, 0]  # 1=正面, 0=负面

# 划分数据
X_train, X_test, y_train, y_test = train_test_split(
    reviews, sentiments, test_size=0.3, random_state=42
)

# 向量化 + 训练
vectorizer = TfidfVectorizer()
X_train_vec = vectorizer.fit_transform(X_train)
X_test_vec = vectorizer.transform(X_test)

nb = MultinomialNB(alpha=0.5)
nb.fit(X_train_vec, y_train)

# 评估
y_pred = nb.predict(X_test_vec)
print("准确率:", accuracy_score(y_test, y_pred))

# 查看预测概率
proba = nb.predict_proba(X_test_vec)
for i, text in enumerate(X_test):
    print(f"'{text}' → 正面概率: {proba[i][1]:.2f}")

案例3:高斯NB ------ 鸢尾花分类(连续特征)

python 复制代码
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

gnb = GaussianNB()
gnb.fit(X_train, y_train)

print("准确率:", gnb.score(X_test, y_test))

🎯 本章总结

  • 朴素贝叶斯 = 贝叶斯定理 + 特征独立假设
  • 文本分类用多项式NB,连续数据用高斯NB
  • 训练快、内存小、对小数据友好
  • 虽"朴素",但在文本任务中常胜!

💡 建议

下次做文本分类项目,先跑一个朴素贝叶斯作为baseline

它可能比你想象的更强,而且几行代码就能搞定!


资料关注

公众号:咚咚王

gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》

《利用Python进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第3版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow机器学习实战指南》

《Sklearn与TensorFlow机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第2版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨+&+张孜铭

《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战AI大模型》

《AI 3.0》

相关推荐
Codebee3 小时前
能力中心 (Agent SkillCenter):开启AI技能管理新时代
人工智能
聆风吟º4 小时前
CANN runtime 全链路拆解:AI 异构计算运行时的任务管理与功能适配技术路径
人工智能·深度学习·神经网络·cann
uesowys4 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
AI_56784 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
User_芊芊君子4 小时前
CANN大模型推理加速引擎ascend-transformer-boost深度解析:毫秒级响应的Transformer优化方案
人工智能·深度学习·transformer
智驱力人工智能4 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
qq_160144875 小时前
亲测!2026年零基础学AI的入门干货,新手照做就能上手
人工智能
Howie Zphile5 小时前
全面预算管理难以落地的核心真相:“完美模型幻觉”的认知误区
人工智能·全面预算
人工不智能5775 小时前
拆解 BERT:Output 中的 Hidden States 到底藏了什么秘密?
人工智能·深度学习·bert
盟接之桥5 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造