朴素贝叶斯算法原理及鸢尾花分类代码实现

一、概率模型

1、全概率公式(由因推果)

设事件B1,B2,…,Bn构成一个完备事件组,即两两不相容,和为全集且P(Bi)>0,则对任意事件A,有

由因推果的理解:如上图:可以理解为A事件的发生是由B1,B2....B5B_1,B_2....B_5B1​,B2​....B5​​这些原因导致的,有:p(A)=p(AB1)+p(AB2)+...+p(ABn)p(A) = p(AB_1)+p(AB_2)+...+p(AB_n)p(A)=p(AB1​)+p(AB2​)+...+p(ABn​)​,再由条件概率公式即可推导出全概率公式。​

2、贝叶斯公式(由果溯因)

二、在机器学习中的应用(朴素贝叶斯算法)

1、贝叶斯公式在机器学习分类问题中的形式:
p(yi∣x)=p(yi)p(x∣yi)∑i=1np(yi)p(x∣yi)p(y_i|x)=\frac{p(y_i)p(x|y_i)}{\sum_{i=1}^{n}{p(y_i)p(x|y_i)}} p(yi​∣x)=∑i=1n​p(yi​)p(x∣yi​)p(yi​)p(x∣yi​)​
​ 因为朴素贝叶斯假设数据的各个特征之间是彼此独立的:

所以有:p(x∣yi)=p(x1∣yi)p(x2∣yi)p(x3∣yi)...p(xn∣yi)p(x|y_i)=p(x_1|y_i)p(x_2|y_i)p(x_3|y_i)...p(x_n|y_i)p(x∣yi​)=p(x1​∣yi​)p(x2​∣yi​)p(x3​∣yi​)...p(xn​∣yi​)​

故朴素贝叶斯公式为:
p(yi∣x)=p(yi)∏j=1np(xj∣yi)∑i=1np(yi)∏j=1np(xj∣yi)p(y_i|x)=\frac{p(y_i)\prod_{j=1}^{n}{p(x_j|y_i)}}{\sum_{i=1}^{n}{p(y_i)\prod_{j=1}^{n}{p(x_j|y_i)}}} p(yi​∣x)=∑i=1n​p(yi​)∏j=1n​p(xj​∣yi​)p(yi​)∏j=1n​p(xj​∣yi​)​

​ 当用于分类问题时,Ypred=argmaxP(yi∣x)Y_{pred}=argmax{P(y_i|x)}Ypred​=argmaxP(yi​∣x)​​​ ,由于p(yi∣x)p(y_i|x)p(yi​∣x)​​​的分母都是相同的,所以只需要求分子的最大值来判断分类结果,即就是: Ypred=argmaxP(yi)∏j=1nP(xj∣yi)Y_{pred}=argmax{P(y_i)\prod_{j=1}^{n}{P(x_j|y_i)}}Ypred​=argmaxP(yi​)∏j=1n​P(xj​∣yi​)​​​​​,注意:在代码中往往将连乘用log函数转换为相加。由此,只需要计算先验概率:p(yi)p(y_i)p(yi​)​​和似然度:p(xj∣yi)p(x_j|y_i)p(xj​∣yi​)​​​​。

三、3种常见的朴素贝叶斯模型(三种计算先验概率和似然度的方法)

1、高斯分布模型

适用:数据集的特征时连续型数据时
先验概率:p(yi)=NyiN后验概率:p(xj∣yi)=1δ2πe−(xj−yi)2δj2先验概率: p(y_i)=\frac{N_{y_i}}{N}\\ 后验概率:p(x_j|y_i)=\frac{1}{\delta\sqrt{2\pi}}e^{-\frac{(x_j-y_i)}{2\delta_j^2}} 先验概率:p(yi​)=NNyi​​​后验概率:p(xj​∣yi​)=δ2π​1​e−2δj2​(xj​−yi​)​
其中NyiN_{y_i}Nyi​​是训练样本中类别为yiy_iyi​的样本的个数,N为训练样本的总个数。

2、多项式模型

适用:数据集的特征为离散型
先验概率:p(yi)=Nyi+αN+kα后验概率:p(xj∣yi)=Nyi,xj+αNyj+nα注:其中α是平滑因子,防止后验概率为0,Nyi,xj是类别为yi的样本中,第j维度的特征为xj先验概率:p(y_i)=\frac{N_{y_i}+\alpha}{N+k\alpha}\\ 后验概率:p(x_j|y_i)=\frac{N_{y_i,x_j}+\alpha}{N_{y_j}+n\alpha}\\ 注:其中\alpha是平滑因子,防止后验概率为0,N_{y_i,x_j}是类别为y_i的样本中,第j维度的特征为x_j 先验概率:p(yi​)=N+kαNyi​​+α​后验概率:p(xj​∣yi​)=Nyj​​+nαNyi​,xj​​+α​注:其中α是平滑因子,防止后验概率为0,Nyi​,xj​​是类别为yi​的样本中,第j维度的特征为xj​

3、伯努利模型

**使用:数据集的特征为bool类型,即特征的值只能取0或者1
当xj=1时:p(xj∣yi)=p(xj=1∣yi)当xj=0时:p(xj∣yi)=p(xj=0∣yi)当x_j=1时:p(x_j|y_i)=p(x_j=1|y_i)\\ 当x_j=0时:p(x_j|y_i)=p(x_j=0|y_i) 当xj​=1时:p(xj​∣yi​)=p(xj​=1∣yi​)当xj​=0时:p(xj​∣yi​)=p(xj​=0∣yi​)

鸢尾花分类代码实现

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
iris = datasets.load_iris()
X = iris.data
Y = iris.target
# 分割训练集和验证集
x_train,x_test,y_train,y_test = train_test_split(X,Y,random_state=4)
print(len(x_train))
print(len(x_test))
print(len(y_train))
print(len(y_test))
# 计算每一类的先验概率,以及每一类中每一种特征的均值和方差
def prior_Mean_Var(x_train,y_train):prior_list=[]mean = np.array([[0,0,0,0]])var = np.array([[0,0,0,0]])for kind in range(3):x_class = x_train[np.nonzero(kind==y_train)]prior_list.append(len(x_class)/len(x_train))m = np.mean(x_class,axis=0,keepdims=True)mean = np.append(mean,m,axis=0)v = np.var(x_class,axis=0,keepdims=True)var = np.append(var,v,axis=0)return prior_list,mean[1:],var[1:]# 对样本进行分类
def predict(x_test,y_test,prior,mean,var):
#     防止分母为0_class = []eps = 1e-10  for i in x_test:x = np.tile(i,(3,1))p = (np.exp(-(x-mean)**2/(2*var+eps)))/(np.sqrt(2*np.pi)*var+eps)# 每个类别对应的后验概率,p(x/yi)p_after = np.sum(np.log(p),axis=1) p_class = np.log(prior)+p_after_class.append(np.argmax(p_class))return _class
prior,mean,var=prior_Mean_Var(x_train,y_train)
y_pred = predict(x_test,y_test,prior,mean,var)# 计算模型的准确率:
count=0
for i in range(len(y_test)):if(y_pred[i]==y_test[i]):count=count+1
accuracy = count/len(y_test)
print('accuracy: {:.2%}'.format(accuracy))

输出准确率:

朴素贝叶斯算法原理、代码实现原理、以及鸢尾花分类代码实现(详细代码原理讲解)相关推荐

  1. 机器学习实战:朴素贝叶斯算法在新闻文本数据上的分类表现

    https://www.toutiao.com/a6647102437532369421/ 2019-01-17 08:01:00 大家好,今天跟大家学习一下通过sklearn的朴素贝叶斯模型实战.前 ...

  2. 机器学习(7): 朴素贝叶斯算法 小结及实验

    文章目录 1 朴素贝叶斯简介 2 条件概率与全概率公式 3 贝叶斯推断 4 引例 5 朴素贝叶斯算法分类 (1) GaussianNB (2) MultinomialNB (3) BernoulliN ...

  3. 朴素贝叶斯算法——文本分类(离散型)

    朴素贝叶斯算法:按照概率分类的算法. 我们在豆瓣上经常能看到一些书籍和电影评价,有好的评价,也有差评. 关于影评好坏的结果是怎么来的呢?后台小姐姐一条条的看,然后进行分类吗?利用我们的朴素贝叶斯算法, ...

  4. 【机器学习入门】(2) 朴素贝叶斯算法:原理、实例应用(文档分类预测)附python完整代码及数据集

    各位同学好,今天我向大家介绍python机器学习中的朴素贝叶斯算法.内容有:算法的基本原理:案例实战--新闻文档的分类预测. 案例简介:新闻数据有20个主题,有10万多篇文章,每篇文章对应不同的主题, ...

  5. [Python图像处理] 二十六.图像分类原理及基于KNN、朴素贝叶斯算法的图像分类案例

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  6. 【朴素贝叶斯】深入浅出讲解朴素贝叶斯算法(公式、原理)

    本文收录于<深入浅出讲解自然语言处理>专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅! ​个人主页:有梦想的程序星空 ​个人介绍:小编是人工智能领域硕士,全栈工 ...

  7. 机器学习之朴素贝叶斯算法原理+Python实现

    朴素贝叶斯 1.简介 ​ 贝叶斯分类算法是统计学中的一种概率分类方法,朴素贝叶斯分类是贝叶斯分类中最简单的一种.其分类原理就是利用贝叶斯公式根据某特征的先验概率计算出其后验概率,然后选择具有最大后验概 ...

  8. 朴素贝叶斯算法的原理:

    朴素贝叶斯算法的原理: 1. 朴素贝叶斯法是典型的生成学习方法. 生成方法由训练数据学习联合概率分布P(X,Y),然后求得后验概率分布P(Y|X).具体来说,利用训练数据学习P(XY)和P(Y)的估计 ...

  9. 文本分类的基本思想和朴素贝叶斯算法原理

    文本分类的基本思想和朴素贝叶斯算法原理

最新文章

  1. html建立复选框,创建一个像html复选框一样的div
  2. AAAI 2020 | 华南理工:面向文本识别的去耦注意力网络
  3. V$session表的妙用
  4. Ospaf项目-commits词频统计模块
  5. 高可用高并发的 9 种技术架构
  6. Hexo瞎折腾系列(8) - 添加评论系统
  7. SAP内部订单使用实例
  8. 【pycharm使用指南】pycharm 取消连按两下shift出现的全局搜索 | pycharm误触出搜索弹窗
  9. ADT17中引入外部JAR包时出现ClassNotFoundException
  10. 2019全球AI训练营五地再同发
  11. 后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值
  12. rpm安装与yum安装的区别与特点
  13. css 控制div高度自适应浏览器的高度
  14. 深入浅出MFC 读书笔记1
  15. 全科初高中智能学习机器人_智能学习机器人推荐,阿尔法蛋大蛋2.0学习内容智能推荐...
  16. Fortran笔记,全局变量
  17. Oracle如何对JDK收费
  18. ps如何用创建和使用动作
  19. kail Linux局域网内攻击IP 断开目标用户上网
  20. 七年级计算机会考重点知识点总结,2021年度七年级科学会考知识点整理.doc

热门文章

  1. “偷梁换柱”的库打桩机制
  2. 新视野大学英语(第三版)视听说4答案
  3. etl工程师 面试题_面试ETL题总汇
  4. 五个男人30年在同一位置拍摄相同合影,岁月不饶人啊
  5. 编译运行Clipper报错以及解决
  6. Qt for python QChartView鼠标滚动放大缩小
  7. 2018-2019-2 20175227张雪莹《Java程序设计》实验四 《Android程序设计》
  8. java continu语句
  9. 前端常用正则表达式(详细版)
  10. [软件工具][原创]加减乘除自动出题带答案不重复生成可代替加减法印章使用教程