基于python的贝叶斯分类算法,朴素贝叶斯分类算法原理分析与代码实现

  基于python的贝叶斯分类算法,朴素贝叶斯分类算法原理分析与代码实现

  本文介绍了如何使用Python实现一个简单的朴素贝叶斯分类器。

  贝叶斯规则

  首先,让我们简单回顾一下贝叶斯公式:

  这里p(a)和p (b)称为先验概率,p(ab)和p (ba)称为后验概率。

  上诉公式可以直接从条件概率公式推导出来。根据条件概率的定义,在事件A发生的条件下,事件B发生的概率如下。

  其中,如果p(a)同时安装在两侧,可以得到以下内容。

  同样,在事件B发生的条件下,事件A发生的概率如下。

  将

  使用

  经过排列,得到贝叶斯公式。

  Ansys贝叶斯分类器公式

  假设一个个体有n个特征,它们是。现有m种分类,即。贝叶斯分类器是指计算概率最高的分类,即得到下面公式的最大值。

  其中就有。

  因为

  所有类别都一样,可以省略。这些问题很重要,

  朴素贝叶斯假设所有模式都是相互独立的,因此:

  可以从统计数据中得到等号右边的项,从而计算出对应类别的概率,找到概率最高的类别。

  研究表明,“所有特征相互独立”的假设在现实中不太成立,但可以大大简化计算,对分类结果的准确性影响不大。

  水果分类的小例子

  在这个例子中,水果被分类。考虑水果的以下三个特性。

  [()长),(不长),(甜),不甜),不黄)]

  目前,有1000个水果的特征数据。如下。

  种类

  非常长

  不长

  太天真了。

  不甜

  黄色

  不是黄色。

  总数

  香蕉

  名流

  100

  350

  150

  450

  50

  500

  橙子和橘子

  0

  300

  150

  150

  300

  0

  300

  其他水果

  100

  100

  150

  50

  50

  150

  200

  总数

  500

  500

  650

  350

  八百

  200

  1000

  根据贝叶斯分类器的公式,如果知道申诉的特征,就需要判断水果是香蕉还是橘子,按照下面的公式来写。

  根据上诉的推导,我们只需要下列等式的最大值

  其中F果、L龙、S甜、C色。

  根据样本数据,如下

  如果我们有水果,它有以下特点。又长又不甜。它是黄色的。什么水果最有可能?

  这种水果可能是香蕉。

  Python的实现

  随机导入

  进口经营者

  数据集={

  巴娜拉:“长”:400,“不长”:100,“甜”:350,“不甜”:150和“黄色”

  橙色:长:0,不长:300,甜:150,不甜:150和黄色:150。

  other _ fruit : { long :100, not_long

  :100,甜:150,不甜:50,黄:50,不黄:150}

  }

  def count_total(data:dict):

  # return ({banala: 500, orange: 300, other_fruit:200},1000)

  count=dict()

  总计=0

  对于数据中的水果:

  count[fruit]=data[fruit][ sweet ]data[fruit][ not _ sweet ]

  总数=计数[水果]

  返回计数,总计

  def cal_base_rates(数据:字典):

  #计算P(香蕉)P(橙子)P(其他)

  categroies,total=count_total(data)

  cal_base_rates=dict()

  对于类别中的标签:

  priori _ prob=类别[标签]/总计

  cal _ base _ rates[label]=priori _ prob

  返回cal_base_rates

  def likelihold_prod(data:dict):

  #计算P(长香蕉)P(甜香蕉)P(黄香蕉).

  计数,_=计数总计(数据)

  likelihold=dict()

  对于数据中的水果:

  attr_prob={}

  对于数据中的属性[水果]:

  attr_prob[attr]=数据[水果][attr]/计数[水果]

  likelihold[水果]=attr_prob

  返回likelihold

  类别导航贝叶斯分类器:

  def __init__(self,data=datasets):

  自我。_data=数据

  自我。_labels=[key for key in self。_data.keys()]

  自我。_ priori _ prob=cal _ base _ rates(self。_data)

  自我。_ likelihold _ prob=likelihold _ prod(self。_data)

  def get_label(自身,长度,甜度,颜色):

  自我。_ attrs=[长度,甜度,颜色]

  res=dict()

  #计算p(长的香蕉)p(甜的香蕉)p(黄的香蕉)p(香蕉).

  用于自身中的标签。_标签:

  prob=自我。_ priori _ prob[标签]

  对于attr in self。_属性:

  prob*=self。_likelihold_prob[label][attr]

  RES[标签]=prob

  返回资源

  def random_attr(对):

  返回对[random.randint(0,1)]

  def gen_attrs():

  #生成测试数据集

  sets=[(long , not_long ),( sweet , not_sweet ),( yellow , not_yellow)]

  test_datasets=[]

  对于_在范围(20):

  测试数据集。追加(list(map(random _ attr,sets)))

  返回测试数据集

  def main():

  test_datasets=gen_attrs()

  分类器=导航_贝叶斯_分类器()

  对于测试数据集中的数据:

  打印(特征值: ,end=\t )

  打印(数据)

  打印(预测结果: ,end=\t )

  RES=分类器。get _ label(* data)

  打印(分辨率)

  print(sorted(res.items(),key=operator.itemgetter(1),reverse=True)[0][0])

  if __name__==__main__ :

  主()

  参考文献

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: