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. Scrapy的Request和Response

    Scrapy的Request和Response   本文链接:https://blog.csdn.net/kissazhu/article/details/80865773 上节课我们学习了中间件,知 ...

  2. Echarts-2.2.7中统计出来的统计图保存为图片

    今天在做一个图形报表,有个需求是要把展现的统计图保存为图片, 图形报表用的Echarts-2.2.7, 以前有用过 Echarts,记得echarts插件是可以帮助我们把统计图保存为图片的. 只是不记 ...

  3. eclipse自动格式化代码

    前段时间在Eclipse里面设置了java文件保存时自动格式化,在java->Code Style->Formatter里设置了自定义的格式化的样式,这样每次保存后都会自动格式化代码,用了 ...

  4. 自定义 DataLoader

    自定义 DataLoader 如 数据输入 一文所介绍,OneFlow 支持两种数据加载方式:直接使用 NumPy 数据或者使用 DataLoader 及其相关算子. 在大型工业场景下,数据加载容易成 ...

  5. spring IOC DI AOP MVC 事务, mybatis 源码解读

    demo https://gitee.com/easybao/aop.git spring DI运行时序 AbstractApplicationContext类的 refresh()方法 1: pre ...

  6. .NET平台系列24:从.NET Framework迁移到.NET Core/.NET5的技术指南

    系列目录     [已更新最新开发文章,点击查看详细] 本文讲解了在将代码从 .NET Framework 移植到 .NET(旧称为 .NET Core)时应考虑的事项. 对于许多项目,从 .NET ...

  7. 三、Tomcat配置文件的介绍

    *允许直接复制另外多份完整的tomcat数据,修改配置保证不冲突,起多个tomcat,优点:其中一个tomcat挂了不影响其他网页 tomcat配置文件server.xml介绍 <Server& ...

  8. 谁能干掉了if else

    很多人觉得自己写的是业务代码,按照逻辑写下去,再把公用的方法抽出来复用就可以了,设计模式根本就没必要用,更没必要学. 一开始的时候,我也是这么想,直到我遇到... 举个例子 我们先看一个普通的下单拦截 ...

  9. Java JDK 动态代理(AOP)使用及实现原理分析

    一.什么是代理? 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 代理模式U ...

  10. 查询表空间总大小(dba_data_files和dba_segments,dba_free_space区别)

    1, dba_data_files,dba_segments,dba_free_space得出结论:一般情况下(没有drop表的时候):dba_data_files bytes = (dba_segm ...