朴素贝叶斯算法

数据挖掘十大算法(九):朴素贝叶斯 python和sklearn实现

大憨熊 提交于 2019-11-28 09:16:59
第三个算法终于算是稍有了解了,其实当你结合数据了解了它的实现原理后,你会发现确实很朴素。这里对朴素贝叶斯算法做一个介绍和总结,包括( 原理、一个代码示例、sklearn实现 ),皆为亲自实践后的感悟,下面进入正文。 原理: 首先我们需要了解概率论的一些简单知识: 最后推导出的就是贝叶斯公式,这里说一下我的感悟:上面的公式如果就这样不结合数据来看,是很容易理解的,我用了几分钟便了解了这个高中学过的东西。但是在我将它和实际数据之间联系起来时,却花了几个小时。毕竟得到一个公式只是基础,如果不能在数据上运用得当那也是无用武之地。下面就这个问题说一下: 朴素贝叶斯的原理: 根据一些先验概率计算Y变量属于某个类别的后验概率 先验概率: 是指现有数据根据以往的经验和分析得到的概率 后验概率: 事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小 一个通俗的理解: 你求出了你在百思图买了一双白鞋的概率,那么如何得知你买了一双白鞋而这双白鞋就在百思图的概率呢。 这就是利用先验概率来求得后验概率的问题,再拿一个数据说明(引入他人的): 上表中的信息反映的是某P2P企业判断其客户是否会流失(churn),而影响到该变量的因素包含年龄、性别、收入、教育水平、消费频次、支持。那根据这样一个信息,我该如何理解朴素贝叶斯的思想呢?再来看一下朴素贝叶斯公式: 从公式中可知

朴素贝叶斯算法——实现新闻分类(Sklearn实现)

好久不见. 提交于 2019-11-28 09:13:53
目录 1、朴素贝叶斯实现新闻分类的步骤 2、代码实现 1、朴素贝叶斯实现新闻分类的步骤 (1) 提供文本文件 ,即 数据集下载 (2) 准备数据 将数据集划分为 训练集 和 测试集 ;使用jieba模块进行 分词 , 词频统计 , 停用词过滤 ,文本 特征提取 ,将 文本数据向量化 停用词文本 stopwords_cn.txt下载 jieba 模块学习: https://github.com/fxsjy/jieba ; https://www.oschina.net/p/jieba (3) 分析数据 :使用matplotlib模块分析 (4) 训练算法 :使用sklearn.naive_bayes 的MultinomialNB进行训练 Sklearn构建朴素贝叶斯分类器官方文档学习 在scikit-learn中,一共有3个朴素贝叶斯的分类算法类。分别是 GaussianNB , MultinomialNB 和 BernoulliNB 。 其中 GaussianNB 就是先验为 高斯分布的朴素贝叶斯 , MultinomialNB 就是 先验为多项式分布的朴素贝叶斯 ,而 BernoulliNB 就是 先验为伯努利分布的朴素贝叶斯 。 (5) 测试算法 :使用测试集对贝叶斯分类器进行测试 2、代码实现 # -*- coding: UTF-8 -*- import os import

学习sklearn朴素贝叶斯

爷,独闯天下 提交于 2019-11-28 09:09:33
不同的贝叶斯假设数据的分布不同。 暂时全部使用默认参数 高斯朴素贝叶斯 """ 多项式朴素贝叶斯分类器适用于具有离散特征的分类(例如,用于文本分类的字数)。 多项分布通常需要整数特征计数。然而,在实践中,诸如tf-idf的分数计数也可以起作用。 """ from sklearn import datasets iris = datasets . load_iris ( ) from sklearn . naive_bayes import GaussianNB gnb = GaussianNB ( ) gnb . fit ( iris . data , iris . target ) y_pred = gnb . predict ( iris . data ) print ( 'number of mislabeled points out of a total %d points : %d' % ( iris . data . shape [ 0 ] , ( iris . target != y_pred ) . sum ( ) ) ) gnb . score ( iris . data , iris . target ) gnb . get_params ( ) number of mislabeled points out of a total 150 points : 6

sklearn中的朴素贝叶斯算法

筅森魡賤 提交于 2019-11-28 09:09:01
sklearn中的朴素贝叶斯分类器 之前 理解朴素贝叶斯 中的结尾对sklearn中的朴素贝叶斯进行了简单的介绍. 此处对sklearn中的则对sklearn中的朴素贝叶斯算法进行比较详细介绍.不过手下还是对朴素贝叶斯本身进行一些补充. 朴素贝叶斯算法 朴素贝叶斯算法的数学基础都是围绕贝叶斯定理展开的,因此这一类算法都被称为朴素贝叶斯算法. 朴素贝叶斯的分类原理是通过对象的先验概率,利用贝叶斯公式计算出后验概率.即对象属于某一类的概率. 选择具有后验概率最大的类作为该对象所属的类.同时朴素–‘特征为独同分布’, 同时因为先验概率需要我们先假设一个事件分布的概率分布方式(三种),因此也就有了我们在sklearn中对应的三种朴素贝叶斯算法 高斯朴素贝叶斯分类器(默认条件概率分布概率符合高斯分布) 多项式朴素贝叶斯分类器(条件概率符合多项式分布) 伯努利朴素贝叶斯分类器(条件概率符合二项分布) 尽管其假设过于简单,但是在很多实际情况下,朴素贝叶斯工作得很好,特别是文档分类和垃圾邮件过滤。 这些工作都要求一个小的训练集来估计必需参数。 同时相比于其他更复杂的方法,朴素贝叶斯学习器和分类器非常快。 分类条件分布的解耦意味着可以独立单独地把每个特征视为一维分布来估计。 这样反过来有助于缓解维度灾难带来的问题。 最后总结其特点有以下几个 属性可以离散可以连续 数学基础扎实,分类效率稳定

4 朴素贝叶斯法

时光毁灭记忆、已成空白 提交于 2019-11-27 21:48:41
朴素贝叶斯法 朴素贝叶斯(naïve Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法,是一种生成模型。 朴素贝叶斯法的学习与分类 基本方法 朴素贝叶斯法通过训练数据集学习联合概率分布 P(X,Y)。具体地,学习先验概率分布 P(Y=c k )及条件概率分布 P(X=x|Y=c k )。于是得到联合概率分布 P(X=x,Y=y)=P(X=x|Y=y)• P(Y=y) 先验概率:事件发生前的预判概率,一般都是单独事件概率。如 P(Y)或 P(X) 后验概率:事件发生后求的反向条件概率;或者说,基于先验概率求得的反向条件概率。如 P(Y|X) 条件概率:一个事件发生后另一个事件发生的概率。如 P(X|Y) 实例:假设y是文章种类,是一个枚举值;x是向量,表示文章中各个单词的出现次数。 在拥有训练集的情况下,显然除了后验概率P(y|x)中的x来自一篇新文章无法得到,p(x),p(y),p(x|y)都是可以在抽样集合上统计出的。 两者之间的关系:先验概率是获得后验概率的前提。 朴素贝叶斯法对条件概率分布作了条件独立性的假设: 朴素贝叶斯法分类时,对给定的输入x,通过学习到的模型计算后验概率分布P(Y=c k |X=x),将后验概率最大的类作为x的类输出。后验概率计算根据贝叶斯定理进行: 于是,朴素贝叶斯分类器可表示为 : 注意到,在上式中分母对所有C k 都是相同的,所以

机器学习之朴树贝叶斯①——(思想及典型例题底层实现)

坚强是说给别人听的谎言 提交于 2019-11-27 07:19:27
文章目录 先验概率、后验概率(条件概率)引例 乘法公式、全概率公式、贝叶斯公式 朴素贝叶斯为何朴素 朴素贝叶斯定义 朴素贝叶斯直观理解 朴素的意义 拉普拉斯平滑 手写代码 先验概率、后验概率(条件概率)引例 想象有 A、B、C 三个不透明的碗倒扣在桌面上,已知其中一个瓷碗下面有鸡蛋。此时请问,鸡蛋在 A 碗下面的概率是多少?答曰 1/3。 现在发生一件事:有人揭开了 C 碗,发现 C 碗下面没有蛋。此时再问:鸡蛋在 A 碗下面的概率是多少?答曰 1/2。注意,由于有“揭开C碗发现鸡蛋不在C碗下面”这个新情况,对于“鸡蛋在 A 碗下面”这件事的主观概率由原来的 1/3 上升到了1/2。这里的 先验概率 就是 1/3, 后验概率(条件概率) 是 1/2。 乘法公式、全概率公式、贝叶斯公式 条件概率 设A,B为任意两个事件,若P(A)>0,我们称在已知事件A发生的条件下,事件B发生的概率为条件概率,记为P(B|A),并定义 乘法公式 如果P(A)>0,则P(AB)=P(A)P(B|A) 如果P(A1…An-1)>0,则P(A1…An)= P(A1) P(A2|A1) P(A3|A1A2)…P(An|A1…An) 全概率公式 全概率公式是用于计算某个“结果” B发生的可能性大小。如果一个结果B的发生总是与某些前提条件Ai 相联系,那么在计算P(B)时,我们就要用Ai 对B作分解

朴素贝叶斯

被刻印的时光 ゝ 提交于 2019-11-27 05:11:56
《概率论》(当年我学习的课程为《概率论与数理统计》,涵盖了概率论与统计学)应该是每个理工科大学生都要学习的课程,不知道有多少同学和我一样,学得一头雾水。悲催的是,考研的时候又学习了一遍,依然不着门路,靠死记硬背过关。好在后面的学习和工作生涯中,再没有和它打过照面,直到最近开始接触机器学习。 《机器学习实战》第4章,开始介绍基于概率论的分类方法。其实《机器学习》这本书对贝叶斯决策论有比较详细的介绍,不过涉及到比较多的数学公式,比较难懂。而本书对程序员比较友好,只涉及很少的数学知识,更多的是通过程序来阐述这一算法。 条件概率 书中举了一个例子来阐述条件概率的概念。7块石头,3块是灰色的,4块是黑色的,放入两个桶A和B,A桶放4块石头(2块灰色,2块黑色),B桶放3块石头(1块灰色,2块灰色)。计算从B桶中取到灰色石头的概率的方法,就是所谓的条件概率。这里的已知条件是石头取自B桶且B桶有3块石头。用公式表示为: P(gray | bucketB) = P(gray and bucketB) / P(bucketB) 1 这个公式看起来不起眼,但却开启了一门新的理论,即通过先验知识和逻辑推理来处理不确定命题。另一种概率解释称为频数概率,它只从数据本身获取结论,并不考虑逻辑推理及先验知识。 另一种有效计算条件概率的方法称为贝叶斯准则。贝叶斯准则告诉我们如何交换条件概率中的条件和结果

Sklearn实现朴素贝叶斯

蓝咒 提交于 2019-11-25 19:17:54
#------------------------------Sklearn 实现朴素贝叶斯----------------------- # 在scikit-learn中,一共有3个朴素贝叶斯的分类算法类。 # 分别是GaussianNB,MultinomialNB和BernoulliNB。 # 其中GaussianNB就是先验为高斯分布的朴素贝叶斯, # MultinomialNB就是先验为多项式分布的朴素贝叶斯, # 而BernoulliNB就是先验为伯努利分布的朴素贝叶斯。 # # 这三个类适用的分类场景各不相同,一般来说,如果样本特征的分布大部分是连续值,使用GaussianNB会比较好。 # 如果如果样本特征的分大部分是多元离散值,使用MultinomialNB比较合适。 # 而如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。 #----------------------------------案例一------------------------------------ #GaussianNB_高斯朴素贝叶斯 import numpy as np from sklearn.naive_bayes import GaussianNB from sklearn.naive_bayes import MultinomialNB from