【机器学习入门】第10讲:朴素贝叶斯与概率图模型——从文本分类到变量关系建模

资源软件动作暨昝绳鹤锁多好 /494b36Tkwj😕
链接:https://pan.quark.cn/s/43159509c536
「微信被删好友检测工具」筷莱坌教狴犴狾夺郝 链接:https://pan.quark.cn/s/43159509c536
链接:https://pan.quark.cn/s/4598337f6b3e
「【美剧系列】」链接:https://pan.quark.cn/s/663e3ca79519

复制群口令 !0b7236TlXn!😕
将加入群聊免费医院分享

引言:如何用概率思维过滤垃圾邮件?

假设你正在开发一款邮箱客户端:

  • 目标:自动识别垃圾邮件,准确率需达95%以上
  • 挑战
    • 邮件内容包含组合关键词(如"免费领取"+“限时优惠”)
    • 需快速处理海量文本(每秒处理100+封邮件)
  • 需求:模型需要实时更新,适应新型垃圾邮件模式

这正是朴素贝叶斯的用武之地! 本文将解析这一基于概率的高效分类器,并探索其与概率图模型的深层联系。


一、贝叶斯定理:概率推理的基石

1.1 从条件概率到贝叶斯公式

  • 条件概率P(A|B) = P(A∩B)/P(B)
  • 贝叶斯公式
    P(Y|X) = P(X|Y)P(Y) / P(X)
    
    • 后验概率 P(Y|X):观察到X后Y发生的概率
    • 先验概率 P(Y):未观察X时Y的初始概率

经典案例:疾病检测

  • 假设某疾病患病率1%,检测准确率99%
  • 若检测阳性,真实患病概率仅为约50%(需考虑先验概率)

二、朴素贝叶斯:条件独立的智慧

2.1 "朴素"的假设与合理性

  • 核心假设:特征在给定类别下条件独立
    P(X₁,X₂,...,Xₙ|Y) = P(X₁|Y)P(X₂|Y)...P(Xₙ|Y)
    
  • 实际意义:虽然现实中特征常相关,但简化计算后仍能有效分类

代码示例:高斯朴素贝叶斯

from sklearn.naive_bayes import GaussianNB  
from sklearn.datasets import load_iris  

# 加载鸢尾花数据集  
X, y = load_iris(return_X_y=True)  

# 训练模型  
model = GaussianNB()  
model.fit(X, y)  

# 预测概率  
print("预测概率示例:\n", model.predict_proba(X[:3]))  
"""  
输出示例:  
[[1. 0. 0.]  
 [1. 0. 0.]  
 [1. 0. 0.]]  
"""  

2.2 三种常见变体对比

类型假设分布适用场景
高斯朴素贝叶斯特征服从高斯分布连续特征(如温度、价格)
多项式朴素贝叶斯特征为词频计数文本分类、NLP
伯努利朴素贝叶斯特征为二元出现标记短文本、推荐系统

三、文本分类实战:新闻主题识别

3.1 数据预处理流程

from sklearn.datasets import fetch_20newsgroups  
from sklearn.feature_extraction.text import TfidfVectorizer  

# 加载20类新闻数据  
categories = ['sci.space', 'comp.graphics', 'rec.sport.baseball']  
newsgroups = fetch_20newsgroups(categories=categories)  

# TF-IDF向量化(限制最大特征数)  
vectorizer = TfidfVectorizer(max_features=2000)  
X = vectorizer.fit_transform(newsgroups.data)  
y = newsgroups.target  

# 划分数据集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)  

3.2 模型训练与评估

from sklearn.naive_bayes import MultinomialNB  
from sklearn.metrics import classification_report  

model = MultinomialNB(alpha=0.01)  # 拉普拉斯平滑  
model.fit(X_train, y_train)  

# 输出分类报告  
print(classification_report(y_test, model.predict(X_test)))  
"""  
              precision    recall  f1-score  支持  
           0       0.98      0.96      0.97       192  
           1       0.96      0.98      0.97       195  
           2       0.98      0.97      0.98       198  
    准确率                           0.97       585  
"""  

四、概率图模型:超越朴素假设

4.1 从朴素贝叶斯到贝叶斯网络

  • 核心思想:用图结构表示变量间的条件依赖关系
  • 组成要素
    • 节点:随机变量
    • 边:变量间的依赖关系
    • 条件概率表(CPT):量化依赖强度

简单贝叶斯网络示例(天气与户外活动):

[季节] → [天气] → [户外活动]  
          ↑  
[地理位置]  

4.2 马尔可夫网络与因子图

类型边类型表达能力
贝叶斯网络有向边因果关系
马尔可夫网络无向边相关关系

代码示例:用pgmpy构建贝叶斯网络

from pgmpy.models import BayesianNetwork  
from pgmpy.factors.discrete import TabularCPD  

# 定义网络结构  
model = BayesianNetwork([  
    ('Season', 'Weather'),  
    ('Location', 'Weather'),  
    ('Weather', 'OutdoorActivity')  
])  

# 添加条件概率表  
cpd_season = TabularCPD('Season', 4, [[0.25],[0.25],[0.25],[0.25]])  
cpd_location = TabularCPD('Location', 2, [[0.5],[0.5]])  
cpd_weather = TabularCPD('Weather', 3,  
                        evidence=['Season', 'Location'],  
                        evidence_card=[4, 2],  
                        values=[[...]])  # 实际需填充概率值  
model.add_cpds(cpd_season, cpd_location, cpd_weather)  

五、朴素贝叶斯的优缺点与调参技巧

5.1 优势与局限

优势局限
训练速度快,适合高维数据条件独立假设过于强
对缺失数据不敏感概率估计可能不够准确
可解释性强不适用于复杂依赖关系的数据

5.2 关键参数解析

  • alpha(平滑参数)
    • 防止零概率问题(通常设为1,拉普拉斯平滑)
    • 过大会导致欠拟合,过小可能过拟合
  • fit_prior:是否学习类别先验概率(默认True)

六、总结与进阶方向

6.1 学习要点回顾

  1. 朴素贝叶斯基于条件独立假设,适合文本等高维稀疏数据
  2. 概率图模型通过图结构表达变量依赖关系
  3. 贝叶斯网络适合建模因果关系,马尔可夫网络适合相关关系

6.2 延伸学习建议

  1. 主题模型:Latent Dirichlet Allocation (LDA)
  2. 概率编程:Pyro、PyMC3等库实现复杂贝叶斯模型
  3. 深度概率模型:贝叶斯神经网络
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉亭下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值