美文网首页
朴素贝叶斯法简例

朴素贝叶斯法简例

作者: Ailien | 来源:发表于2018-12-04 16:16 被阅读0次

首先给出贝叶斯概率公式:


bayes.gif

朴素贝叶斯原理:

对给定的训练数据集,计算其输入输出的联合概率分布,模型训练好后,对于给定的输入,利用贝叶斯定理求出后验概率最大的输出。朴素贝叶斯最主要的假设是特征之间相互独立且各特征等重。

算法

naive bayes algorithm.png

代码:

  • 数据处理
def creatdataset():
    dataset=[['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']]
    labels = [0,1,0,1,0,1]    #1 is abusive, 0 not
    return dataset,labels

def creatlist(dataset):
    List=[]
    for data in dataset:
        List.extend(data)
    List_=list(set(List))
    List_.sort(key=List.index)
    return List_        #输出一个词汇表
#List_=['my', 'dog', 'has', 'flea', 'problems', 'help', 'please', 'maybe', 'not', 'take', 'him', 'to', 'park', 'stupid', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'stop', 'posting', 'worthless', 'garbage', 'mr', 'licks', 'ate', 'steak', 'how', 'quit', 'buying', 'food']


def word2vec(list,sequence):
    returnlist=len(list)*[0]   #与词汇表等长的0向量
    for word in sequence:
        if word in list:
            returnlist[list.index(word)]=1    #出现词汇表中的单词则对应值设为1
        else:
            print('{} is not in list'.format(word))
    return returnlist   

  • 计算概率
def dataarray():
    dataset,labels=creatdataset()
    list_=creatlist(dataset)
    weight=len(list_)
    height=len(dataset)
    datasets=np.zeros([height,weight])
    for i in range(height):
        datasets[i]=word2vec(list_,dataset[i])
    p1=sum(labels)/float(len(labels))
    J1p1=[0]*len(list_)
    J1p0=[0]*len(list_)
    for i in range(height):
        if labels[i]==1:
            J1p1+=datasets[i]
        else:
            J1p0+=datasets[i]
    J1p0=np.array([x+1 for x in J1p0])      #为防止概率为0,采用贝叶斯估计
    J1p1=np.array([x+1 for x in J1p1])

    return p1,J1p0/float(p1*height+2.),J1p1/float((1-p1)*height+2.)

为了防止出现概率为0的状况,采用贝叶斯估计,条件概率的贝叶斯估计如下:


bayes estimate.png

在本实验中取λ=1,Sj=2 。

  • 对新数据进行分类
def testclassify(sequence):
    p1,J1p0,J1p1=dataarray()
    p0=1-p1
    dataset, labels = creatdataset()
    list_ = creatlist(dataset)
    seq=word2vec(list_, sequence)
    for i in range(len(seq)):
        if seq[i]==1:
            p1=p1*J1p1[i]
            p0=p0*J1p0[i]

        else:
            p1 = p1 * (1-J1p1[i])
            p0 = p0 * (1-J1p0[i])
    if p1>p0:
        print(sequence,' :abusive')
    else:
        print(sequence,' :not abusive')
  • 测试
testclassify(['stupid','garbage'])            #['stupid', 'garbage']  :abusive
testclassify(['love','my','dalmation'])      #['love', 'my', 'dalmation']  :not abusive

相关文章

  • 朴素贝叶斯法

    朴素贝叶斯法 朴素贝叶斯法的学习与分类 朴素贝叶斯法的参数估计 朴素贝叶斯实现 高斯朴素贝叶斯实现 使用 skle...

  • 朴素贝叶斯法(NaiveBayes)

    朴素贝叶斯法(Naive Bayes) 朴素贝叶斯法是基于贝叶斯定力和特征条件独立假设的分类方法。 朴素贝叶斯法实...

  • 朴素贝叶斯法简例

    首先给出贝叶斯概率公式: 朴素贝叶斯原理: 对给定的训练数据集,计算其输入输出的联合概率分布,模型训练好后,对于给...

  • 第五周 - 20180507

    朴素贝叶斯的思路及实现 一、朴素贝叶斯简介 朴素贝叶斯法(Naive Bayes)是基于贝叶斯定理与特征条件独立假...

  • 算法笔记(7)-朴素贝叶斯算法及Python代码实现

    朴素贝叶斯算法有三种类型,分别是贝努利朴素贝叶斯、高斯贝叶斯、多项式朴素贝叶斯。 贝叶斯公式 贝努利朴素贝叶斯 适...

  • 朴素贝叶斯

    朴素贝叶斯法 标签: 统计学习 目录 [TOC] 基本方法   朴素贝叶斯法通过训练数据集学习联合概率分布P(X,...

  • 朴素贝叶斯

    一、朴素贝叶斯法 1.定义: 朴素贝叶斯法 基于(1)贝叶斯定理和(2)特征条件独立假设的分类方法。 2.具体分类...

  • 朴素贝叶斯(NBM)之后验概率最大化的含义 | 统计学习方法

    朴素贝叶斯 - 贝叶斯估计Python复现: 舟晓南:朴素贝叶斯(Bayes)模型python复现 - 贝叶斯估计...

  • 朴素贝叶斯算法介绍及优化

    朴素贝叶斯(Naive Bayes) 贝叶斯公式 朴素贝叶斯算法其实原理很简单,要理解朴素贝叶斯算法我们首先得知道...

  • 统计学习方法——修炼学习笔记4:朴素贝叶斯法

    一、朴素贝叶斯法 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定数据集,首先基于特征条件独立假...

网友评论

      本文标题:朴素贝叶斯法简例

      本文链接:https://www.haomeiwen.com/subject/oqzecqtx.html