机器学习-一篇入门

【模型】一篇入门之-朴素贝叶斯模型

作者 : 老饼 发表日期 : 2022-06-26 03:45:41 更新日期 : 2024-11-21 00:40:25
本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com



朴素贝叶斯模型是一个用于做分类的算法,它简单,易用,见效,是一个经典的算法

本文介绍朴素贝叶斯的相关概念、算法原理、计算公式,以及具体的使用例子

通过本文,可以快速了解朴素贝叶斯模型是什么,以及如何使用朴素贝叶斯模型进行类别预测




  01. 朴素贝叶斯模型简介   




本节初步讲解朴素贝叶斯模型是个什么样的模型




    朴素贝叶斯模型简介   


朴素贝叶斯模型思想
朴素贝叶斯是基于贝叶斯后验概率建立的模型,它用于解决分类问题,
 朴素贝叶斯模型的思想如下:
 
朴素贝叶斯模型是什么
它通过历史数据,利用贝叶斯原理对每个类别各自建立一个判别公式
模型预测时,分别用各个类别的判别公式进行预测,哪个判别值最大就判为哪个类别





     朴素贝叶斯模型的判别公式     


  朴素贝叶斯模型各类别的判别公式如下:
 
      其中,  :已知属于类别k时表现为的概率
 
    :属于类别k的概率      
的具体计算方法:                              
                                         类别k中特征i为  的样本个数/ 类别k的样本个数 
                          备注:连续变量需要离散化成组别,这样才能统计占比
 的具体计算方法:                                    
  类别k在总本样中的占比       







  02. 朴素贝叶斯模型原理  




本节介绍朴素贝叶斯模型中公式的原理,进一步了解朴素贝叶斯模型




    朴素贝叶斯概率公式与判别函数   


朴素贝叶斯模型基于贝叶斯原理,给出样本属于每个类别的概率公式
贝叶斯原理
贝叶斯原理为,在已知发生B条件下,发生A的概率为:
   
 如果上述公式较抽象,可以将右边的分母移到左边,则贝叶斯原理理解为:
  

 即: 发生B,且发生A = 发生A,且发生B
朴素贝叶斯模型
已知样本表现为X特征,想知道它属于类别 k 的概率,套用贝叶斯原理可得到:        
 朴素贝叶斯模型公式推导1 
   
进一步,假设各特征之间相互独立,那么特征的概率可以拆成累积形式,如下:       
 
朴素贝叶斯模型公式推导2 
 朴素贝叶斯中的"朴素",指的就是"各特征间互相独立"这一条件
 
 
 由于最终比较的是各个类别概率的大小,而每个类别的概率公式的分母是一样的          
因此,最终只需取上述概率公式中的分子部分作为判别公式来进行结果比较即可      
最终即可得到朴素贝叶斯的判别公式如下:
 朴素贝叶斯模型公式推导3 
✍️关于朴素贝叶斯如何输出概率
有时我们希望模型输出每个类别的具体概率,理论上,只需按(2)中的概率公式就能得到各类别的概率
但实际中往往会发现各类别的概率之和不为一,这是因为实际中各个特征之间并不独立所造成的
因此,实际中如果需要输出概率,更一般的方法是直接将各类别的判别值进行归一化,作为概率值







   03.  朴素贝叶斯模型-例子讲解   




本节展示朴素贝叶斯模型在实际应用中的具体计算例子





     朴素贝叶斯模型-手算例子解说     


样本数据
现有身高、体重与性别的历史数据如下

 
朴素贝叶斯模型例子解说数据
朴素贝叶斯模型构建
 朴素贝叶斯的判别函数要用到
因此,朴素贝叶斯模型的构建就是根据历史样本统计出

一、计算各个类别的概率                                                         
各个类别在总样本的占比就是,统计样本数据可得:  
 朴素贝叶斯模型例子-类别概率表
二、计算知道类别时不同特征表现的概率                           
               各个类别在X的不同取值时的占比就是,统计样本数据可得:
  朴素贝叶斯模型例子-身高特征表 
 朴素贝叶斯模型例子-体重特征表
朴素贝叶斯模型预测
现样本的身高分组为3,体重分组为2,求该样本性别的概率
通过查表可算得属于男、女的判别值为:
  

进一步将判别值进行归一化,可得:
                      
 
可知,该样本性别为女的概率更大





     用python实现朴素贝叶斯模型     


在python中可以使用GaussianNB函数来实现一个朴素贝叶斯模型
 python实现朴素贝叶斯模型的具体代码如下:
import numpy as np 
from sklearn import naive_bayes
from sklearn.datasets import load_iris


#----------------数据准备--------------
iris = load_iris()                            # 加载数据
X    = iris.data                              # 用于建模的X
y    = iris.target                            # 用于建模的y

#---------------模型训练----------------
clf = naive_bayes.GaussianNB()                # 初始化贝叶斯模型
clf = clf.fit(X,y)                            # 用数据训练树模型构建
#---------------模型预测----------------
y_pred = clf.predict(X)                       # 对样本进行预测
print("\n样本的真实类别:",y)                   # 打印样本的真实类别
print("样本的预测类别:",y_pred)                # 打印样本的预测类别
print("模型准确率:",(y_pred==y).mean())        # 打印准确率
运行结果如下:
 
朴素贝叶斯模型代码运行结果
可以看到,模型的预测与真实类别几乎一致






以上就是朴素贝叶斯模型的全部内容了~







 End 




联系老饼