【人工智能数学基础】——深入详解贝叶斯理论:掌握贝叶斯定理及其在分类和预测中的应用
贝叶斯分类器是一种基于贝叶斯定理的简单概率分类器,假设特征之间相互独立。尽管这个假设在现实中很少成立,但朴素贝叶斯分类器在许多实际应用中表现良好。贝叶斯优化是一种用于黑盒函数优化的序列设计策略,特别适用于评估成本高的函数。贝叶斯网络是一种概率图模型,用于表示变量间的依赖关系。这些代码示例覆盖了贝叶斯理论在分类和预测中的主要应用场景,包括离散特征和连续特征处理,以及更复杂的贝叶斯网络建模。贝叶斯定理
贝叶斯定理核心公式
贝叶斯定理的数学表达式为: [ P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)} ] 其中:
- ( P(A|B) ) 是后验概率
- ( P(B|A) ) 是似然概率
- ( P(A) ) 是先验概率
- ( P(B) ) 是边缘概率
朴素贝叶斯分类器实现
以下代码展示如何用Python实现朴素贝叶斯分类器,假设特征条件独立:
import numpy as np
from collections import defaultdict
class NaiveBayesClassifier:
def __init__(self):
self.class_priors = {}
self.feature_likelihoods = defaultdict(dict)
def fit(self, X, y):
# 计算先验概率
classes, counts = np.unique(y, return_counts=True)
total_samples = len(y)
self.class_priors = {c: count/total_samples for c, count in zip(classes, counts)}
# 计算条件概率
for feature_idx in range(X.shape[1]):
for cls in classes:
cls_mask = (y == cls)
feature_values = X[cls_mask, feature_idx]
unique_values, counts = np.unique(feature_values, return_counts=True)
total = len(feature_values)
self.feature_likelihoods[feature_idx][cls] = {
val: count/total for val, count in zip(unique_values, counts)
}
def predict(self, X):
predictions = []
for sample in X:
max_prob = -1
best_class = None
for cls, prior in self.class_priors.items():
posterior = prior
for feature_idx, value in enumerate(sample):
likelihoods = self.feature_likelihoods[feature_idx].get(cls, {})
prob = likelihoods.get(value, 1e-6) # 平滑处理
posterior *= prob
if posterior > max_prob:
max_prob = posterior
best_class = cls
predictions.append(best_class)
return np.array(predictions)
贝叶斯预测应用示例
使用scikit-learn实现文本分类:
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
# 创建模型管道
model = make_pipeline(
CountVectorizer(),
MultinomialNB()
)
# 示例数据
texts = ["good movie", "bad film", "great show", "terrible acting"]
labels = ["pos", "neg", "pos", "neg"]
# 训练模型
model.fit(texts, labels)
# 预测新样本
new_texts = ["awesome performance", "boring plot"]
predictions = model.predict(new_texts)
print(predictions) # 输出: ['pos' 'neg']
高斯朴素贝叶斯实现
对于连续特征,使用高斯分布假设:
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加载数据
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)
# 创建并训练模型
gnb = GaussianNB()
gnb.fit(X_train, y_train)
# 评估模型
accuracy = gnb.score(X_test, y_test)
print(f"Accuracy: {accuracy:.2f}")
贝叶斯网络实现
使用pgmpy库构建贝叶斯网络:
from pgmpy.models import BayesianNetwork
from pgmpy.factors.discrete import TabularCPD
# 定义网络结构
model = BayesianNetwork([('A', 'C'), ('B', 'C')])
# 定义条件概率分布
cpd_a = TabularCPD('A', 2, [[0.6], [0.4]])
cpd_b = TabularCPD('B', 2, [[0.7], [0.3]])
cpd_c = TabularCPD('C', 2,
[[0.9, 0.8, 0.7, 0.1],
[0.1, 0.2, 0.3, 0.9]],
evidence=['A', 'B'],
evidence_card=[2, 2])
# 添加CPD到模型
model.add_cpds(cpd_a, cpd_b, cpd_c)
# 验证模型
assert model.check_model()
# 进行概率推断
from pgmpy.inference import VariableElimination
infer = VariableElimination(model)
result = infer.query(['C'])
print(result)
这些代码示例覆盖了贝叶斯理论在分类和预测中的主要应用场景,包括离散特征和连续特征处理,以及更复杂的贝叶斯网络建模。
贝叶斯定理的核心概念
贝叶斯定理是概率论中的一个重要定理,描述了在已知某些条件下事件发生的概率如何更新。其数学表达式为:
$$ P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)} $$
其中:
- $P(A|B)$ 是后验概率,表示在事件B发生的条件下事件A发生的概率。
- $P(B|A)$ 是似然概率,表示在事件A发生的条件下事件B发生的概率。
- $P(A)$ 是先验概率,表示事件A发生的初始概率。
- $P(B)$ 是边际概率,表示事件B发生的总概率。
贝叶斯定理在分类中的应用
贝叶斯分类器是一种基于贝叶斯定理的简单概率分类器,假设特征之间相互独立。尽管这个假设在现实中很少成立,但朴素贝叶斯分类器在许多实际应用中表现良好。
分类器的决策规则可以表示为:
$$ P(Y|X) = \frac{P(X|Y) \cdot P(Y)}{P(X)} $$
其中:
- $Y$ 是类别变量。
- $X$ 是特征向量。
由于 $P(X)$ 对于所有类别相同,通常只需比较分子部分:
$$ P(Y|X) \propto P(X|Y) \cdot P(Y) $$
贝叶斯定理在预测中的应用
贝叶斯方法在预测中的优势在于能够结合先验知识和新数据更新预测结果。例如,在垃圾邮件过滤中:
- 先验概率 $P(\text{垃圾邮件})$ 是基于历史数据的初始估计。
- 似然概率 $P(\text{特定单词}| \text{垃圾邮件})$ 是基于训练数据计算的。
- 后验概率 $P(\text{垃圾邮件}| \text{特定单词})$ 是结合先验和似然更新后的预测。
贝叶斯网络的扩展应用
贝叶斯网络是一种概率图模型,用于表示变量间的依赖关系。它通过有向无环图(DAG)和条件概率表(CPT)来描述变量间的联合概率分布。
构建贝叶斯网络的步骤:
- 确定变量及其可能取值。
- 绘制变量间的依赖关系图。
- 为每个节点指定条件概率表。
贝叶斯优化方法
贝叶斯优化是一种用于黑盒函数优化的序列设计策略,特别适用于评估成本高的函数。其核心思想是利用高斯过程建模目标函数,并通过采集函数指导下一步评估点。
算法流程:
- 初始化:选择少量随机点评估目标函数。
- 建模:用高斯过程拟合观测数据。
- 优化:选择下一个评估点以最大化采集函数。
- 迭代:重复建模和优化直到满足停止条件。
贝叶斯方法的实际案例
在医疗诊断中,贝叶斯方法可用于疾病预测。例如,已知:
- 疾病患病率 $P(D)$ 为1%。
- 检测准确率 $P(T|D)$ 为99%。
- 假阳性率 $P(T|\neg D)$ 为5%。
计算检测阳性时实际患病的概率:
$$ P(D|T) = \frac{0.99 \times 0.01}{0.99 \times 0.01 + 0.05 \times 0.99} \approx 16.67% $$
这个结果表明即使检测阳性,实际患病概率仍然较低,体现了先验概率的重要性。
更多推荐
所有评论(0)