机器学习(六)朴素贝叶斯分类

一 贝叶斯分类理论

有一个数据集,有两类数据租车给,数据分布如下:

用p1(x,y)表示数据点(x,y)属于类别1,也就是红色表示的类别的概率;

用p2(x,y)表示数据点(x,y)属于类别2,也就是蓝色表示的类别概率;

那么对于新数据点(x,y),可以用下面的规则来判断它的类别:

如果p1(x,y)>p2(x,y),那么类别为1

如果p1(x,y)<p2(x,y),那么类别为2

可以看出来,我们会选择高概率对应的类别,贝叶斯决策理论的核心就是选择最高概率的决策。

二 条件概率

条件概率是指事件A在另外一个事件B已经发生条件下的发生概率,也就是P(A|B)。

事件A发生的概率就是P(A∩B)除以P(B)。

𝑃(𝐴|𝐵)=𝑃(𝐴∩𝐵)/𝑃(𝐵),因此,𝑃(𝐴∩𝐵)=𝑃(𝐴|𝐵)𝑃(𝐵)

𝑃(𝐴∩𝐵)=𝑃(𝐵|𝐴)𝑃(𝐴),即𝑃(𝐴|𝐵)=𝑃(B|A)𝑃(𝐴)/𝑃(𝐵)

这就是条件概率的计算公式。

三 全概率公式

假定样本空间s,是两个事件A和A'的和。

那么事件B可以划分为两个部分。

即:𝑃(𝐵)=𝑃(𝐵∩𝐴)+𝑃(𝐵∩𝐴′)

在上面的推导当中,我们已知𝑃(𝐵∩𝐴)=𝑃(𝐵|𝐴)𝑃(𝐴)

所以𝑃(𝐵)=𝑃(𝐵|𝐴)𝑃(𝐴)+𝑃(𝐵|𝐴′)𝑃(𝐴′)

这就是全概率公式。

含义就是,如果A和A'构成样本空间的一个划分,那么B的改了,就等于A和A'的概率分别乘以B对这两个事件的条件概率之和。

那么条件概率可以变换为:

四 贝叶斯推断

条件概率变形:

P(A)称为"先验概率"(Prior probability),即在B事件发生之前,我们对A事件概率的一个判断。

P(A|B)称为"后验概率"(Posterior probability),即在B事件发生之后,我们对A事件概率的重新评估。

P(B|A)/P(B)称为"可能性函数"(Likelyhood),调整因子,使得预估概率更接近真实概率。

】条件概率可以理解:后验概率 = 先验概率x调整因子

这就是贝叶斯推断的含义。我们先预估一个"先验概率",然后加入实验结果,看这个实验到底是增强还是削弱了"先验概率",由此得到更接近事实的"后验概率"。

五 朴素贝叶斯推断

贝叶斯和朴素贝叶斯的概念是不同的,区别就在于"朴素"二字。朴素贝叶斯对条件概率分布做了条件独立性的假设。

比如下面的公式,假设有n个特征:

根据贝叶斯定理,后验概率 P(a|X) 可以表示为:

其中:

P(X|a) 是给定类别 ( a ) 下观测到特征向量 X=(x_1, x_2, ..., x_n) 的概率;

P(a) 是类别 a 的先验概率;

P(X) 是观测到特征向量 X 的边缘概率,通常作为归一化常数处理。

朴素贝叶斯分类器的关键假设是特征之间的条件独立性,即给定类别 a ,特征 x_i 和 x_j (其中相互独立。)

因此,我们可以将联合概率 P(X|a) 分解为各个特征的概率乘积:

将这个条件独立性假设应用于贝叶斯公式,我们得到:

通过计算每种可能类别的条件概率和先验概率,选择具有最高概率的类别作为预测结果。

六 拉普拉斯平滑系数

因为某些事件或者特征可能从未出现,会导致它们的概率被估计为0。

在实际应用中,即使某个事件或特征没有出现在训练集,也不排除其在以后的样本出现。

而我们的拉普拉斯平滑技术可以避免这种零概率陷阱。

一般我们的α取值为1,m为总的特征的数量。

即使某个特征在训练集指令从未出现,它的概率也不会被估计为0,而是会被赋予一个很小但是非0的值,从而避免了模型在面对新数据时可能出现的过拟合或预测错误。

七 API

复制代码
sklearn.naive_bayes.MultinomialNB()estimator.fit(x_train, y_train)y_predict = estimator.predict(x_test)

代码实例:

复制代码
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
# 1)获取数据
news =load_iris()
# 2)划分数据集
x_train, x_test, y_train, y_test = train_test_split(news.data, news.target)
# 3)特征工程:不用做标准化
# 4)朴素贝叶斯算法预估器流程
estimator = MultinomialNB()
estimator.fit(x_train, y_train)
# 5)模型评估
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
# 6)预测
index=estimator.predict([[2,2,3,1]])
print("预测:\n",index,news.target_names,news.target_names[index])

补充:贝叶斯实现葡萄酒分类

相关推荐
2601_95741880几秒前
AI美颜本地跑支持手机、电脑、苹果系统
人工智能·ai
AI_Auto2 分钟前
工业与AI融合应用 | 四个实战用例!机械装备行业AI+数字孪生+机器人落地全景
大数据·人工智能·机器人·制造
Ww.xh3 分钟前
AI助手高并发性能优化四策
人工智能
浩哥学JavaAI3 分钟前
2026年最新AI agent面试(07)_大模型架构基础
人工智能·面试·架构
灵机一物10 分钟前
内存虚拟化软件哪家好:AI 与 CXL 时代的选型方法
人工智能
故乡de云16 分钟前
AWS 添加付款方式失败排查清单:卡片、银行风控与账号状态逐项定位
开发语言·php
其美杰布-富贵-李19 分钟前
Spring Boot 依赖注入说明文档
java·spring boot·python
J_yyy23 分钟前
【Qt核心组件类框架】
开发语言·qt
tachibana224 分钟前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode
our_times29 分钟前
2026年Java开发者破局指南:Spring AI 2.0 与 Agent 开发实战
java·人工智能·spring