朴素贝叶斯模型:从原理到实战
朴素贝叶斯模型:从原理到实战
朴素贝叶斯模型是一种基于贝叶斯定理的简单而强大的分类算法。它通过计算后验概率来进行分类决策,广泛应用于文本分类、垃圾邮件过滤等领域。本文将从模型简介、原理推导到实际应用,全面解析朴素贝叶斯模型的核心概念和具体实现方法。
01. 朴素贝叶斯模型简介
朴素贝叶斯模型是基于贝叶斯后验概率建立的模型,主要用于解决分类问题。其基本思想是通过历史数据,利用贝叶斯原理对每个类别建立一个判别公式。在预测时,分别用各个类别的判别公式进行预测,选择判别值最大的类别作为最终结果。
朴素贝叶斯模型的判别公式
朴素贝叶斯模型各类别的判别公式如下:
其中, :已知属于类别k时表现为的概率
:属于类别k的概率
的具体计算方法:
类别k中特征i为 的样本个数/ 类别k的样本个数
备注:连续变量需要离散化成组别,这样才能统计占比
的具体计算方法:
类别k在总本样中的占比
02. 朴素贝叶斯模型原理
朴素贝叶斯概率公式与判别函数
朴素贝叶斯模型基于贝叶斯原理,给出样本属于每个类别的概率公式。
贝叶斯原理
贝叶斯原理为,在已知发生B条件下,发生A的概率为:
如果上述公式较抽象,可以将右边的分母移到左边,则贝叶斯原理理解为:
即: 发生B,且发生A = 发生A,且发生B
朴素贝叶斯模型
已知样本表现为X特征,想知道它属于类别 k 的概率,套用贝叶斯原理可得到:
进一步,假设各特征之间相互独立,那么特征的概率可以拆成累积形式,如下:
朴素贝叶斯中的"朴素",指的就是"各特征间互相独立"这一条件
由于最终比较的是各个类别概率的大小,而每个类别的概率公式的分母是一样的
因此,最终只需取上述概率公式中的分子部分作为判别公式来进行结果比较即可
最终即可得到朴素贝叶斯的判别公式如下:
✍️关于朴素贝叶斯如何输出概率
有时我们希望模型输出每个类别的具体概率,理论上,只需按(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()) # 打印准确率
运行结果如下:
可以看到,模型的预测与真实类别几乎一致
以上就是朴素贝叶斯模型的全部内容了~