伯努利朴素贝叶斯-python sklearn实现

介绍

伯努利分布朴素贝叶斯(BernoulliNB),适用于二项分布,即:二分类问题,如:是否、对错

数据集中可以存在 多个特征,但每个特征都是 二分类 的,可以用布尔变量表示,也可以表示为 0,1 或者 -1,1 等任意二分类组合

注意:要求将样本转换为二分类特征向量

声明

  1. class sklearn.naive_bayes.BernoulliNB(
  2. alpha=1.0,
  3. binarize=0.0,
  4. fit_prior=True,
  5. class_prior=None
  6. )

形参解释:

  • alpha : 浮点数, 可不填 (默认为1.0)
    拉普拉斯或利德斯通平滑的参数 λ,如果设置为0则表示完全没有平滑选项。
    注意:平滑相当于人为给概率加上一些噪音,因此λ 设置得越大,伯努利朴素贝叶斯的精确性会越低(虽然影响不是非常大),布里尔分数也会逐渐升高。
  • binarize : 浮点数或None,可不填,默认为0
    将特征二值化的阈值,如果设定为None,则假定为特征已经被二值化完毕
  • fit_prior : 布尔值, 可不填 (默认为True)
    是否学习先验概率 P(Y=c)。如果设置为false,则不使用先验概率,而使用统一先验概率(uniform prior),即认为每个标签类出现的概率是 1 / n_classes
  • class_prior:形似数组的结构,结构为(n_classes, ),可不不填(默认为None)
    类的先验概率P(Y=c)。如果没有给出具体的先验概率则自动根据数据来进行计算。

例子

男生想女生求婚,男生有四个特征,与女孩嫁不嫁相关,这四个特征是:

  • 颜值:不帅、帅
  • 性格:不好、好
  • 个子:高、矮
  • 上进:不上进、上进

目前有以下数据:

当某男生的特征是:不帅、性格不好、个子矮、不上进,计算出:女生嫁给他的概率

解决

取出前10条记录用于训练,后2条记录用于测试

  1. import numpy as np
  2. #导入朴素贝叶斯
  3. from sklearn.naive_bayes import BernoulliNB
  4. '''
  5. 训练数据
  6. 第一列表示颜值,1表示帅,0表示不帅
  7. 第二列表示性格,1表示好,0表示不好
  8. 第三列表示身高,1表示高,0表示矮
  9. 第四列表示是否上进,1表示上进,0表示不上进
  10. '''
  11. x=np.array([[1,0,0,0],
  12. [0,1,0,1],
  13. [1,1,0,1],
  14. [0,1,1,1],
  15. [1,0,0,1],
  16. [0,0,0,0],
  17. [1,1,1,0],
  18. [0,1,1,1],
  19. [1,1,1,1],
  20. [0,0,1,1]
  21. ])
  22. # 训练数据的标签,0表示不嫁,1表示嫁
  23. y=np.array([0,0,1,1,0,0,1,1,1,1])
  24. nb=BernoulliNB()
  25. nb.fit(x,y)
  26. # 测试数据
  27. test_x=np.array([
  28. [1,1,0,0],
  29. [1,1,0,0]]
  30. )
  31. test_y=np.array([0,0])
  32. print("评测模型:", nb.score(test_x,test_y) )
  33. # 预测
  34. prd_x=np.array([
  35. [1,1,1,0],
  36. [1,0,1,0]]
  37. )
  38. pre=nb.predict(prd_x)
  39. pre2=nb.predict_proba(prd_x)
  40. #输出模型预测结果
  41. print("预测结果为:",pre)
  42. #输出模型预测的分类概率
  43. print("预测的概率为:",pre2)

执行结果:

  1. 评测模型: 1.0
  2. 预测结果为: [1 1]
  3. 预测的概率为: [[0.11636364 0.88363636]
  4. [0.44137931 0.55862069]]

参考:
https://blog.csdn.net/gracejpw/article/details/102406860
https://blog.csdn.net/weixin_48077303/article/details/117396838


原文出处:http://malaoshi.top/show_1IX4l9X4tWMJ.html