贝叶斯分类
贝叶斯分类
贝叶斯(Bayes)定理是概率论中的一个定理,它与随机变量的条件概率以及边缘概率分布有关。在有些关于概率的解释中,贝叶斯定理能够告知我们如何利用新证据修改已有的看法。
贝叶斯定理自20世纪50年代已广泛研究,在20世纪60年代初就引入到文字信息检索中,仍然是文字分类的一种热门(基准)方法。文字分类是以词频为特征判断文件所属类型或其他(如垃圾邮件、合法性、新闻分类等)的问题。
贝叶斯定理:事件*A*在事件*B*(发生)的条件下的概率,与事件*B*在事件*A*(发生)的条件下的概率是不一样的。然而,这两者是有确定关系的,贝叶斯定理就是这种关系的陈述。贝叶斯公式的一个用途在于通过已知的三个概率函数推出第四个。
其中,P(A|B)是指在事件B发生的情况下事件A发生的概率。在贝叶斯定理中的意思为:
· P(A|B)是已知B发生后A的条件概率,也由于得自B的取值而被称作A的后验概率。
· P(A)是A的先验概率(或边缘概率)。之所以称为“先验”,是因为它不考虑任何B方面的因素。
· P(B|A)是已知A发生后B的条件概率,也由于得自A的取值而被称作B的后验概率。
· P(B)是B的先验概率或边缘概率。
· A∩B意思是A和B的交集。
· P(A∩B)交集的数量。
**举个例子:投掷一颗六面骰子,样本空间为*Ω*={1,2,3,4,5,6},假设:*A*={1,2}表示掷出的点数小于3,*B*={2,4,6}表示掷出点数为偶数,因为*A*∩*B*={2}和*B*的交集只有数字2,数量是一个,所以*P*(*A*∩*B*)出现的概率为1/6,*A*{1,2}数量有2个,所以*P*(*A*)出现*A*的概率为2/6,B{2,4,6}数量有2个,所以*P*(*B*)出现*B*的概率为3/6。**
在已知事件B发生的情况下,一个事件A发生的概率称为条件概率。(在投出偶数的情况下,点数为偶数的概率)
贝叶斯分类器是以贝叶斯定理为基础的算法的总称。
实例:区分柠檬和橙子
数据集:
· A栏是种类,1是橙子,2是柠檬;
· B栏是宽度width;
· C栏是长度height。
调用:
sklearn.naive_bayes.GaussianNB (priors,var_smoothing) #Bayes函数
代码
class Bayes(object):
#初始化创建一个dict类型的容器container。该容器是为了储存贝叶斯各项信息。key键存储假设,value值存储概率
def __init__(self):
#创建的是字典类型,{key_1:value_1,key_2:value_2}
self._container = dict()
#Set方法是给容器添加先验假设及先验概率
def Set(self,hypothis,prob):
#表示记录特定的先验概率
#比如bayes.Set('Bow_A', 1/2) ,具体效果这样{'Bow_A':1/2}
self._container[hypothis]=prob
#Mult方法:根据key查找到先验概率,并更新概率
def Mult(self,hypothis,prob):
#old_prob去取到hypothis的先验概率
old_prob = self._container[hypothis]
#将先验概率✖️似然概率 即得到了后验概率
#通过后验概率来确定具体分类
self._container[hypothis] = old_prob*prob
#Normalize方法:归一化
def Normalize(self):
count = 0
for hypothis in self._container.values():
#将所有的后验概率累加
count=count+hypothis
for hypothis,prob in self._container.items():
#得到{具体的目标:具体目标的后验概率}
#将每个具体目标的后验概率除于总的后验概率,将其统一到0-1
self._container[hypothis]=self._container[hypothis]/count
#Prob方法:返回某一事件的概率
def Prob(self,hypothis):
#获得归一化后的后验证概率
Prob = self._container[hypothis]
return Prob
代码
from sklearn.naive_bayes import GaussianNB #贝叶斯分类器
import numpy as np
#特征值
X=np.array([[9,9],[9.2,9.2],[9.6,9.2],[9.2,9.2],[6.7,7.1],[7,7.4],[7.6,7.5],
[7.2,10.3], [7.3,10.5], [7.2,9.2], [7.3,10.2], [7.2,9.7], [7.3,10.1], [7.3,10.1]])
#标签
Y=np.array([1,1,1,1,1,1,1,2,2,2,2,2,2,2])
model = GaussianNB()
model.fit(X,Y) #训练
print(model.class_prior_ ) #每个分类的概率
print(model.get_params() ) #估算工具的参数
x_test=np.array([[8,8],[8.3,8.3]]) #预测
predicted= model.predict(x_test)
print(predicted) #输出结果
import matplotlib.pyplot as plt
plt.plot(X[:7,0], X[:7,1], 'yx' )
plt.plot(X[7:,0], X[7:,1], 'g.' )
plt.plot(x_test[:,0],x_test[:,1], 'r^' )
plt.ylabel('W')
plt.xlabel('H')
plt.legend(('Citrus','Lemon'), loc='upper left')
plt.show()
结果:
绿点为柠檬,黄叉为橙子,红色三角为预测结果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探