机器学习 - 朴素贝叶斯分类器

朴素贝叶斯分类器,在机器学习中是一系列以假设特征之间强独立下运用贝叶斯定理为基础的简单概率分类器。

贝叶斯公式

定义: 承接 全概率公式,若已知 B 发生了,执果索因,有

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

称为贝叶斯公式(贝叶斯定理)

朴素贝叶斯的类型

朴素贝叶斯算法适用于不同场景,分为以下几种常见类型:

  • 高斯朴素贝叶斯:假设数据特征符合高斯分布,常用于处理连续数据。
  • 多项式朴素贝叶斯:假设数据符合多项式分布,适用于文本分类等离散数据。
  • 伯努利朴素贝叶斯:假设特征为二元变量(0 或 1),适合二元分类问题。

朴素贝叶斯的应用场景

朴素贝叶斯的计算速度快,尤其适用于以下场景:

  • 文本分类:如垃圾邮件检测、情感分析、新闻分类等任务。
  • 文档分类:适用于多类别文档的分类。
  • 情感分析:可以分析评论或反馈中的情感倾向。

优缺点分析

优点

  • 简单高效:由于假设特征独立性,计算量较小。
  • 速度快:特别适合大规模数据。
  • 适用性广:能处理离散或连续数据。

缺点

  • 特征独立假设不总是成立:实际中特征往往存在相关性。
  • 数据不足时表现不佳:在数据较少时分类效果可能较差。
  • 零概率问题:如果某特征值在训练集中未出现,赋予其零概率可能导致分类错误。

Python 代码示例

以下是用 Python 和scikit-learn库实现的朴素贝叶斯分类示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score

# 加载数据集
data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, 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}")