Jupyter AI

16 贝叶斯分类的基本理论

📅 发表日期: 2024年8月15日

分类: 📊贝叶斯学习入门

👁️阅读: --

在本篇中,我们将深入探讨贝叶斯分类的基本理论,这是贝叶斯学习和统计推断中一个重要的主题。贝叶斯分类的本质是通过先验知识和观察数据的结合,对未知的类别进行推断。相较于贝叶斯回归更关注于数值预测,贝叶斯分类则关注于基于特征对样本进行分类的问题。

贝叶斯分类器的基本思想

贝叶斯分类器基于贝叶斯定理,其形式如下:

P(CX)=P(XC)P(C)P(X)P(C|X) = \frac{P(X|C)P(C)}{P(X)}

在上述公式中:

  • P(CX)P(C|X) 是给定特征 XX 后类别 CC 的后验概率;
  • P(XC)P(X|C) 是类别 CC 的似然函数,即在类别 CC 下观察到特征 XX 的概率;
  • P(C)P(C) 是类别 CC 的先验概率;
  • P(X)P(X) 是特征 XX 的边际概率,用于标准化后验概率。

为了进行分类,我们需要选择概率最大的类别,常常采用以下规则:

C^=argmaxCP(CX)\hat{C} = \arg\max_{C} P(C|X)

先验概率、似然函数和边际概率

先验概率

先验概率 P(C)P(C) 是在没有任何观察数据的情况下对每个类别的信念。我们可以根据历史数据或领域知识设定这些概率。

例如,在一个肿瘤分类问题中,假设我们知道恶性肿瘤(类别 C1C_1)的发生率为 10%,则 P(C1)=0.1P(C_1) = 0.1,良性肿瘤(类别 C2C_2)的发生率为 90%,则 P(C2)=0.9P(C_2) = 0.9

似然函数

似然函数 P(XC)P(X|C) 则是在已知类别下特征的发生概率。这要求我们对特征的分布有一定的假设。在许多情况下,我们假设特征是独立的,并且可以用高斯分布、伯努利分布等来描述特征的分布。

例如,在我们的肿瘤分类问题中,特征可以是肿瘤大小、形态等。假设肿瘤大小在良性肿瘤中服从 N(5,22)\mathcal{N}(5, 2^2),而在恶性肿瘤中服从 N(10,32)\mathcal{N}(10, 3^2),即:

P(XC1)=12π3exp((X10)2232)P(X|C_1) = \frac{1}{\sqrt{2\pi}\cdot 3} \exp\left(-\frac{(X-10)^2}{2\cdot 3^2}\right) P(XC2)=12π2exp((X5)2222)P(X|C_2) = \frac{1}{\sqrt{2\pi}\cdot 2} \exp\left(-\frac{(X-5)^2}{2\cdot 2^2}\right)

边际概率

边际概率 P(X)P(X) 通常不需要显式计算,因为在分类中我们只需要比较后验概率。边际概率可以通过全概率公式计算:

P(X)=CP(XC)P(C)P(X) = \sum_{C} P(X|C)P(C)

贝叶斯分类器的实现

下面我们通过 Python 示例演示如何构建一个简单的贝叶斯分类器。我们使用的是 scikit-learn 中的 GaussianNB 来实现高斯贝叶斯分类器。

import numpy as np
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 假设我们有以下特征和标签
X = np.array([[5], [6], [8], [9], [10], [3], [4], [7], [2], [1]])
y = np.array([0, 0, 0, 1, 1, 1, 0, 1, 1, 0])  # 0: 良性, 1: 恶性

# 划分训练集和测试集
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}')

在这个例子中,我们创建了一个简单的二分类问题,使用高斯贝叶斯分类器来学习数据,并最终计算模型的准确率。

小结

本篇介绍了贝叶斯分类的基本理论,包括贝叶斯定理、先验概率、似然函数和边际概率的含义。我们还通过案例展示了如何使用 Python 实现一个基本的贝叶斯分类器。这些基础将为后续探索更复杂的贝叶斯分类技术提供理论支持。

接下来,我们将深入探讨朴素贝叶斯分类器,进一步了解其在实际中的应用。