朴素贝叶斯

算法优缺点

  • 优点:在数据较少的情况下依然有效,可以处理多类别问题

  • 缺点:对输入数据的准备方式敏感

  • 适用数据类型:标称型数据

算法思想:

朴素贝叶斯
比如我们想判断一个邮件是不是垃圾邮件,那么我们知道的是这个邮件中的词的分布,那么我们还要知道:垃圾邮件中某些词的出现是多少,就可以利用贝叶斯定理得到。
朴素贝叶斯分类器中的一个假设是:每个特征同等重要

函数

loadDataSet()

创建数据集,这里的数据集是已经拆分好的单词组成的句子,表示的是某论坛的用户评论,标签1表示这个是骂人的

createVocabList(dataSet)

找出这些句子中总共有多少单词,以确定我们词向量的大小

setOfWords2Vec(vocabList, inputSet)

将句子根据其中的单词转成向量,这里用的是伯努利模型,即只考虑这个单词是否存在

bagOfWords2VecMN(vocabList, inputSet)

这个是将句子转成向量的另一种模型,多项式模型,考虑某个词的出现次数

trainNB0(trainMatrix,trainCatergory)

计算P(i)和P(w[i]|C[1])和P(w[i]|C[0]),这里有两个技巧,一个是开始的分子分母没有全部初始化为0是为了防止其中一个的概率为0导致整体为0,另一个是后面乘用对数防止因为精度问题结果为0

classifyNB(vec2Classify, p0Vec, p1Vec, pClass1)

根据贝叶斯公式计算这个向量属于两个集合中哪个的概率高

  1.  1 #coding=utf-8
     2 from numpy import *
     3 def loadDataSet():
     4     postingList=[['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'],
     5                  ['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'],
     6                  ['my', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'him'],
     7                  ['stop', 'posting', 'stupid', 'worthless', 'garbage'],
     8                  ['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'],
     9                  ['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']]
    10     classVec = [0,1,0,1,0,1]    #1 is abusive, 0 not
    11     return postingList,classVec
    12
    13 #创建一个带有所有单词的列表
    14 def createVocabList(dataSet):
    15     vocabSet = set([])
    16     for document in dataSet:
    17         vocabSet = vocabSet | set(document)
    18     return list(vocabSet)
    19
    20 def setOfWords2Vec(vocabList, inputSet):
    21     retVocabList = [0] * len(vocabList)
    22     for word in inputSet:
    23         if word in vocabList:
    24             retVocabList[vocabList.index(word)] = 1
    25         else:
    26             print 'word ',word ,'not in dict'
    27     return retVocabList
    28
    29 #另一种模型
    30 def bagOfWords2VecMN(vocabList, inputSet):
    31     returnVec = [0]*len(vocabList)
    32     for word in inputSet:
    33         if word in vocabList:
    34             returnVec[vocabList.index(word)] += 1
    35     return returnVec
    36
    37 def trainNB0(trainMatrix,trainCatergory):
    38     numTrainDoc = len(trainMatrix)
    39     numWords = len(trainMatrix[0])
    40     pAbusive = sum(trainCatergory)/float(numTrainDoc)
    41     #防止多个概率的成绩当中的一个为0
    42     p0Num = ones(numWords)
    43     p1Num = ones(numWords)
    44     p0Denom = 2.0
    45     p1Denom = 2.0
    46     for i in range(numTrainDoc):
    47         if trainCatergory[i] == 1:
    48             p1Num +=trainMatrix[i]
    49             p1Denom += sum(trainMatrix[i])
    50         else:
    51             p0Num +=trainMatrix[i]
    52             p0Denom += sum(trainMatrix[i])
    53     p1Vect = log(p1Num/p1Denom)#处于精度的考虑,否则很可能到限归零
    54     p0Vect = log(p0Num/p0Denom)
    55     return p0Vect,p1Vect,pAbusive
    56
    57 def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):
    58     p1 = sum(vec2Classify * p1Vec) + log(pClass1)    #element-wise mult
    59     p0 = sum(vec2Classify * p0Vec) + log(1.0 - pClass1)
    60     if p1 > p0:
    61         return 1
    62     else:
    63         return 0
    64
    65 def testingNB():
    66     listOPosts,listClasses = loadDataSet()
    67     myVocabList = createVocabList(listOPosts)
    68     trainMat=[]
    69     for postinDoc in listOPosts:
    70         trainMat.append(setOfWords2Vec(myVocabList, postinDoc))
    71     p0V,p1V,pAb = trainNB0(array(trainMat),array(listClasses))
    72     testEntry = ['love', 'my', 'dalmation']
    73     thisDoc = array(setOfWords2Vec(myVocabList, testEntry))
    74     print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)
    75     testEntry = ['stupid', 'garbage']
    76     thisDoc = array(setOfWords2Vec(myVocabList, testEntry))
    77     print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)
    78
    79
    80 def main():
    81     testingNB()
    82
    83 if __name__ == '__main__':
    84     main()

    机器学习笔记索引

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/MrLJC/p/4102737.html

朴素贝叶斯算法的python实现相关推荐

  1. 机器学习之朴素贝叶斯算法原理+Python实现

    朴素贝叶斯 1.简介 ​ 贝叶斯分类算法是统计学中的一种概率分类方法,朴素贝叶斯分类是贝叶斯分类中最简单的一种.其分类原理就是利用贝叶斯公式根据某特征的先验概率计算出其后验概率,然后选择具有最大后验概 ...

  2. python实现排列组合公式算法_朴素贝叶斯算法的Python实现

    朴素贝叶斯分类算法被广泛应用于文本分类场景中.包含垃圾邮件.互联网新闻等分类任务,属于有监督学习算法.它独立考量每一维度特征被分类的条件概率,然后综合这些概率对其所在的特征向量做出分类预测,即&quo ...

  3. 朴素贝叶斯算法(python 实现)

    利用朴素贝叶斯贝叶斯算法实现分类 本文主要通过python构建朴素贝叶斯分类算法: 原理: 贝叶斯公式, 朴素的理解:假设个特征之间相互独立,则上面公式中: 通过此公式,可将未知的条件概率转换为已知条 ...

  4. 【机器学习入门】(3) 朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)附python完整代码及数据集

    各位同学好,今天我和大家分享一下朴素贝叶斯算法中的三大模型.在上一篇文章中,我介绍了朴素贝叶斯算法的原理,并利用多项式模型进行了文本分类预测. 朴素贝叶斯算法 -- 原理,多项式模型文档分类预测,附p ...

  5. 【机器学习入门】(2) 朴素贝叶斯算法:原理、实例应用(文档分类预测)附python完整代码及数据集

    各位同学好,今天我向大家介绍python机器学习中的朴素贝叶斯算法.内容有:算法的基本原理:案例实战--新闻文档的分类预测. 案例简介:新闻数据有20个主题,有10万多篇文章,每篇文章对应不同的主题, ...

  6. Python实现朴素贝叶斯算法

    Python实现朴素贝叶斯算法 1.算法介绍 朴素贝叶斯假设特征相互独立,于是有下面的公式: x表示特征向量,c表示类别. 原理: 通过数据集计算出公式中右边分子中的各个概率.预测时根据公式计算出该样 ...

  7. [Python图像处理] 二十六.图像分类原理及基于KNN、朴素贝叶斯算法的图像分类案例

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  8. 朴素贝叶斯算法详解及python代码实现

    朴素贝叶斯算法 算法原理 对数据的要求 算法的优缺点 算法需要注意的点 算法实现(python)(待更.......) 算法原理 P(Ck∣xi)=p(xi∣ck)∗p(ck)p(xi)=p(x1∣c ...

  9. 用python实现朴素贝叶斯算法_朴素贝叶斯算法 python 实现

    应用贝叶斯准则: 使用上面这些定义,可以定义贝叶斯分类准则为: 如果 P(c1|x, y) > P(c2|x, y), 那么属于类别 c1; 如果 P(c2|x, y) > P(c1|x, ...

最新文章

  1. Mysql迁移到Postgresql
  2. python发送文件给微信好友_Python定时自动给微信好友发送天气预报
  3. js循环写入html不覆盖,【JavaScript】使用document.write输出覆盖HTML问题
  4. linux之分区的水深(标准分区方式)
  5. vim复制、删除和粘贴一行
  6. 数据访问层代码自动生成
  7. nginx虚拟主机配置实例
  8. ICCV 2015 揭开152层神经网络的面纱
  9. java clone数组_Java中的数组有对应的类么,为什么数组可以直接调用clone()方法?...
  10. 计算机串口接打印机并口,电子连接系统上的串口和并口知识分享
  11. SqList *L与SqList *L的区别
  12. js表格实现行、列冻结
  13. 京东app后台多端融合架构代码重构实战
  14. 制作简单的星星评分案例
  15. 从执行顺序看for循环(深入理解)
  16. 【计算机组成原理】寻址方式
  17. 同是IT小小鸟——《我是一只IT小小鸟》读书笔记
  18. Web —— 单页面和多页面模式
  19. socket 编程基础
  20. wkhtmltopdf-实现Html转pdf

热门文章

  1. [转]笑话: 耐力惊人的三只乌龟
  2. windows 2008 (非R2)使用批处理文件调整组策略过程记录
  3. Git合并和变基简介:它们是什么,以及如何使用它们
  4. 1099 Build A Binary Search Tree
  5. 日志文件和mysql同步到kafka_logstash_output_kafka:Mysql同步Kafka深入详解
  6. Android Monkey使用
  7. python爬虫日志(9)爬取代理
  8. pangolin最新版 v2.5.2.975
  9. 使用Depth Texture
  10. C# 判断远程文件是否存在