精华内容
下载资源
问答
  • 机器学习算法与自然语言处理推荐来源:http://www.cnblogs.com/pinard/p/6069267.html作者:刘建平Pinard【机器学习算法与自然语言处理导读】朴素贝叶斯算法是最经典的几个机器学习算法之一,本文对它的优点,缺点...

    03072e4228c9bf3d0f830a586c15bbc8.png


      机器学习算法与自然语言处理推荐 

    来源:http://www.cnblogs.com/pinard/p/6069267.html

    作者:刘建平Pinard

    【机器学习算法与自然语言处理导读】朴素贝叶斯算法是最经典的几个机器学习算法之一,本文对它的优点,缺点进行总结。

    1.  朴素贝叶斯算法

    朴素贝叶斯属于生成式模型(关于生成模型和判别式模型,主要还是在于是否需要求联合分布),比较简单,你只需做一堆计数即可。如果注有条件独立性假设(一个比较严格的条件),朴素贝叶斯分类器的收敛速度将快于判别模型,比如逻辑回归,所以你只需要较少的训练数据即可。即使NB条件独立假设不成立,NB分类器在实践中仍然表现的很出色。它的主要缺点是它不能学习特征间的相互作用,用mRMR中R来讲,就是特征冗余。引用一个比较经典的例子,比如,虽然你喜欢Brad Pitt和Tom Cruise的电影,但是它不能学习出你不喜欢他们在一起演的电影。

    2.  优点

    1. 朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率;

    2. 对大数量训练和查询时具有较高的速度。即使使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是特征概率的数学运算而已;

    3. 对小规模的数据表现很好,能个处理多分类任务,适合增量式训练(即可以实时的对新增的样本进行训练);

    4. 对缺失数据不太敏感,算法也比较简单,常用于文本分类;

    5. 朴素贝叶斯对结果解释容易理解。

    3.  缺点

    1. 需要计算先验概率;

    2. 分类决策存在错误率;

    3. 对输入数据的表达形式很敏感;

    4. 由于使用了样本属性独立性的假设,所以如果样本属性有关联时其效果不好。

    4.  应用领域

    1. 欺诈检测中使用较多;

    2. 一封电子邮件是否是垃圾邮件;

    3. 一篇文章应该分到科技、政治,还是体育类;

    4. 一段文字表达的是积极的情绪还是消极的情绪;

    5. 人脸识别。

    e70c94e3b079cd7dae4f7247e721ccda.png

    推荐阅读:

    华为调研82位离职博士!任正非发电邮:反思人才流失根源

    漫话:如何给女朋友解释为什么双11无法修改收货地址

    2019 AI 国际顶级学术会议全在这里,请查收!

    6bd3ca0ec6420449080ec4371ea55ef6.png

    展开全文
  • 具体实现方法如下:朴素贝叶斯算法优缺点优点:在数据较少的情况下依然有效,可以处理多类别问题缺点:对输入数据的准备方式敏感适用数据类型:标称型数据算法思想:比如我们想判断一个邮件是不是垃圾邮件,那么我们...

    本文实例讲述了朴素贝叶斯算法的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程序设计有所帮助。

    本文标题: 朴素贝叶斯算法的python实现方法

    本文地址: http://www.cppcns.com/jiaoben/python/116179.html

    展开全文
  • # 朴素贝叶斯算法的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

    fromnumpyimport*

    defloadDataSet():

    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

    returnpostingList,classVec

    #创建一个带有所有单词的列表

    defcreateVocabList(dataSet):

    vocabSet=set([])

    fordocumentindataSet:

    vocabSet=vocabSet|set(document)

    returnlist(vocabSet)

    defsetOfWords2Vec(vocabList,inputSet):

    retVocabList=[0]*len(vocabList)

    forwordininputSet:

    ifwordinvocabList:

    retVocabList[vocabList.index(word)]=1

    else:

    print'word ',word,'not in dict'

    returnretVocabList

    #另一种模型

    defbagOfWords2VecMN(vocabList,inputSet):

    returnVec=[0]*len(vocabList)

    forwordininputSet:

    ifwordinvocabList:

    returnVec[vocabList.index(word)]+=1

    returnreturnVec

    deftrainNB0(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

    foriinrange(numTrainDoc):

    iftrainCatergory[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)

    returnp0Vect,p1Vect,pAbusive

    defclassifyNB(vec2Classify,p0Vec,p1Vec,pClass1):

    p1=sum(vec2Classify*p1Vec)+log(pClass1)#element-wise mult

    p0=sum(vec2Classify*p0Vec)+log(1.0-pClass1)

    ifp1>p0:

    return1

    else:

    return0

    deftestingNB():

    listOPosts,listClasses=loadDataSet()

    myVocabList=createVocabList(listOPosts)

    trainMat=[]

    forpostinDocinlistOPosts:

    trainMat.append(setOfWords2Vec(myVocabList,postinDoc))

    p0V,p1V,pAb=trainNB0(array(trainMat),array(listClasses))

    testEntry=['love','my','dalmation']

    thisDoc=array(setOfWords2Vec(myVocabList,testEntry))

    printtestEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)

    testEntry=['stupid','garbage']

    thisDoc=array(setOfWords2Vec(myVocabList,testEntry))

    printtestEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)

    defmain():

    testingNB()

    if__name__=='__main__':

    main()

    展开全文
  • 具体实现方法如下:朴素贝叶斯算法优缺点优点:在数据较少的情况下依然有效,可以处理多类别问题缺点:对输入数据的准备方式敏感适用数据类型:标称型数据算法思想:比如我们想判断一个邮件是不是垃圾邮件,那么我们...

    本文实例讲述了朴素贝叶斯算法的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))

    展开全文
  • 朴素贝叶斯算法

    2021-03-17 21:30:09
    机器学习算法(一)朴素贝叶斯算法算法流程功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右...
  • 朴素贝叶斯算法是一种有监督学习算法,用于解决分类问题。 “朴素”是因为整个形式化过程只做最原始、最简单的假设。 朴素贝叶斯的优缺点: 优点: – 在数据较少的情况下仍然有效,可以处理多类别问题。 – ...
  • 朴素贝叶斯算法优点:算法原理和实现简单,常用于文本分类。对小规模数据表现很好,适合多分类增量式训练任务。对缺失数据不太敏感。缺点:对输入数据的表达形式很敏感需要计算先验概率,分类决策存在错误率要求样本...
  • 目录朴素贝叶斯算法朴素贝叶斯的算法思路朴素贝叶斯的优缺点朴素贝叶斯的主要优点有:朴素贝叶斯的主要缺点有:朴素贝叶斯算法处理wine的实现训练结果 朴素贝叶斯算法 贝叶斯原理作为数学基础,解决了概率论中“逆向...
  • 朴素贝叶斯算法NBC

    2019-08-15 21:48:54
    1、朴素贝叶斯算法优点: 坚实的数学基础,稳定的分类效率 NBC所需估计的参数很少,对缺失数据不太敏感,算法也比较简单 2、缺点: 理论上NBC模型与其他分类方法相比具有最小的误差率,但是实际并非如此,这是因为...
  • 本文实例讲述了朴素贝叶斯算法的python实现方法。分享给大家供大家参考。具体实现方法如下: 朴素贝叶斯算法优缺点 优点:在数据较少的情况下依然有效,可以处理多类别问题 缺点:对输入数据的准备方式敏感 适用数据...
  • 朴素贝叶斯算法原理

    千次阅读 2017-11-18 17:10:17
    你不一定看得懂的朴素贝叶斯算法原理朴素贝叶斯分类器(Naive Bayes Classifier)的优点是运算时间短、数学原理清晰,我在MNIST和CIFAR-10数据集上测试,错误率分别为15.74%和58.45%。看不懂就多看几遍,万一看懂了...
  • 当然,朴素贝叶斯算法优点有很多,但这种算法的缺点也是我们不能忽视的,那么大家知道不知道朴素贝叶斯算法优点和缺点是什么呢?下面我们就给大家介绍一下这个问题。 那么什么是朴素贝叶斯算法呢?其实朴素...
  • 概率基础 概率就是定义一件事情发生的可能性。 所谓的朴素,就是加了一个假设:特征与特征之间是相互独立的。 朴素贝叶斯:朴素+贝叶斯 朴素:特征与特征之间是相互...朴素贝叶斯算法总结 优点: 朴素贝叶斯模型...
  • 朴素贝叶斯(Naive Bayesian Mode,NBM)贝叶斯由来贝叶斯是由英国学者托马斯·贝叶斯 提出的一种纳推理的理论,后来发展为一种系统的统计推断方法。被称为贝叶斯方法。朴素贝叶斯朴素贝叶斯法是基于贝叶斯定理与特征...
  • 朴素贝叶斯优点:在数据较少的情况下仍然有效,可以处理多类别问题缺点:对于输入数据的准备方式较为敏感适用数据类型:标称型数据贝叶斯准则:使用朴素贝叶斯进行文档分类朴素贝叶斯的一般过程(1)收集数据:可以...
  • 朴素贝叶斯算法是一种分类算法,生成学习算法 参考链接 朴素贝叶斯的主要优点有: 1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。 2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其...
  • 朴素贝叶斯算法优缺点

    万次阅读 2018-07-14 00:06:07
    朴素贝叶斯的主要优点有:1)朴素贝叶斯模型有稳定的分类效率。2)对小规模的数据表现很好,能处理多分类任务,适合增量式训练,尤其是数据量超出内存时,可以一批批的去增量训练。3)对缺失数据不太敏感,算法也...
  • 算法优缺点优点:在数据较少的情况下依然有效,可以处理多类别问题缺点:对输入数据的准备方式敏感适用数据类型:标称型数据算法思想:朴素贝叶斯比如我们想判断一个邮件是不是垃圾邮件,那么我们知道的是这个邮件中...
  • 机器学习算法与自然语言处理推荐来源:http://www.cnblogs.com/pinard/p/6069267.html作者:刘建平Pinard【机器学习算法与自然语言处理导读】朴素贝叶斯算法是最经典的几个机器学习算法之一,本文对它的优点,缺点...
  • 朴素贝叶斯算法是有监督的学习算法,解决的是分类问题,如客户是否流失、是否值得投资、信用等级评定等多分类问题。该算法的优点在于简单易懂、学习效率高、在某些领域的分类问题中能够与决策树、神经网络相媲美。但...
  • 4、朴素贝叶斯优点和缺点 1、朴素贝叶斯实现垃圾邮件分类的步骤 (1)收集数据:提供文本文件。 (2)准备数据:将文本文件解析成词条向量。 (3)分析数据:检查词条确保解析的正确性。 (4)训练算法:计算...
  • 朴素贝叶斯算法的优缺点

    千次阅读 2019-03-30 14:11:48
    朴素贝叶斯算法的优缺点 优点:     (1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。     (2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 263
精华内容 105
关键字:

朴素贝叶斯算法优点