sklearn朴素贝叶斯分类器_朴素贝叶斯原理
贝叶斯分类算法是统计学是一种概率分类方法,朴素贝叶斯分类时贝叶斯分类中最简单的一种。利用贝叶斯公式根据某特征的先验概率计算出其后延概率,然后选择具有最大后延概率的类作为该特征所属的类。朴素贝叶斯,称之为“朴素”,是因为整个形式化过程只做了最原始、最简单的假设,具体假设如下:
- 特征之间相互独立
- 每个特征同等重要
1. 概率相关
先验概率: 比如向女生表白成功的概率是20%,记为P(A)=20%
条件概率:在事件B发生的情况下,事件A发生的概率,用P(A|B)表示,具体计算公式如下。如帅的前提下,向女生表白成功的概率为50%,记为P(A|B)=50%。
同理可得:在事件A发生的情况下,事件B发生的概率,用P(B|A)表示,具体计算公式如下:
联合概率:事件A和B同时发生的概率 。比如,长得帅且向女生表白成功的概率为1%,记为P(A∩B)=1%
条件概率和联合概率之间的关系,可用下式表示:
所以就会有:
全概率: 如果事件A不是一个条件,而是一堆条件,这些条件互斥且能穷尽所有可能 。则对任意一个事件B则有
2. 贝叶斯准则
如果已知P(B|A_i),要求P(A_i|B),应用贝叶斯准则得到:
要求解
先验概率
的计算公式如下:
其中,
如果B是多维属性,那么可以假设
:
3. 使用条件概率来分类
如果给定某个由
使用这些定义,可以定义贝叶斯分类准则:
- 如果
, 则属于类别
- 如果
, 则属于类别
使用贝叶斯准测,可以通过已知的三个概率值来计算未知的概率值。
4. 嫁还是不嫁?
通过嫁还是不嫁这个二分类问题,来更加了解朴素贝叶斯。假设由颜值,性格,是否上进这三个属性来决定最终嫁还是不嫁。如果现在有一个男生是:帅 & 性格不好 & 不上进,预测女生嫁还是不嫁该男生呢?
数据集如下:
由于朴素贝叶斯公式如下:
换种更清楚的表达如下:
在这个例子中,就是要求
通过朴素贝叶斯公式:
在这两个公式里,因为 P(帅,性格不好,不上进)都是一样的,所以,想要获取 P(嫁|帅,性格不好,不上进) 和 P(不嫁|帅,性格不好,不上进) 这两个概率中的最大值,就等价于求P(帅,性格不好,不上进|嫁)P(嫁)和P(帅,性格不好,不上进|不嫁)P(不嫁)中的最大值。只需计算出P(帅,性格不好,不上进|嫁)、P(帅,性格不好,不上进|不嫁)、P(嫁)、P(不嫁)这四个概率,即可求出P(嫁|帅,性格不好,不上进)和P(不嫁|帅,性格不好,不上进)这个两个概率中最大概率对应的类别。
由于
则有
由于
所以, 根据朴素贝叶斯算法可以给这个女生答案,是不嫁
5. 朴素贝叶斯种类
在sklearn中,朴素贝叶斯种类有三种,分别是GaussianNB、MultinomialNB和BernoulliNB。
5.1 高斯朴素贝叶斯(GaussianNB)
GaussianNB是先验为高斯分布(正态分布)的朴素贝叶斯,假设每个标签的数据都服从高斯分布(正态分布)。正态分布的概率密度函数计算公式如下:
其中,
sklearn中的GaussianNB实现
下面采用sklearn中的鸾尾花数据集,由于数据集都是连续属性,所以采用GaussianNB来进行实现,看下预测情况。
# 导入包
运行结果如下
测试集准确率为: 0.9736842105263158
可以看到,测试集准确率97%,准确率挺高。
5.2 多项式朴素贝叶斯(MultinomialNB)
多项式朴素贝叶斯是先验为多项式分布的朴素贝叶斯。 它假设特征是由一个简单多项式分布生成的。多项分布可以描述各种类型样本出现次数的概率,因此多项式朴素贝叶斯非常适合用于描述出现次数的特征。该模型常用于文本分类,特征表示的是次数,例如某个词语的出现次数。
多项式分布
多项式分布来源于统计学中的多项式实验,这种实验可以解释为:实验包括n次重复试验,每次试验都有不同的可能结果。在任何给定的试验中,特定结果发生的概率是不变的。
多项式分布公式:
其中,
sklearn中的MultinomialNB实现
多项式所涉及的特征往往是次数,频率,计数这样的概念,这些概念都是离散的正整数,因此,sklearn中的MultinomialNB不接受负值的输入。
MultinomialNB包含如下的参数和属性:
class
其中
- alpha : 浮点数, 可不填 【默认为1.0】
平滑系数λ,如果为0,则表示完全没有平滑选项。需注意,平滑相当于人为给概率加上一些噪音,因此λ设置得越大,精确性会越低(虽然影响不是非常大)
- fit_prior : 布尔值, 可不填【默认为True】
是否学习先验概率P(Y=c)。如果为False,则所有的样本类别输出都有相同的类别先验概率。即认为每个标签类出现的概率是1/总类别数
- class_prior:形似数组的结构,结构为(n_classes,),可不填【默认为None】 表示类的先验概率P(Y=c)。如果没有给出具体的先验概率则自动根据数据来进行计算。
总结如下:
其中,k为总类别数,m为训练集样本总数量,
实例
建一个简单多项式朴素贝叶斯(让所有的参数保持默认)的例子。
# 导⼊入需要的模块和库
运行结果如下:
5.3 伯努利朴素贝叶斯(BernoulliNB)
BernoulliNB就是先验为伯努利分布的朴素贝叶斯。假设特征的先验概率为二元伯努利分布,在文本分类中 ,就是一个特征有没有在一个文档中出现。
伯努利分布公式如下:
此时,
由于
sklearn中的BernoulliNB实现
类BernoulliNB包含如下的参数和属性:
class
其中
binarize:将数据特征二值化的阈值,大于binarize的值处理为1 ,小于等于binarize的值处理为0;
其他参数说明见5.2中多项式的参数说明;
实例
先来建一个简单伯努利朴素贝叶斯的例子。
import
打印相关属性语句如下:
# class_log_prior_:类先验概率对数值
运行结果如下
小结
- 如果样本特征的分布大部分是连续值(如人的身高,体重等),建议使用GaussianNB会比较好;
- 如果样本特征的分布大部分是多元离散值(如在文档分类中特征是单词出现次数),建议使用MultinomialNB比较好;
- 如果样本特征是二元离散值(如在文档分类中特征是单词是否出现) ,建议使用BernoulliNB比较好。
朴素贝叶斯算法优缺点
优点: 在属性相关性较小时效果较好,可以处理多类别问题;算法逻辑简单,易于实现 ;
缺点: 在属性个数比较多或者属性之间相关性较大时,分类效果不好;
sklearn朴素贝叶斯分类器_朴素贝叶斯原理相关推荐
- 多项式朴素贝叶斯分类器_多项式朴素贝叶斯分类器的主题预测
多项式朴素贝叶斯分类器 In Analytics Vidhya, Hackathon, there was a problem statement for text prediction of top ...
- sklearn朴素贝叶斯分类器_机器学习06——朴素贝叶斯
一.概率公式: 条件概率公式: 事件A发生的条件下,事件B发生的概率=事件A和事件B同时发生的概率/事件A发生的概率 P(AB)=P(A)*P(B|A) 事件A和事件B同时发生的概率=事件A发生的概率 ...
- 《机器学习西瓜书》学习笔记——第七章_贝叶斯分类器_朴素贝叶斯分类器
朴素:特征条件独立:贝叶斯:基于贝叶斯定理. 朴素贝叶斯是经典的机器学习算法之一,也基于概率论的分类算法,属于监督学习的生成模型.朴素贝叶斯原理简单,也很容易实现,多用于文本分类,比如垃圾邮件过滤. ...
- 朴素贝叶斯分类器_基于环境光补偿二进制图像对架空复合绝缘子进行疏水性判断的朴素贝叶斯分类器...
关注高电压技术,关注学科发展 内容整理自<High Voltage>2019年第4卷第4期 由Rajamohan Jayabal :Vijayarekha Karuppiyan ; Rak ...
- sklearn朴素贝叶斯分类器_手撕朴素贝叶斯分类器源码(Naive Bayesian)
鋌~(最近压力略大,好久没有更新,xixixi),今天的主题是朴素贝叶斯分类器,NB这个缩写真是绝了,确实值得这个缩写,哈哈哈.今天跟大家聊一聊朴素贝叶斯分类器的基本原理和代码编写.贝叶斯分类器的基本 ...
- python贝叶斯分类器_朴素贝叶斯分类器的简单Python实现
本文介绍如何使用Python实现一个简易的朴素贝叶斯分类器(Naive Baves classifier). 贝叶斯公式 我们先简单回顾一下贝叶斯公式: 其中,我们称P(A)和P(B)为先验概率,P( ...
- 机器学习实战_朴素贝叶斯分类器_预测疾病
import numpy as np""" 函数说明:创建实验样本 Parameters:无 Returns:postingList - 实验样本切分的词条classLi ...
- 朴素贝叶斯分类器原理解析与python实现
贝叶斯分类器是以贝叶斯原理为基础的分类器的总称,是一种生成式模型,朴素贝叶斯分类器是其中最简单的一种.要高明白贝叶斯分类器的原理,首先得明白一些基本概念. 预备知识 基本概念 先验概率:根据统计/经验 ...
- 机器学习基础(六):贝叶斯分类(贝叶斯决策论、朴素/半朴素贝叶斯分类器、贝叶斯网、EM算法)
6.贝叶斯分类 6.1贝叶斯决策论Bayesian decision theory 概率框架下实施决策的基本方法. 对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和 ...
最新文章
- IronPython2.7 C# 4.0 互调用备忘
- opencv 图片读取和视频读取(一)
- 在哪里能收到python实例代码-用python做一个搜索引擎(Pylucene)的实例代码
- linux命令uname
- thinkphp中的AJAX返回ajaxReturn()
- python slice是共享内存吗_python共享内存实现进程通信
- java解析json数组对象_JAVA中快速解析JSON对象里包含的JSON数组
- Maven工作笔记-jar包打入本地仓库并打包
- nagios 安装步骤-1
- 成绩查看_2019一级建造师成绩已公布,赶紧来查看成绩吧
- Markdown 编辑器 Editor.md 图片上传使用
- php 网上支付之易宝支付
- PS批量处理图片大小-PS批量处理水印整齐
- 京东放大镜效果的实现
- 研究生的生活原来是酱紫的……
- android studio重装后直接,【原创】重装Windows系统后Android studio无需重装,直接迁移...
- vue实现带样式的textarea输入框,contenteditable属性应用
- BCGP ribbon功能区点击切切属性页
- java 实验6 图形用户界面设计试验(2)
- HP StorageWorks MSA SAN 存储阵列 - MSA2000 vdisk 和 volume 的扩容
热门文章
- 《动手玩转Arduino》——2.4 展望
- Java 中long类型转换成为int类型时可能会出错的地方
- PHP使用session_set_save_handler陷阱
- 实例教程二:短信发送器
- 一个Linux下的 俄罗斯方块游戏,基于 ncurse 库。。
- Practice:在2008 core上部署和管理DHCP服务器
- pytorch中数组维度的理解
- Linux DNS服务配置与管理详解
- 【问题】将数据块存储大小设置为128M,HDFS客户端写文件时,当写入一个100M大小的文件,实际占用存储空间为多大?
- Java GUI编程:swing实现上传tiff文件至hdfs功能