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

发布于:2025-05-27 ⋅ 阅读:(18) ⋅ 点赞:(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

二、条件概率

2.1定义

        P(A|B):在事件B发生的情况下,事件A发生的概率。

2.2文氏图表示

2.3公式

条件概率:P(A|B)=P(AB)/P(B)

推理:P(AB)=P(B|A)P(A)

即:P(A|B)=P(B|A)P(A)/P(B)

三、全概率公式

3.1推理过程

        在这种情况下:事件B可以划分为两部分,一部分是与A相交的,另一部分是与A'相交,用公式表示为:P(B)=P(AB)+P(A'B)

        条件表达式中,我们推导出:P(AB)=P(B|A)P(A),

故P(A'B)=P(B|A')P(A')

得到P(B)=P(B|A)P(A)+P(B|A')P(A')

3.2公式含义

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

3.3将全概率公式带入条件概率

原本条件概率公式:P(A|B)=P(B|A)P(A)/P(B)

全概率公式:P(B)=P(B|A)P(A)+P(B|A')P(A')

现在的条件概率公式:P(A|B)=P(B|A)P(A)/(P(B|A)P(A)+P(B|A')P(A'))

四、贝叶斯判断

        对原本的条件概率变形,有:

 此时,我们称:

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

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

P(B|A)/P(B)为可能性函数:这是一个调整因子,使得预估概率更接近真实概率。

故,

条件概率可以理解为:后验概率=先验概率*可能性函数

五、朴素贝叶斯判断

5.1朴素贝叶斯与贝叶斯的区别

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

5.2公式更新

        原本公式:

现在对X做条件独立假设,

         现在公式:

        这样,朴素贝叶斯分类器就可以通过计算每种可能类别的条件概率和先验概率,然后选择具有最高概率的类别作为预测结果。  

5.3案例

已知西瓜1-10的数据,现在预测西瓜11,12是好瓜还是坏瓜?我们就需要拥到朴素贝叶斯分类,用概率的大小来观察它是什么瓜。如果它是好瓜的概率大于它是坏瓜的概况,那么这个瓜就是好瓜,反之,它就是坏瓜。

计算流程为:

(1)先计算P(a)先验概率;

(2)计算P(X|a);

(3)朴素贝叶斯P(a|X)=p(a)p(X|a)/p(X)

 圈出来的红色部分为马上要计算的第十一个西瓜的好坏判断所需条件:

把以上计算代入公式的分子
p(好瓜)*p(纹理清晰|好瓜)*p(色泽清绿|好瓜)*p(鼓声沉闷|好瓜) = 4/45
p(坏瓜)*p(纹理清晰|坏瓜)*p(色泽清绿|坏瓜)*p(鼓声沉闷|坏瓜) = 1/160
所以
p(好瓜|纹理清晰,色泽清绿,鼓声沉闷) >  p(坏瓜|纹理清晰,色泽清绿,鼓声沉闷),
所以把(纹理清晰,色泽清绿,鼓声沉闷)的样本归类为好瓜

第十二个瓜同理,

p(好瓜)*p(纹理模糊|好瓜)*p(色泽乌黑|好瓜)*p(鼓声浊响|好瓜) = 1/90
p(坏瓜)*p(纹理模糊|坏瓜)*p(色泽乌黑|坏瓜)*p(鼓声浊响|坏瓜) = 27/160

所以
p(好瓜|纹理模糊,色泽乌黑,鼓声浊响) <  p(坏瓜|纹理模糊,色泽乌黑,鼓声浊响),
所以把(纹理模糊,色泽乌黑,鼓声浊响)的样本归类为坏瓜

六、拉普拉斯平滑系数

6.1出现原因

        某些事件或特征可能从未出现过,这会导致它们的概率被估计为零。然而,在实际应用中,即使某个事件或特征没有出现在训练集中,也不能完全排除它在未来样本中出现的可能性。

6.2公式

6.3作用

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

6.4案例 

        比如计算判断新瓜(纹理清晰,色泽淡白,鼓声沉闷)是好和坏时,因为在样本中色泽淡白没有出现,导致出现0值,会影响计算结果,要采用拉普拉斯平滑系数

p(好瓜|纹理清晰,色泽淡白,鼓声沉闷)
    =【p(好瓜)】*【p(纹理清晰|好瓜)*p(色泽淡白|好瓜)*p(鼓声沉闷|好瓜)】/【p(纹理清晰)*p(色泽淡白)*p(鼓声沉闷)】


p(坏瓜|纹理清晰,色泽淡白,鼓声沉闷)
    =【p(坏瓜)】*【p(纹理清晰|坏瓜)*p(色泽淡白|坏瓜)*p(鼓声沉闷|坏瓜)】/【p(纹理清晰)*p(色泽淡白)*p(鼓声沉闷)】

p(纹理清晰|好瓜)= (4+1)/(6+3)  # +1是因为防止零概率 +3是因为有3个特征(纹理,色泽,鼓声)
p(色泽淡白|好瓜)= (0+1)/(6+3)  
p(鼓声沉闷|好瓜) = (2+1)/(6+3) 
p(纹理清晰|坏瓜)= (1+1)/(4+3)   
p(色泽淡白|坏瓜)= (0+1)/(4+3)  
p(鼓声沉闷|坏瓜) = (1+1)/(4+3) 

带入即可求得结果。

七、api

        from sklearn.naive_bayes import MultinomialNB

八、葡萄酒案例分类

(1)导入数据集

(2)数据划分

(3)标准化

(4)PCA降维

(5)朴素贝叶斯分类

(6)训练模型

(7)评估模型准确率

(8)预测新数据

from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA 
from sklearn.naive_bayes import GaussianNB
import joblib
# 数据加载
x,y = load_wine(return_X_y=True)
# 数据划分
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=44)
# 标准化
scaler = StandardScaler()
x_train_scaler = scaler.fit_transform(x_train)
x_test_scaler = scaler.transform(x_test)
# 特征降维
pca = PCA(n_components=5)
x_train_pca = pca.fit_transform(x_train_scaler)
x_test_pca = pca.transform(x_test_scaler)
# 创建模型
Bayes_model = GaussianNB()

# 训练模型
Bayes_model.fit(x_train_pca,y_train)
# 评估
score = Bayes_model.score(x_test_pca,y_test)
print('准确率:\n',score)
# 保存
joblib.dump(Bayes_model,'机器学习sklearn/srcc/save_model/bayes.pkl')
# 预测
model = joblib.load('机器学习sklearn/srcc/save_model/bayes.pkl')
y_pred = model.predict([[3.29,0.9,8.0,1,3]])
print('预测的分类结果:\n',y_pred)

结果:

准确率:
 0.9814814814814815
预测的分类结果:
 [1] 

九、总结

        本次分析的内容就到这里,主要是理论知识的分析和计算的分析,API的使用很简单,需要与前边的内容相结合。


网站公告

今日签到

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