3--朴素贝叶斯

原理

朴素贝叶斯本质上就是通过贝叶斯公式来对得到类别概率,但区别于通常的贝叶斯公式,朴素贝叶斯有一个默认条件,就是特征之间条件独立。

条件概率公式:

\[P(B|A) = \frac{P(A|B)P(B)}{P(A)}
\]

贝叶斯公式可以写成:

\[p(y_i|x) = \frac{p(x|y_i)p(y_i)}{p(x)}
\]

如果A和B相对于C是条件独立的,那么满足\(P(A|C) = P(A|B,C)\)。 如果样本的两个特征\(x_1\)\(x_2\)相对于y条件独立,那么可以得到\(p(x_1,x_2|y) = p(x_1|y)p(x_2|y)\)。

通过条件独立公式,上述贝叶斯公式中,\(p(x|y_i)\)的计算则可以简化成如下公式:

\[p(x|y_i) = p(x_1|yi)p(x_2|yi)p(x_3|yi)...p(x_n|yi)
\]

实现细节

对于离散类型数据, \(p(x_i|y)\)可以通过计算特征的数量得到概率。

\[p(x_i|y) = \frac{N_{yi}}{N_y}
\]

唯一需要注意的就是拉普拉斯修正(Laplacian Correction),如果莫一个新的特征x从来没有出现过,那么分母就有可能为0,为了避免这种情况,可以做如下操作:

\[p(x_i|y)= \frac{N_{yi}+\alpha}{N_y+an}
\]

而对于连续型数据,计算方法则不太相同,高斯贝叶斯认为数据服从高斯分布,所以默认为某一列特征服从高斯分布,然后通过高斯概率密度函数,就可以得到相应的概率。

假设某一列特征服从整体分布

\[p(x_i|y)\sim N(\mu_{y,i},\sigma_{y,i}^2)
\]

其中\(\mu\)和\(\sigma\)为y类样本在样本x第i个属性的均值和方差,那么其计算方法如下:

首先计算出标签y在特征\(x_i\)上的均值和方差,然后就可以得到其概率的计算公式了:

\[p(x_i|y) = \frac{1}{\sqrt{2\pi}\sigma_{y,i}}exp(-\frac{(x_i-\mu_{y,i})^2}{2\sigma^2_{y,i}})
\]

当具体计算的时候,可以直接对区间进行积分,然后进行化简,可以得到最终的概率值:

\(P(x_i<x<x_i+\epsilon) = \int_{x_i}^{x_i+\epsilon}f(x)dx \approx f(x_i)*\epsilon\)

这里就是使用高斯概率密度函数对概率进行估计的朴素贝叶斯计算方法,对于sklearn中的GaussionNB函数。

sklearn中的朴素贝叶斯方法

sklearn中的朴素贝叶斯有几种方法:

描述
naive_bayes.BernoullNB 伯努利分布下的朴素贝叶斯
naive_bayes.GaussianNB 高斯分布下的朴素贝叶斯
naive_bayes.MultinomialNB 多项式分布下的朴素贝叶斯
naive_bayes.ComplementNB 补集朴素贝叶斯
linear_model.BayesianRidge 贝叶斯岭回归,在参数估计过程中使用贝叶斯回归技术来包括正则化参数

sklearn中的朴素贝叶斯算法,就如上述所提到的,对于连续型变量,可以使用高斯正太分布进行概率估计(这里对应高斯朴素贝叶斯),当然可以使用其他不同的分布进行概率估计,比如使用伯努利分布估计的话,则对应下表中的伯努利朴素贝叶斯算法。也就是说,其差别主要在于使用不同的方法来估计概率。

使用示例:

from sklearn import naive_bayes as nb

from sklearn.preprocessing import LabelEncoder

#由于sklearn中的朴素贝叶斯默认不支持字符串形式的特征,需要将字符串编码成数字特征,
所以这里可以使用LabelEncoder,例如下面所示,会自动将字符串从0到N进行编码 X[:,1] = LabelEncoder().fit_transform(X[:,1])) 使用朴素贝叶斯:
model = nb.GaussianNB() model.fit(X,y)

机器学习Sklearn系列:(四)朴素贝叶斯的更多相关文章

  1. 机器学习算法实践:朴素贝叶斯 (Naive Bayes)(转载)

    前言 上一篇<机器学习算法实践:决策树 (Decision Tree)>总结了决策树的实现,本文中我将一步步实现一个朴素贝叶斯分类器,并采用SMS垃圾短信语料库中的数据进行模型训练,对垃圾 ...

  2. 11.sklearn中的朴素贝叶斯模型及其应用

    #1.使用朴素贝叶斯模型对iris数据集进行花分类 #尝试使用3种不同类型的朴素贝叶斯: #高斯分布型,多项式型,伯努利型 from sklearn import datasets iris=data ...

  3. 【机器学习】文本分类——朴素贝叶斯Bayes

    朴素贝叶斯主要用于文本分类.文本分类常见三大算法:KNN.朴素贝叶斯.支持向量机SVM. 一.贝叶斯定理 贝叶斯公式思想:利用已知值来估计未知概率.已知某条件概率,如何得到两个事件交换后的概率,也就是 ...

  4. 机器学习---用python实现朴素贝叶斯算法(Machine Learning Naive Bayes Algorithm Application)

    在<机器学习---朴素贝叶斯分类器(Machine Learning Naive Bayes Classifier)>一文中,我们介绍了朴素贝叶斯分类器的原理.现在,让我们来实践一下. 在 ...

  5. sklearn中的朴素贝叶斯模型及其应用

    1.(1)多项式 from sklearn.datasets import load_iris iris = load_iris() from sklearn.naive_bayes import G ...

  6. <机器学习实战>读书笔记--朴素贝叶斯

    1.朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法, 最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model, ...

  7. Andrew Ng机器学习公开课笔记 -- 朴素贝叶斯算法

    网易公开课,第5,6课 notes,http://cs229.stanford.edu/notes/cs229-notes2.pdf 前面讨论了高斯判别分析,是一种生成学习算法,其中x是连续值 这里要 ...

  8. NLP系列(4)_朴素贝叶斯实战与进阶

    作者: 寒小阳 && 龙心尘 时间:2016年2月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/50629608 htt ...

  9. NLP系列(4)_朴素贝叶斯实战与进阶(转)

    http://blog.csdn.net/han_xiaoyang/article/details/50629608 作者: 寒小阳 && 龙心尘 时间:2016年2月. 出处:htt ...

随机推荐

  1. airflow2.0.2分布式安装文档

    需要安装的组件 组件 功能 Airflow Webserver 查询元数据以监控和执行DAGs的web界面. Airflow Scheduler 它检查元数据数据库中的DAG和任务的状态,在必要时创建 ...

  2. GPU编程和流式多处理器(四)

    GPU编程和流式多处理器(四) 3.2. 单精度(32位) 单精度浮点支持是GPU计算的主力军.GPU已经过优化,可以在此数据类型上原生提供高性能,不仅适用于核心标准IEEE操作(例如加法和乘法),还 ...

  3. Linux内存技术分析(下)

    Linux内存技术分析(下) 五.内存使用场景 out of memory 的时代过去了吗?no,内存再充足也不可任性使用. 1.内存的使用场景 page 管理 slab(kmalloc.内存池) 用 ...

  4. Tesla T4视频编码性能分析

    Tesla T4视频编码性能分析 从开普勒开始的所有 NVIDIA GPUs 都支持完全加速的硬件视频编码: GPUs 支持完全加速的硬件视频解码.最近发布的图灵硬件提供了张量核心和更好的机器学习性能 ...

  5. SSM和SpringBoot常用注解

    SpringBoot的重要注解 @SpringBootApplication 创建 SpringBoot 项目之后会默认在主类加上 我们可以把 @SpringBootApplication看作是 @C ...

  6. SpringBoot2 参数管理实践,入参出参与校验

    一.参数管理 在编程系统中,为了能写出良好的代码,会根据是各种设计模式.原则.约束等去规范代码,从而提高代码的可读性.复用性.可修改,实际上个人觉得,如果写出的代码很好,即别人修改也无法破坏原作者的思 ...

  7. 量子:基于ERP块对的两步量子直接通信

    学习论文: 题目:Two-step quantum direct communication protocol using the Einstein-Podolsky-Rosen pair block ...

  8. 怎么回答面试官:你对Spring的理解?

    最近看了点Spring的源码,正好来稍微扯一扯,帮一部分培训班的朋友撕开一道口子,透透气.我自己都是看的培训班视频,所以也算培训班出身吧.所以下文开口闭口"培训班",不要觉得是我在 ...

  9. csp-s模拟测试41「夜莺与玫瑰·玫瑰花精·影子」

    夜莺与玫瑰 题解 联赛$T1$莫比乌斯$\%\%\%$ $dead$  $line$是直线 首先横竖就是$n+m$这比较显然 枚举方向向量 首先我们枚举方向向量时只枚举右下方向,显然贡献$*2$就是所 ...

  10. Windows内核开发-Windows内部概述-1-

    Windows内部概述-1- 进程: 进程是一个程序的运行实例的控制和管理对象.一般的程序员所说进程运行,这样的说法是不对的,因为进程不能运行程序,进程只能管理该程序运行.线程才是真正的执行代码的东西 ...