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

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

第六章 朴素贝叶斯


文章目录

  • [人工智能之核心基础 机器学习](#人工智能之核心基础 机器学习)
    • [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》

相关推荐
nvd119 分钟前
FastMCP 开发指南: 5分钟入门
人工智能·python
wp123_127 分钟前
反激应用1:1贴片耦合电感选择:Coilcraft LPD3015-473MR vs 国产兼容 TONEVEE CDD3015-473M
人工智能·制造
不错就是对27 分钟前
【agent-lightning】 - 2_使用 Agent-lightning 训练第一个智能体
人工智能·深度学习·神经网络·自然语言处理·chatgpt·transformer·vllm
zhengfei61130 分钟前
AI渗透工具—Shannon完全自主的AI渗透测试工具
人工智能·深度学习·web安全·知识图谱·测试覆盖率·安全性测试·威胁分析
愚公搬代码33 分钟前
【愚公系列】《AI+直播营销》004-重视直播营销,打造直播竞争力(直播活动的基本原理)
人工智能
哥本哈士奇38 分钟前
简单的神经网络计算过程 - 正负判断
人工智能·深度学习·神经网络
自动驾驶小学生44 分钟前
Transformer和LLM前沿内容(3):LLM Post-Training
人工智能·深度学习·transformer
imbackneverdie1 小时前
从零到一,如何用AI高效构建国自然申请书初稿?
人工智能·自然语言处理·aigc·科研·ai写作·学术·国家自然科学基金
Mike_detailing1 小时前
Tensors (张量)
人工智能·pytorch·深度学习
三木今天学习了嘛1 小时前
【Archived 2025】
人工智能