当前位置: 首页 > 编程笔记 >

朴素贝叶斯算法的python实现方法

魏朗
2023-03-14
本文向大家介绍朴素贝叶斯算法的python实现方法,包括了朴素贝叶斯算法的python实现方法的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了朴素贝叶斯算法的python实现方法。分享给大家供大家参考。具体实现方法如下:

朴素贝叶斯算法优缺点

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

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

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

算法思想:

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

朴素贝叶斯分类器中的一个假设是:每个特征同等重要

函数
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)

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


#coding=utf-8

from numpy import *

def loadDataSet():

    postingList=[['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'],

                 ['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'],

                 ['my', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'him'],

                 ['stop', 'posting', 'stupid', 'worthless', 'garbage'],

                 ['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'],

                 ['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']]

    classVec = [0,1,0,1,0,1]    #1 is abusive, 0 not

    return postingList,classVec

#创建一个带有所有单词的列表 def createVocabList(dataSet):     vocabSet = set([])     for document in dataSet:         vocabSet = vocabSet | set(document)     return list(vocabSet)     def setOfWords2Vec(vocabList, inputSet):     retVocabList = [0] * len(vocabList)     for word in inputSet:         if word in vocabList:             retVocabList[vocabList.index(word)] = 1         else:             print 'word ',word ,'not in dict'     return retVocabList

#另一种模型    def bagOfWords2VecMN(vocabList, inputSet):     returnVec = [0]*len(vocabList)     for word in inputSet:         if word in vocabList:             returnVec[vocabList.index(word)] += 1     return returnVec

def trainNB0(trainMatrix,trainCatergory):     numTrainDoc = len(trainMatrix)     numWords = len(trainMatrix[0])     pAbusive = sum(trainCatergory)/float(numTrainDoc)     #防止多个概率的成绩当中的一个为0     p0Num = ones(numWords)     p1Num = ones(numWords)     p0Denom = 2.0     p1Denom = 2.0     for i in range(numTrainDoc):         if trainCatergory[i] == 1:             p1Num +=trainMatrix[i]             p1Denom += sum(trainMatrix[i])         else:             p0Num +=trainMatrix[i]             p0Denom += sum(trainMatrix[i])     p1Vect = log(p1Num/p1Denom)#处于精度的考虑,否则很可能到限归零     p0Vect = log(p0Num/p0Denom)     return p0Vect,p1Vect,pAbusive     def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):     p1 = sum(vec2Classify * p1Vec) + log(pClass1)    #element-wise mult     p0 = sum(vec2Classify * p0Vec) + log(1.0 - pClass1)     if p1 > p0:         return 1     else:         return 0         def testingNB():     listOPosts,listClasses = loadDataSet()     myVocabList = createVocabList(listOPosts)     trainMat=[]     for postinDoc in listOPosts:         trainMat.append(setOfWords2Vec(myVocabList, postinDoc))     p0V,p1V,pAb = trainNB0(array(trainMat),array(listClasses))     testEntry = ['love', 'my', 'dalmation']     thisDoc = array(setOfWords2Vec(myVocabList, testEntry))     print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)     testEntry = ['stupid', 'garbage']     thisDoc = array(setOfWords2Vec(myVocabList, testEntry))     print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)         def main():     testingNB()     if __name__ == '__main__':     main()

希望本文所述对大家的Python程序设计有所帮助。

 类似资料:
  • 还是让我们回到运动员的例子。如果我问你Brittney Griner的运动项目是什么,她有6尺8寸高,207磅重,你会说“篮球”;我再问你对此分类的准确度有多少信心,你会回答“非常有信心”。 我再问你Heather Zurich,6尺1寸高,重176磅,你可能就不能确定地说她是打篮球的了,至少不会像之前判定Brittney那样肯定。因为从Heather的身高体重来看她也有可能是跑马拉松的。 最后,

  • 贝叶斯法则描述了P(h)、P(h|D)、P(D)、以及P(D|h)这四个概率之间的关系: 这个公式是贝叶斯方法论的基石。在数据挖掘中,我们通常会使用这个公式去判别不同事件之间的关系。 我们可以计算得到在某些条件下这位运动员是从事体操、马拉松、还是篮球项目的;也可以计算得到某些条件下这位客户是否会购买Sencha绿茶等。我们会通过计算不同事件的概率来得出结论。 比如说我们要决定是否给一位客户展示Se

  • 训练阶段 朴素贝叶斯需要用到先验概率和条件概率。让我们回顾一下民主党和共和党的例子:先验概率指的是我们已经掌握的概率,比如美国议会中有233名共和党人,200名民主党人,那共和党人出现的概率就是: P(共和党) = 233 / 433 = 0.54 我们用P(h)来表示先验概率。而条件概率P(h|D)则表示在已知D的情况下,事件h出现的概率。比如说P(民主党|法案1=yes)。朴素贝叶斯公式中,我

  • 主要内容:简单应用案例,sklearn实现朴素贝叶斯通过两节知识的学习,相信你对朴素贝叶斯算法有了初步的掌握,本节将实际应用朴素贝叶斯算法,从实战中体会算法的精妙之处。 首先看下面一个简单应用案例: 简单应用案例 假设一个学校有 45% 的男生和 55% 的女生,学校规定不能穿奇装异服,男生的裤子只能穿长筒裤,而女生可以穿裙子或者长筒裤,已知该学校穿长筒裤的女生和穿裙子的女生数量相等,所有男生都必须穿长筒裤,请问如果你从远处看到一个穿裤子的学生,那

  • 参考资料地址: http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html 我的数据挖掘算法实现源码地址:https://github.com/linyiqun/DataMiningAlgorithm 介绍 要介绍朴素贝叶斯算法(Naive Bayes),那就得先介绍贝叶斯分类算法,贝叶斯分类算法

  • 我们会在这章探索朴素贝叶斯分类算法,使用概率密度函数来处理数值型数据。 内容: 朴素贝叶斯 微软购物车 贝叶斯法则 为什么我们需要贝叶斯法则? i100、i500健康手环 使用Python编写朴素贝叶斯分类器 共和党还是民主党 数值型数据 使用Python实现