机器学习Sklearn系列:(四)朴素贝叶斯
3--朴素贝叶斯
原理
朴素贝叶斯本质上就是通过贝叶斯公式来对得到类别概率,但区别于通常的贝叶斯公式,朴素贝叶斯有一个默认条件,就是特征之间条件独立。
条件概率公式:
\]
贝叶斯公式可以写成:
\]
如果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_i|y)\)可以通过计算特征的数量得到概率。
\]
唯一需要注意的就是拉普拉斯修正(Laplacian Correction),如果莫一个新的特征x从来没有出现过,那么分母就有可能为0,为了避免这种情况,可以做如下操作:
\]
而对于连续型数据,计算方法则不太相同,高斯贝叶斯认为数据服从高斯分布,所以默认为某一列特征服从高斯分布,然后通过高斯概率密度函数,就可以得到相应的概率。
假设某一列特征服从整体分布
\]
其中\(\mu\)和\(\sigma\)为y类样本在样本x第i个属性的均值和方差,那么其计算方法如下:
首先计算出标签y在特征\(x_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系列:(四)朴素贝叶斯的更多相关文章
- 机器学习算法实践:朴素贝叶斯 (Naive Bayes)(转载)
前言 上一篇<机器学习算法实践:决策树 (Decision Tree)>总结了决策树的实现,本文中我将一步步实现一个朴素贝叶斯分类器,并采用SMS垃圾短信语料库中的数据进行模型训练,对垃圾 ...
- 11.sklearn中的朴素贝叶斯模型及其应用
#1.使用朴素贝叶斯模型对iris数据集进行花分类 #尝试使用3种不同类型的朴素贝叶斯: #高斯分布型,多项式型,伯努利型 from sklearn import datasets iris=data ...
- 【机器学习】文本分类——朴素贝叶斯Bayes
朴素贝叶斯主要用于文本分类.文本分类常见三大算法:KNN.朴素贝叶斯.支持向量机SVM. 一.贝叶斯定理 贝叶斯公式思想:利用已知值来估计未知概率.已知某条件概率,如何得到两个事件交换后的概率,也就是 ...
- 机器学习---用python实现朴素贝叶斯算法(Machine Learning Naive Bayes Algorithm Application)
在<机器学习---朴素贝叶斯分类器(Machine Learning Naive Bayes Classifier)>一文中,我们介绍了朴素贝叶斯分类器的原理.现在,让我们来实践一下. 在 ...
- sklearn中的朴素贝叶斯模型及其应用
1.(1)多项式 from sklearn.datasets import load_iris iris = load_iris() from sklearn.naive_bayes import G ...
- <机器学习实战>读书笔记--朴素贝叶斯
1.朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法, 最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model, ...
- Andrew Ng机器学习公开课笔记 -- 朴素贝叶斯算法
网易公开课,第5,6课 notes,http://cs229.stanford.edu/notes/cs229-notes2.pdf 前面讨论了高斯判别分析,是一种生成学习算法,其中x是连续值 这里要 ...
- NLP系列(4)_朴素贝叶斯实战与进阶
作者: 寒小阳 && 龙心尘 时间:2016年2月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/50629608 htt ...
- NLP系列(4)_朴素贝叶斯实战与进阶(转)
http://blog.csdn.net/han_xiaoyang/article/details/50629608 作者: 寒小阳 && 龙心尘 时间:2016年2月. 出处:htt ...
随机推荐
- docker部署node.js
1.dockerfile FROM node:14.16.0 RUN mkdir -p /var/log/lily/ RUN mkdir -p /opt/node # 工作目录 WORKDIR /op ...
- sql server 操作(不定期更新)
要求:基本的语法要清楚. sql server疑难点: 1.Partition by可以理解为 对多行数据分组后排序取每个产品的第一行数据 先处理内查询,由内向外处理,外层查询利用内层查询的结果嵌套查 ...
- 201871030129-魏琦 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业链接 我的课程学习目标 (1)掌握Github协作开发程序的操作方法:(2)理解并掌握代码风格规范.代码设计规范.代码复审.结对编程概念: ...
- AMD–7nm “Rome”芯片SOC体系结构,支持64核
AMD–7nm "Rome"芯片SOC体系结构,支持64核 AMD Fully Discloses Zeppelin SOC Architecture Details at ISS ...
- 开源FastGithub
0 前言 github网站访问慢或访问不了,相信很多人都会遇到过,解决方式大概有两种:一种是使用代理访问:另一种是使用ipaddress.com等域名解析网站查询域名的ip,然后在host文件增加ip ...
- 对标 Spring Boot & Cloud ,轻量框架 Solon 1.5.2 重要发布
Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...
- 【NX二次开发】Block UI 通过浏览选择文件
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- Java IO学习笔记七:多路复用从单线程到多线程
作者:Grey 原文地址:Java IO学习笔记七:多路复用从单线程到多线程 在前面提到的多路复用的服务端代码中, 我们在处理读数据的同时,也处理了写事件: public void readHandl ...
- Java代码优化:使用构造函数和使用一个个setter的效率差别
在对Java代码进行优化的时候,想方设法的要提高整体的效率,使用JProfiler看代码的时间占比,然后,看看哪些部分是可以优化的,减少运行时间的.下面有这么几个方向. 1. 能使用构造函数一步到位的 ...
- grep过滤空行和注释行
1)grep的排除选项为 -v排除空行的命令是:grep -v '^$' filename 2)排除以#注释的命令是:grep -v '^#' filename 3)结合起来就是,既排除空行又排除注释 ...