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

发布于:2025-09-04 ⋅ 阅读:(22) ⋅ 点赞:(0)

一 贝叶斯分类理论

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

用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|B)=\frac{P(B|A)P(A)}{P(B|A)P(A)+P(B|A^,)P(A^,)}

四 贝叶斯推断

条件概率变形:

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(a|X) = \frac{P(X|a)P(a)}{P(X)}

其中:

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

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

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

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

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

P(X|a) = P(x_1, x_2, ..., x_n|a) = P(x_1|a)P(x_2|a)...P(x_n|a)

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

P(a|X) = \frac{P(x_1|a)P(x_2|a)...P(x_n|a)P(a)}{P(X)}

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

六 拉普拉斯平滑系数

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

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

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

P(F1|C)=\tfrac{Ni+a}{N+am}

一般我们的α取值为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])

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


网站公告

今日签到

点亮在社区的每一天
去签到