1.朴素贝叶斯

1.1背景

朴素贝叶斯来源于贝叶斯学派,他们的理论与传统的统计学观点相悖,其中最大的分歧点之一是关于“先验”的使用。传统统计学认为概率即频率,计算概率只应从观测到的数据出发,是客观的。但是贝叶斯学派则认为处理现实中的问题可以加入主观的考虑,即先验。在我看来他们的分歧十分有趣,分歧点似乎甚至可以上升到哲学,即唯物与唯心的不同上,如果一个人是坚定的唯物主义者(非辩证),那么我想他应该不会支持贝叶斯的理论。(瞎想的,如果有问题请指正)

贝叶斯理论发展至今已经十分完善,它可以用来解决很多机器学习以及人工智能的问题。它在该领域最主要的工作是进行分类。

1.2理论内容

朴素贝叶斯是贝叶斯分类法的一个简单分支,将其称为朴素(Naive)是因为它对分类问题有一个很严格的假设,使问题简化从而得到解决。这套说辞好熟悉,原来我们在面对线性回归与广义线性模型的时候也说过,所以这么一想我觉得线性回归是不是可以叫 Naive Linear Regression呢。

朴素贝叶斯的假设是:x的各个特征信息具备条件独立性,即它们彼此相互独立,互不影响。

公式:

其中p(y)就是先验。分类任务中,我们有很多标签值/类别(y1,y2,y3...),在算一组数据已知(x1,x2,x3...)的情况下结果为y1的概率时,该公式利用已知的数据来进行计算。具体为先计算已知y1类别中不同特征x的概率,再乘以先验也就是y1的概率,再除以该组x的概率。这样描述过于抽象,这那的概率绕到让人头大,所以简单举一个例子。


借用周志华老师用西瓜举例的想法,假设我们的x的特征包括纹理,瓜蒂,声响这三样,我们希望建立一个算法利用这些特征判断瓜甜不甜,已知我们已经拥有了一堆各式各样的西瓜切都亲身尝了尝,也就是都分类过了。现在我们拿到了一个纹理均匀,瓜蒂硬挺,声响闷闷的瓜,想知道它有多大可能是甜的,这就是等式左面的p(y|x),它等于什么呢?

我们回头看一下之前已经尝过的瓜,先计算甜瓜中纹理均匀的瓜占比多少,然后是甜瓜中瓜蒂硬挺的占比多少,最后是甜瓜中声响闷的瓜占比为多少,将他们相乘,便是等式右边分子的第一部分p(x|y),等等,这里三项相乘,但公式中只有一项,其实他们是等价的,这里就要提到朴素贝叶斯的假设:彼此独立。

随后我们再计算先验p(y),也就是在我们的瓜中好瓜的占比。到这里分子部分已经计算完成。

分母也很简单,一个公式相信就能看懂了。这三部分算出来,彼此乘除就可以的到我们想要的预测结果了。

p(y)是先验,还有个后验就是p(y|x),先验是我们在事件发生前的猜测,直觉认为抛硬币正面的概率是0.5就是先验。后验就是根据事件发生的结果来推断原因。

写到这里总觉得少点什么,为什么呢?这个公式咋来的?凭啥就说这个公式就能分类了呢?

1.3原理与应用

其实超级简单,条件概率是这样计算的:

把p(B)除过去就是我们的贝叶斯公式了,然后贝叶斯赋予了各部分解释,所以其本质还是来源于概率论中的原理,就是为了求p(y|x)嘛!

举的西瓜的例子也颇为简单,输入经过编码后都是离散值,其实朴素贝叶斯(NB)包括三种模型,伯努利NB用于处理特征只有0和1的情况,多项式NB用于处理更复杂离散值的情况(类似我们的西瓜问题),高斯NB则处理特征为连续值的情况。此处参考:【实例讲解】贝叶斯推理原理

伯努利与多项式其实不复杂,无疑就是频率相乘除。为什么连续值要用到高斯分布模型呢?首先易知它算频率很不好算,两个连续的数值差0.00001也都只是各算出现一次,我们需要切换角度:高斯模型假设这些特征所属于某个类别的观测值符合高斯分布。所以当我们获得一个特征的数值时,我们利用已知数据构建一个高斯概率密度函数,然后将该值放入该模型中来得到这个值在这里分布的概率,从而达到目的。此处参考,高斯部分讲解的很好: 朴素贝叶斯的三个常用模型:高斯、多项式、伯努利

1.4实践

离散值的例子实现起来非常简单,就是简单算个各部分频率再相乘就好了,所以选取高斯NB作为实践内容,仍然是iris数据集,注意未标明的一点是,为了计算方便,我们最后计算概率时使用了log的trick来将乘法变为加法。参考:Python手写实现朴素贝叶斯(从原理到代码)

1.4.1代码

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
# pandas内部有很多方便的函数帮助我们计算概率,如value_counts()iris = load_iris()
data = iris.data
target = iris.target
X_train,X_test, y_train, y_test = train_test_split(data, target, test_size=1)
data_train = pd.DataFrame(X_train)
data_train['y'] = y_trainp_y = data_train['y'].value_counts()/len(data_train)n_classes = 3
n_features = 4
theta = np.zeros((n_classes, n_features))
sigma = np.zeros((n_classes, n_features))# 训练
for c in set(data_train.y):for x in data_train.columns[:-1]:temp = data_train[data_train.y==c]theta[c,x] = temp[x].mean()sigma[c,x] = temp[x].std()# 测试
X_test = X_test.reshape(-1,)
a = (1/(sigma*(2*np.pi)**0.5))*np.exp(-((X_test-theta)**2/(2*sigma**2)))
b = np.log(a)
c = np.sum(b,axis=1) + np.log(p_y.values)
max_class = np.argmax(c)
print(max_class)
print(y_test)

1.4.2结果

1
[1]

AI实践之路:朴素贝叶斯相关推荐

  1. 04机器学习实战之朴素贝叶斯

    朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.本章首先介绍贝叶斯分类算法的基础--贝叶斯定理.最后,我们通过实例来讨论贝叶斯分类的中最简单的一种: ...

  2. 【机器学习实战】第4章 朴素贝叶斯(Naive Bayes)

    第4章 基于概率论的分类方法:朴素贝叶斯 朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.本章首先介绍贝叶斯分类算法的基础--贝叶斯定理.最后,我们 ...

  3. 朴素贝叶斯网络matlab实现_基于朴素贝叶斯的文本分类方法实战

    基于朴素贝叶斯的文本分类方法 一.朴素贝叶斯原理的介绍 二.朴素贝叶斯分类器的代码实现 分类器有时会产生错误结果,这时可以要求分类器给出一个最优的类别猜测结果,同时会给出这个猜测的概率估计值.朴素贝叶 ...

  4. 实现贝叶斯分类器_机器学习实战项目-朴素贝叶斯

    朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.本章首先介绍贝叶斯分类算法的基础--贝叶斯定理.最后,我们通过实例来讨论贝叶斯分类的中最简单的一种: ...

  5. [机器学习]朴素贝叶斯原理和基于Spark 实例

    朴素贝叶斯分类 贝叶斯原理的由来:贝叶斯为了解决一个叫"逆向概率"问题写了一篇文章,尝试解答在缺乏太多可靠证据的情况下,怎样做出更符合数学逻辑的推测. 逆向概率:逆向概率是相对正向 ...

  6. 基于概率论的分类方法: 朴素贝叶斯

    朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.本章首先介绍贝叶斯分类算法的基础--贝叶斯定理.最后,我们通过实例来讨论贝叶斯分类的中最简单的一种: ...

  7. 文本情感分析之朴素贝叶斯

    一.贝叶斯理论 学过概率的同学一定都知道贝叶斯定理: 这个在250多年前发明的算法,在信息领域内有着无与伦比的地位.贝叶斯分类是一系列分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类. ...

  8. 朴素贝叶斯基本原理和预测过程、先验概率、后验概率、似然概率概念

    贝叶斯原理是英国数学家托马斯·贝叶斯提出的. 贝叶斯原理 建立在主观判断的基础上:在我们不了解所有客观事实的情况下,同样可以先估计一个值,然后根据实际结果不断进行修正. 举例: 一个袋子里有10个球, ...

  9. AI基础:朴素贝叶斯与垃圾邮件分类

    来,继续回顾基础算法 文章目录 背景&贝叶斯原理 贝叶斯分类器 朴素贝叶斯分类器 西瓜数据集下的朴素贝叶斯示例 朴素贝叶斯分类的优缺点 朴素贝叶斯关键问题 朴素贝叶斯企业中的应用案例 基于朴素 ...

最新文章

  1. Winform中设置ZedGraph的曲线符号Symbol以及对应关系
  2. 用户模式 VS 内核模式(1)
  3. 【数据结构与算法】之深入解析“实现strStr()”的求解思路与算法示例
  4. P4254-[JSOI2008]Blue Mary开公司【李超树】
  5. php教程目录,php基础入门篇-文件和目录操作_PHP教程
  6. Python中的进程和线程
  7. Java 调用gc语句_Java GC 、引用
  8. 数据挖掘面试题之梯度提升树
  9. 苹果手机键盘html代码大全,iPhone拨号键盘中的*和#有什么作用 iPhone特殊代码分享...
  10. yylabel html不显示图片,YYLabel富文本
  11. Pytorch入门+实战系列五:Pytorch情感分类
  12. 智能人物画像综合分析系统——Day3
  13. WIN10 下 autocad2006 及其他版本打开文件多窗口不能一个窗口的解决办法
  14. Web安全漏洞及安全防护
  15. 一分钟看懂微信服务号和订阅号到底哪个好?
  16. GEE|时间序列分析(四)
  17. matlab中常用函数的应用
  18. SplitIt视频文件快速分割工具操作技巧
  19. python 程序使用方法
  20. dnf电脑服务器不稳定怎么办,电脑玩DNF经常卡顿是怎么回事?5步让你从此告别卡顿...

热门文章

  1. 使用Ultra Librarian将bxl文件转为OrCAD Capture CIS可识别的库文件(OLB)
  2. 十条穷人思维,来看看你占了几条!
  3. python编程新手常犯的错误_Python程序员常犯的10个错误
  4. 清远通业(谁有 清远通业 请在跟帖中:(1) 留名 (2)留个电子邮件地址 (3)回答你分了几次红利)...
  5. win10的c语言程序闪退,win10内置应用出现闪退怎么回事? win10打开应用总闪退的解决方法...
  6. Xcode工程文件pbxproj
  7. Github+域名搭建个人主页(个人博客)
  8. 访客管理系统 - 天天访客
  9. 很多应用程序运行时会出现“若要运行此应用程序,您必须首先安装.NET Framework的以下版本之一”的解决方法
  10. CSDN Serverless峰会,带你走进云的下一个十年