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

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

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

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日
    浏览(50)
  • 概率论与数理统计 第一章 概率论的基本概念

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

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

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

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

    已知随机事件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日
    浏览(36)
  • 概率论-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日
    浏览(52)
  • 概率论--随机事件与概率--贝叶斯公式--随机变量

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

    2024年02月11日
    浏览(45)
  • 概率论:样本与总体分布,Z分数与概率

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

    2024年02月07日
    浏览(48)
  • 【概率论】大数定律

    概要:首先介绍了切比雪夫不等式,然后介绍大数定律概念和3种大数定律及证明。 切比雪夫不等式 已知随机变量X的期望EX和方差DX,对 ,可得 的一个上界。 解释: 不论X服从什么分布,X在E(x)的 ε 邻域内取值的概率不小于 1- D x ε2 。 证明: 本质: 随机变量X偏离E(X)越大,则

    2024年02月04日
    浏览(37)
  • 概率论发展简史

            概率论这门学科可以说起源于赌博。在古希腊和古罗马时期,机会主义十分盛行.但是这个时期关于游戏的理论还没有发展起来.究其原因,那时候希腊的数字系统不能提供代数运算发展的机会.在科学分析基础上的概率论一直等到印度和阿拉伯发明了现代算术系统(

    2024年02月07日
    浏览(45)
  • 概率论公式

    方差D(x+y)=D(x)+D(y)+2Cov(x,y)=D(x)+D(y) 协方差Cov(x,y)=E(xy)-E(x)E(y),相互独立的随机变量x,y满足E(xy)=E(x)E(y) 所以随机变量xy相互对立 时,D(x+y)=D(x)+D(y) 转自:多个随机变量运算后的均值与方差计算_爱吃酸菜鱼的汉堡的博客-CSDN博客_多个随机变量的和的方差  

    2024年02月12日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包