机器学习(6)——朴素贝叶斯

文章目录

  • 1. 什么是朴素贝叶斯算法?
  • 2. 核心思想
  • 3. 数学基础
  • 3. 算法步骤
    • 3.1. 计算先验概率
    • 3.2. 计算条件概率
  • 4. 常见变种
  • 5. 优缺点
  • 6. 零概率问题与平滑技术
  • 7. 应用场景
  • 8. Python 示例
  • 9. 参数调优
  • 10. 总结

1. 什么是朴素贝叶斯算法?

朴素贝叶斯算法(Naive Bayes)是一种基于贝叶斯定理的概率分类算法,在机器学习和数据挖掘中广泛应用。它被称为“朴素”的原因是它假设特征之间是条件独立的,这简化了模型的复杂度,使得它在许多实际问题中能够表现得相当高效,尤其适用于文本分类、垃圾邮件识别等任务。

2. 核心思想

  • 朴素贝叶斯是基于贝叶斯定理的概率分类算法,其核心假设是:

    • 特征条件独立性:所有特征在给定类别下相互独立(“朴素”一词的来源)。

    • 贝叶斯定理:通过先验概率和似然计算后验概率,选择概率最大的类别作为预测结果。

3. 数学基础

  • 贝叶斯定理: 通过已知条件的概率来计算某个事件发生的概率
    P ( Y ∣ X ) = P ( X ∣ Y ) ⋅ P ( Y ) P ( X ) P(Y|X) = \frac{P(X|Y) \cdot P(Y)}{P(X)} P(YX)=P(X)P(XY)P(Y)

    • P ( Y ∣ X ) P(Y∣X) P(YX):后验概率(给定特征 X X X 下类别 Y Y Y 的概率)。

    • P ( X ∣ Y ) P(X∣Y) P(XY):似然(类别 Y Y Y 下特征 X X X 的联合概率)。

    • P ( Y ) P(Y) P(Y):先验概率(类别 Y Y Y 的初始概率)。

    • P ( X ) P(X) P(X):证据(特征 X 的边缘概率,通常忽略因对所有类别相同)。

  • 朴素假设(特征独立): 假设特征之间是条件独立的。
    P ( X ∣ Y ) = ∏ i = 1 n P ( x i ∣ Y ) P(X|Y) = \prod_{i=1}^{n} P(x_i|Y) P(XY)=i=1nP(xiY)

    • 其中 x i x_i xi是第 i i i 个特征。

3. 算法步骤

3.1. 计算先验概率

P ( Y = c k ) = 类别  c k  的样本数 总样本数 P(Y = c_k) = \frac{\text{类别 } c_k \text{ 的样本数}}{\text{总样本数}} P(Y=ck)=总样本数类别 ck 的样本数

3.2. 计算条件概率

  • 对离散特征:
    P ( x i ∣ Y = c k ) = 特征  x i  在类别  c k  中出现的次数 类别  c k  的样本数 P(x_i|Y = c_k) = \frac{\text{特征 } x_i \text{ 在类别 } c_k \text{ 中出现的次数}}{\text{类别 } c_k \text{ 的样本数}} P(xiY=ck)=类别 ck 的样本数特征 xi 在类别 ck 中出现的次数
  • 对连续特征(假设高斯分布)
    P ( x i ∣ Y = c k ) = 1 2 π σ k 2 exp ⁡ ( − ( x i − μ k ) 2 2 σ k 2 ) P(x_i|Y = c_k) = \frac{1}{\sqrt{2\pi\sigma_k^2}} \exp \left( -\frac{(x_i - \mu_k)^2}{2\sigma_k^2} \right) P(xiY=ck)=2πσk2 1exp(2σk2(xiμk)2)
    其中 μ k μ_k μk σ k σ_k σk 是类别 c k c_k ck下特征 x i x_i xi 的均值和标准差
  • 预测类别
    Y ^ = arg ⁡ max ⁡ c k P ( Y = c k ) ∏ i = 1 n P ( x i ∣ Y = c k ) \hat{Y} = \arg\max_{c_k} P(Y = c_k) \prod_{i=1}^{n} P(x_i|Y = c_k) Y^=argckmaxP(Y=ck)i=1nP(xiY=ck)

4. 常见变种

  • 高斯朴素贝叶斯(Gaussian Naive Bayes):
    P ( x i ∣ C k ) = 1 2 π σ k 2 exp ⁡ ( − ( x i − μ k ) 2 2 σ k 2 ) P(x_i|C_k) = \frac{1}{\sqrt{2\pi\sigma_k^2}} \exp \left( -\frac{(x_i - \mu_k)^2}{2\sigma_k^2} \right) P(xiCk)=2πσk2 1exp(2σk2(xiμk)2)

    • 假设连续特征服从高斯分布,适用于数值型数据。
  • 多项式朴素贝叶斯(Multinomial Naive Bayes):
    P ( x i ∣ C k ) = ( n i + α ) x i ( n k + α n i ) ! ⋅ ∏ i = 1 n ( x i + α ) ( n k + α n i ) ! P(x_i|C_k) = \frac{(n_i + \alpha)^{x_i}}{(n_k + \alpha n_i)!} \cdot \prod_{i=1}^{n} \frac{(x_i + \alpha)}{(n_k + \alpha n_i)!} P(xiCk)=(nk+αni)!(ni+α)xii=1n(nk+αni)!(xi+α)

    • 适用于离散特征(如文本分类中的词频统计)。
  • 伯努利朴素贝叶斯(Bernoulli Naive Bayes):

    • 适用于二值特征(如文本分类中的单词是否出现)。

5. 优缺点

  • ✅ 优点:

    • 计算高效:训练和预测速度快。

    • 对小规模数据表现好:尤其适合高维稀疏数据(如文本)。

    • 可处理多分类。

  • ❌ 缺点:

    • 独立性假设过强:实际场景中特征可能相关。

    • 对输入数据分布敏感:若假设(如高斯)不成立,效果下降。

    • 零概率问题:未出现的特征组合会导致概率为零(需平滑处理)。

6. 零概率问题与平滑技术

  • 拉普拉斯平滑(Laplace Smoothing):
    P ( x i ∣ Y = c k ) = 计数 + α 总计数 + α ⋅ N P(x_i|Y = c_k) = \frac{\text{计数} + \alpha}{\text{总计数} + \alpha \cdot N} P(xiY=ck)=总计数+αN计数+α
    • α = 1 α=1 α=1(加1平滑)。
    • N N N 是特征的可能取值数。

7. 应用场景

  • 文本分类(垃圾邮件检测、情感分析)。

  • 推荐系统(协同过滤的补充)。

  • 医学诊断(症状与疾病的概率关系)

8. Python 示例

# 导入必要的库
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score

# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data  # 特征
y = iris.target  # 标签

# 将数据集分成训练集和测试集,80%用于训练,20%用于测试
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建高斯朴素贝叶斯模型
model = GaussianNB()

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

# 在测试集上进行预测
y_pred = model.predict(X_test)

# 输出准确度
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确度: {accuracy:.2f}")

# 输出一些预测结果
print(f"预测结果: {y_pred}")
print(f"实际结果: {y_test}")

9. 参数调优

  • 平滑参数 α(仅适用于离散数据):

    • 较小值:更信任训练数据。

    • 较大值:更强的平滑(防止过拟合)。

10. 总结

朴素贝叶斯是一种简单但强大的概率分类器,尤其适合高维稀疏数据和实时预测场景。尽管其独立性假设在实际中可能不成立,但在许多任务(如文本分类)中仍表现优异。理解其数学基础(贝叶斯定理)和变种(高斯/多项式/伯努利)是灵活应用的关键。

你可能感兴趣的:(机器学习,机器学习,人工智能,概率论)