# 朴素贝叶斯算法

# 直观理解

想象你是一个邮件系统的管理员,需要自动识别垃圾邮件。你会怎么做呢?

  1. 首先,你知道垃圾邮件和正常邮件的大致比例(先验概率)
  2. 然后,你发现垃圾邮件常常包含特定的词语,如"免费"、"中奖"等(特征概率)
  3. 当新邮件来时,你会根据这些词语的出现情况来判断它是否是垃圾邮件(后验概率)

这就是朴素贝叶斯的工作方式!

# 算法原理

# 基本概念(以垃圾邮件分类为例)

  • 先验概率:在没看邮件内容前,判断是垃圾邮件的可能性
  • 特征概率:某个词语在垃圾邮件中出现的可能性
  • 条件独立性:假设每个词语的出现相互不影响
  • 后验概率:看到邮件内容后,判断是垃圾邮件的可能性

# 算法流程

# 数学原理

# 贝叶斯定理

P(yx)=P(xy)P(y)P(x)P(y|x) = \frac{P(x|y)P(y)}{P(x)}

其中:

  • P(yx)P(y|x) 是后验概率:观察到特征x后,样本属于类别y的概率
  • P(xy)P(x|y) 是似然概率:类别为y的样本具有特征x的概率
  • P(y)P(y) 是先验概率:类别y在总体中出现的概率
  • P(x)P(x) 是证据因子:特征x出现的概率,可以通过全概率公式计算:

P(x)=yP(xy)P(y)P(x) = \sum_y P(x|y)P(y)

# 条件独立性假设

假设有n个特征,根据条件独立性假设,各个特征之间相互独立:

P(xy)=P(x1,x2,,xny)=i=1nP(xiy)P(x|y) = P(x_1,x_2,\ldots,x_n|y) = \prod_{i=1}^n P(x_i|y)

这个假设大大简化了计算复杂度,但也是朴素贝叶斯的"朴素

# 算法步骤

  1. 计算每个类别的先验概率
  2. 计算每个特征在各类别下的条件概率
  3. 对新样本,计算每个类别的后验概率
  4. 选择后验概率最大的类别作为预测结果

# 优缺点

# 优点

  • 算法简单,计算效率高
  • 对小规模数据表现好
  • 对缺失值不敏感
  • 适合增量学习

# 缺点

  • 特征独立性假设过强
  • 对数据分布敏感
  • 对零概率处理不当
  • 特征权重难以确定

# 应用场景

  1. 文本分类

    • 垃圾邮件过滤
    • 新闻分类
    • 情感分析
  2. 医疗诊断

    • 疾病诊断
    • 风险评估
    • 健康预测
  3. 多分类问题

    • 图像分类
    • 语音识别
    • 自然语言处理

# 代码示例

from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# 生成示例数据
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15,
                          n_redundant=5, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 创建朴素贝叶斯分类器
nb = GaussianNB()

# 训练模型
nb.fit(X_train, y_train)

# 预测
y_pred = nb.predict(X_test)

# 计算准确率
accuracy = nb.score(X_test, y_test)
print(f"模型准确率: {accuracy:.2f}")

# 预测概率
prob = nb.predict_proba(X_test)
print("\n预测概率示例:")
for i in range(5):
    print(f"样本 {i+1}: {prob[i]}")

# 调优技巧

  1. 数据预处理

    • 处理缺失值
    • 特征选择
    • 特征编码
  2. 概率平滑

    • 拉普拉斯平滑
    • 加法平滑
    • 贝叶斯估计
  3. 模型选择

    • 高斯朴素贝叶斯
    • 多项式朴素贝叶斯
    • 伯努利朴素贝叶斯

# 常见问题与解决方案

  1. 零概率问题

    • 使用平滑技术
    • 对数概率转换
    • 特征值离散化
  2. 特征相关性

    • 特征选择
    • 特征组合
    • 使用其他模型补充
  3. 类别不平衡

    • 调整先验概率
    • 采样平衡
    • 代价敏感学习