第四章 基于概率论的分类方法:朴素贝叶斯

这篇具有很好参考价值的文章主要介绍了第四章 基于概率论的分类方法:朴素贝叶斯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第四章 基于概率论的分类方法:朴素贝叶斯

4.1基于贝叶斯理论的分类方法

朴素贝叶斯

  • 优点:在数据较少的情况下仍然有效,可以处理多类别问题。
  • 缺点:对于输⼊数据的准备⽅式较为敏感。
    适⽤数据类型:标称型数据。

假设类别为 c 1 , c 2 c_1,c_2 c1,c2

  • 如果 p 1 ( x , y ) > p 2 ( x , y ) p1(x,y) > p2(x,y) p1(x,y)>p2(x,y),那么类别为 c 1 c_1 c1
  • 如果 p 2 ( x , y ) > p 1 ( x , y ) p2(x,y) > p1(x,y) p2(x,y)>p1(x,y),那么类别为 c 2 c_2 c2

4.2条件概率

p ( c ∣ x ) = p ( x ∣ c ) p ( c ) p ( x ) p(c|x)=\frac{p(x|c)p(c)}{p(x)} p(cx)=p(x)p(xc)p(c)

4.3使用条件概率来分类

假设类别为 c 1 , c 2 c_1,c_2 c1,c2

  • 如果 p 1 ( c 1 ∣ x , y ) > p 2 ( c 2 ∣ x , y ) p1(c_1|x,y) > p2(c_2|x,y) p1(c1x,y)>p2(c2x,y),那么类别为 c 1 c_1 c1
  • 如果 p 2 ( c 1 ∣ x , y ) > p 1 ( c 2 ∣ x , y ) p2(c_1|x,y) > p1(c_2|x,y) p2(c1x,y)>p1(c2x,y),那么类别为 c 2 c_2 c2

4.5使用python进行文本分类

4.5.1准备数据

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([])  #create empty set
    for document in dataSet:
        vocabSet = vocabSet | set(document) #union of the two sets
    return list(vocabSet)
postingList, classVec=loadDataSet()
print(postingList)
print(classVec)
vocabList=createVocabList(postingList)
print(vocabList)
[['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']]
[0, 1, 0, 1, 0, 1]
['to', 'licks', 'food', 'I', 'park', 'quit', 'how', 'maybe', 'is', 'has', 'him', 'garbage', 'buying', 'help', 'not', 'flea', 'so', 'problems', 'stupid', 'worthless', 'dog', 'ate', 'please', 'love', 'my', 'posting', 'stop', 'steak', 'cute', 'mr', 'dalmation', 'take']

loadDataSet产生数据集,表示若干句子,句子中若干单词
createVocabList对数据集进行操作,最后返回postingList和classVec
postingList为单词表,即数据集中出现的所有单词vocabList=[‘has’, ‘please’, ‘I’,…,‘dalmation’, ‘licks’]
classVec,表示每个句子是否含有侮辱性,是则为1,classVec=[0, 1, 0, 1, 0, 1]

4.5.2训练算法

def setOfWords2Vec(vocabList, inputSet):
    returnVec = [0]*len(vocabList)
    for word in inputSet:
        returnVec[vocabList.index(word)] = 1
    return returnVec
print(setOfWords2Vec(vocabList,postingList[0]))
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0]

setOfWords2Vec函数,返回长度为单词表长度的向量
输入是,单词表vocabList和句子inputSet
inputSet中出现的单词,单词表对应位置的向量位置标记为1

def getTrainMatrix(vocabList,inputSets):
    return [setOfWords2Vec(vocabList, inputSet) for inputSet in inputSets]
trainMatrix=getTrainMatrix(vocabList,postingList)
print(trainMatrix)
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
 [0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
 [1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0],
 [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

getTrainMatrix将若干句子全部转成向量、向量组成列表,这就成了一个矩阵trainMatrix。

import numpy as np
def trainNB0(trainMatrix, trainCategory):
    numTrainDocs = len(trainMatrix)
    numWords = len(trainMatrix[0])
    pAbusive = sum(trainCategory)/numTrainDocs
#     print('trainCategory: ',trainCategory)
#     print('numTrainDocs: ',numTrainDocs)
    p0Num = np.ones(numWords); p1Num = np.ones(numWords)      #change to np.ones()
    p0Denom = 0; p1Denom = 0                       #change to 2.0
    for i in range(numTrainDocs):
        if trainCategory[i] == 1:
            p1Num += trainMatrix[i]
            p1Denom += sum(trainMatrix[i])
        else:
            p0Num += trainMatrix[i]
            p0Denom += sum(trainMatrix[i])
#     p1Vect = np.log(p1Num/p1Denom)          #change to np.log()
#     p0Vect = np.log(p0Num/p0Denom)         #change to np.log()
    p1Vect = p1Num/p1Denom          
    p0Vect = p0Num/p0Denom         
    print(p1Num)  
    print(p1Denom)
    return p0Vect, p1Vect, pAbusive
print(classVec)
p0Vect, p1Vect, pAbusive=trainNB0(trainMatrix,classVec)
print(p0Vect)
print(p1Vect)
print(pAbusive)

[0, 1, 0, 1, 0, 1]
[2. 1. 2. 1. 2. 2. 1. 2. 1. 1. 2. 2. 2. 1. 2. 1. 1. 1. 4. 3. 3. 1. 1. 1.
 1. 2. 2. 1. 1. 1. 1. 2.]
19
[0.08333333 0.08333333 0.04166667 0.08333333 0.04166667 0.04166667
 0.08333333 0.04166667 0.08333333 0.08333333 0.125      0.04166667
 0.04166667 0.08333333 0.04166667 0.08333333 0.08333333 0.08333333
 0.04166667 0.04166667 0.08333333 0.08333333 0.08333333 0.08333333
 0.16666667 0.04166667 0.08333333 0.08333333 0.08333333 0.08333333
 0.08333333 0.04166667]
[0.10526316 0.05263158 0.10526316 0.05263158 0.10526316 0.10526316
 0.05263158 0.10526316 0.05263158 0.05263158 0.10526316 0.10526316
 0.10526316 0.05263158 0.10526316 0.05263158 0.05263158 0.05263158
 0.21052632 0.15789474 0.15789474 0.05263158 0.05263158 0.05263158
 0.05263158 0.10526316 0.10526316 0.05263158 0.05263158 0.05263158
 0.05263158 0.10526316]
0.5

开始算条件概率,如计算侮辱性的条件概率p1Vect,那么就该词侮辱性次数/侮辱总次数:p1Num/p1Denom

p1Num=[2. 1. 2. 1. … 4. 3. 3. 1. 1. 2.],p1Denom=19
p1Vect=[0.10526316 … 0.05263158 0.10526316]

4.5.3测试算法

def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):
    p1 = sum(vec2Classify * p1Vec) 
    p0 = sum(vec2Classify * p0Vec) 
#     print('p1:',p1,',  p0:',p0)
    if p1 > p0:
        return 1
    else:
        return 0

def testingNB():
    p0V, p1V, pAb = trainNB0(trainMatrix, classVec)
    testEntrys = [['love', 'my', 'dalmation'],['stupid', 'garbage']]
    for testEntry in testEntrys:
        thisDoc = setOfWords2Vec(myVocabList, testEntry)
        print(testEntry, 'classified as: ', classifyNB(thisDoc, p0V, p1V, pAb))
#     print('thisDoc:',thisDoc)
#     print('p0V:',p0V)
#     print('p1V:',p1V)
testingNB()
['love', 'my', 'dalmation'] classified as:  0
['stupid', 'garbage'] classified as:  1

可以看出,经过小数据集训练,朴素贝叶斯模型可对简单的句子可以进行正确分类文章来源地址https://www.toymoban.com/news/detail-534878.html

到了这里,关于第四章 基于概率论的分类方法:朴素贝叶斯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法原理和代码实战】德州扑克计算概率4-2法则原理(基于概率论和统计学的基本原理),详细计算步骤,具体算法代码实例。

    德州扑克计算概率的4-2法则是一种简便的计算方法,用于估算在德州扑克中获得某种牌型的概率。4-2法则的原理是基于概率论和统计学的基本原理,通过观察德州扑克中的牌型组合和可能性,得出一个简单的计算公式。 在德州扑克的前三张公共牌(翻牌圈)之后,如果你需要

    2024年02月14日
    浏览(53)
  • 概率论与数理统计 第一章 概率论的基本概念

    1.1.1 前言 1.研究对象: 确定性现象:必然发生或不发生 随机现象:个别试验结果呈现不确定性,大量试验结果呈现统计规律性 2.概率论与数理统计: ​ 该学科是研究和揭示随机现象统计规律性的学科。 1.1.2 随机试验 1.定义: 可以在相同条件下重复进行; 每次试验的结果可

    2024年03月20日
    浏览(55)
  • 【概率论】几何概率、条件概率及全概率公式作业

    有两箱零件,第一箱装50件,其中20件是一等品;第二箱装30件,其中18件是一等品,现从两箱中随意挑出一箱,然后从该箱中先后任取两个零件,试求第一次取出的零件是一等品的概率_____(结果小数点后保留1位) 【正确答案:0.5 或1/2】 解析: 设A₁,A₂分别表示“挑出第一箱

    2024年02月11日
    浏览(47)
  • 【概率论】条件概率与独立性题目

    已知随机事件A与B满足条件:0P(A)1,0P(B)1。则事件A,B相互独立的充要条件是( C )。 A. P ( B ∣ A ) + P ( B ∣ A ˉ ) = 1 P(B|A)+P(B|bar{A})=1 P ( B ∣ A ) + P ( B ∣ A ˉ ) = 1 B. P ( B ∣ A ) + P ( B ˉ ∣ A ) = 1 P(B|A)+P(bar{B}|A)=1 P ( B ∣ A ) + P ( B ˉ ∣ A ) = 1 C. P ( B ∣ A ) + P ( A ˉ ∣ B ˉ ) = 1 P(B|A)

    2024年02月11日
    浏览(38)
  • 概率论--随机事件与概率--贝叶斯公式--随机变量

    目录 随机事件与概率 概念 为什么要学习概率论 随机事件与随机事件概率 随机事件 随机事件概率 贝叶斯公式  概念 条件概率 概率乘法公式 贝叶斯公式  举个栗子 随机变量   随机变量的定义 随机变量的分类 离散型随机变量 连续型随机变量 概念 随机事件是指在一次试验

    2024年02月11日
    浏览(49)
  • 概率论-1-概率机器人 Probabilistic Robotics

    基本概念 随机变量 静态的 可以做随机试验 随机过程 动态 离散随机变量 概率质量函数 probability mass function 连续随机变量 概率密度函数 probability density function PDF 联合概率 P ( X = x 且 Y = y ) = P ( x , y ) 若 X 和 Y 独立: P ( x , y ) = P ( x ) P ( y ) P(X=x 且 Y=y) = P(x,y)\\\\ 若 X 和 Y 独立:

    2024年03月22日
    浏览(54)
  • 概率论:样本与总体分布,Z分数与概率

    参考书目:《行为科学统计精要》(第八版)——弗雷德里克·J·格雷维特 描述一组数据分布   描述一组样本数据的分布 描述样本数据的均值和整体数据一样,但是样本标准差的公式除以了n-1,这里引入自由度的概念 自由度:如果均值确定,那么n个数据组成的样本中,只有

    2024年02月07日
    浏览(51)
  • 高等数学:概率论(二)

    设随机实验E的样本空间为 Ω Omega Ω ,X为定义于样本空间 Ω Omega Ω 上的函数,对任意的 w ∈ Ω win Omega w ∈ Ω ,总存在唯一确定的的 X ( w ) X(w) X ( w ) 与之对应,称 X ( w ) X(w) X ( w ) 为随机变量。 随机变量的分布函数 设 X 为随机变量, 对任意的实数 x, 称函数 F ( x ) = P { X ⩽

    2024年02月09日
    浏览(52)
  • 概率论复习

    速成网课:【概率论与数理统计】3小时不挂|概率统计|概统_哔哩哔哩_bilibili 1、有放回抽取中出现了组合数C(n,k),表示在抽n件产品中选择了k次取次品,而在无放回抽取中又没有出现组合数C(n,k) 传送门:概率问题:关于有放回和无放回抽取的一个问题 - 知乎 简要阐述一下:有

    2024年02月16日
    浏览(40)
  • 概率论:计算置信区间

    置信区间是一种常用的区间估计方法,所谓 置信区间 就是分别以统计量的 置信上限 和 置信下限 为上下界构成的区间 。 显著性水平:α 置信度:1-α 或者 100(1-α)%  (例如,α=0.05,则置信度为0.95或95%) 置信区间的常用计算方法:Pr(c1=μ=c2)=1-α 置信区间:(c1, c2)

    2024年02月03日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包