本文参考了周志华老师的《机器学习》(俗称“西瓜书”)。这里是 第七章“贝叶斯分类器” 的阅读笔记。本文专注于朴素贝叶斯分类器,并且记录了我的思考,希望对你有所帮助🎉


1. 贝叶斯算法的基础概念

1.1 什么是贝叶斯定理

贝叶斯定理是一个描述 条件概率关系 的公式,它表示在已知某些事件发生的条件下,如何计算另一个事件的概率。公式如下:

$$ P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)} $$

其中:


1.2 贝叶斯思想的核心

贝叶斯思想的核心是:通过观察数据更新对未知事件的概率分布。它以初始的先验概率 P(A)为基础,通过观测 B的发生,利用P(B|A)更新 A 的概率,得到后验概率 P(A|B)。


2. 朴素贝叶斯分类器

2.1 基本思想

朴素贝叶斯分类器是基于贝叶斯定理的简单分类算法,假设特征之间是 条件独立 的。

后验概率公式

$$ P(C|X) \propto P(C) \cdot \prod_{i=1}^n P(X_i|C) $$

其中:

例子

2.2 常见模型

1. 高斯朴素贝叶斯(Gaussian Naive Bayes)
适用于 连续特征 的分类问题,假设每个特征服从高斯分布:

$$ P(X_i|C) = \frac{1}{\sqrt{2\pi \sigma^2}} e^{-\frac{(X_i - \mu)^2}{2\sigma^2}} $$

其中:

2. 多项式朴素贝叶斯(Multinomial Naive Bayes)
适用于 离散特征,如文本分类问题中词频统计,假设特征服从多项式分布。

3. 伯努利朴素贝叶斯(Bernoulli Naive Bayes)
适用于 二元特征,特征值为 0 或 1,例如是否包含某个单词。


3. 拉普拉斯平滑

3.1 为什么需要平滑

在朴素贝叶斯中,条件概率 P(X_i|C) 的计算基于样本统计。如果某些特征值在训练集中未出现,则会导致概率为 0。为了避免这种问题,引入了 拉普拉斯平滑

3.2 平滑公式

对于特征 (X_i) 在类别 (C) 下的条件概率:

$$ P(X_i|C) = \frac{\text{count}(X_i, C) + \alpha}{\text{count}(C) + \alpha N} $$

其中:


4. 贝叶斯算法的应用

4.1 文本分类

4.2 医疗诊断

4.3 文档主题分析


5. Scikit-learn 实现朴素贝叶斯

以下代码展示如何使用 Scikit-learn 实现高斯朴素贝叶斯、多项式朴素贝叶斯和伯努利朴素贝叶斯。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB, MultinomialNB, BernoulliNB
from sklearn.metrics import accuracy_score

# 1. 加载数据集
data = load_iris()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 2. 高斯朴素贝叶斯
gnb = GaussianNB()
gnb.fit(X_train, y_train)
y_pred_gnb = gnb.predict(X_test)
print("高斯朴素贝叶斯准确率:", accuracy_score(y_test, y_pred_gnb))

# 3. 多项式朴素贝叶斯
# (需要离散数据,例如文本特征)
X_train_discrete = (X_train * 10).astype(int)  # 简单离散化特征
X_test_discrete = (X_test * 10).astype(int)
mnb = MultinomialNB()
mnb.fit(X_train_discrete, y_train)
y_pred_mnb = mnb.predict(X_test_discrete)
print("多项式朴素贝叶斯准确率:", accuracy_score(y_test, y_pred_mnb))

# 4. 伯努利朴素贝叶斯
# (需要二元特征,模拟生成二值数据)
X_train_binary = (X_train > 2).astype(int)
X_test_binary = (X_test > 2).astype(int)
bnb = BernoulliNB()
bnb.fit(X_train_binary, y_train)
y_pred_bnb = bnb.predict(X_test_binary)
print("伯努利朴素贝叶斯准确率:", accuracy_score(y_test, y_pred_bnb))

6. 贝叶斯算法的优缺点

6.1 优点

6.2 缺点


7.头脑风暴

1. 贝叶斯在生物信息学中的应用

生物信息学的特点

贝叶斯算法的优势

  1. 适应小样本数据
    生物实验中数据量有限时,贝叶斯方法依赖先验知识进行推断,比完全数据驱动的方法更可靠。

  2. 处理噪声数据
    生物数据(如测序数据)常包含噪声,贝叶斯方法通过概率建模,天然对噪声具有鲁棒性。

  3. 动态更新数据
    在基因组进化研究中,随着新测序数据的加入,贝叶斯算法可以在线更新推断结果。

生信中的实际案例
序列比对: 隐马尔可夫模型(HMM),一种基于贝叶斯思想的方法,广泛应用于序列比对和基因识别。

进化树构建: 贝叶斯推断用于重建物种间的进化关系,通过最大化后验概率获得最优进化树。


2. 贝叶斯算法的挑战与改进

常见挑战

  1. 计算复杂性
    贝叶斯推断通常涉及高维积分,计算成本较高。

  2. 先验知识的选择
    不同的先验分布可能对结果有显著影响,选择合适的先验是个挑战。

  3. 大规模数据的处理
    面对海量数据时,传统贝叶斯方法可能效率较低,需要借助近似推断技术。

改进方向
结合深度学习:

先验分布的自动化选择:


文章参考