贝叶斯分类

贝叶斯分类

  贝叶斯(Bayes)定理是概率论中的一个定理,它与随机变量的条件概率以及边缘概率分布有关。在有些关于概率的解释中,贝叶斯定理能够告知我们如何利用新证据修改已有的看法。

  贝叶斯定理自20世纪50年代已广泛研究,在20世纪60年代初就引入到文字信息检索中,仍然是文字分类的一种热门(基准)方法。文字分类是以词频为特征判断文件所属类型或其他(如垃圾邮件、合法性、新闻分类等)的问题。

   贝叶斯定理:事件*A*在事件*B*(发生)的条件下的概率,与事件*B*在事件*A*(发生)的条件下的概率是不一样的。然而,这两者是有确定关系的,贝叶斯定理就是这种关系的陈述。贝叶斯公式的一个用途在于通过已知的三个概率函数推出第四个。

5HA0y.png

其中,PA|B)是指在事件B发生的情况下事件A发生的概率。在贝叶斯定理中的意思为:

· PA|B)是已知B发生后A的条件概率,也由于得自B的取值而被称作A的后验概率。

· PA)是A的先验概率(或边缘概率)。之所以称为“先验”,是因为它不考虑任何B方面的因素。

· PB|A)是已知A发生后B的条件概率,也由于得自A的取值而被称作B的后验概率。

· PB)是B的先验概率或边缘概率。

· AB意思是AB的交集。

· PAB)交集的数量。

   **举个例子:投掷一颗六面骰子,样本空间为*Ω*={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发生的概率称为条件概率。(在投出偶数的情况下,点数为偶数的概率)

5HhFk.png

贝叶斯分类器是以贝叶斯定理为基础的算法的总称。

实例:区分柠檬和橙子

5HiTJ.png

数据集:

5HrMF.png

· 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()

结果:

5H8fW.png

绿点为柠檬,黄叉为橙子,红色三角为预测结果。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值