朴素贝叶斯

命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

导读:本篇文章讲解 朴素贝叶斯,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

朴素贝叶斯是 一种经典的分类算法

贝叶斯定理

        条件概率:记事件A发生的概率为P(A),事件B发生的概率为P(B),则在B事件发生的前提下,A事件发生的概率即为条件概率,记为P(A|B)。

P(A|B)=P(AB)/P(B)  由此可以得P(AB)=P(A|B)*P(B)

即同理 P(AB)=P(B|A)*P(A)

即P(A|B)=P(B|A)*P(A)/P(B)

        全概率公式:表示若事件{A_1},{A_2}, \cdots ,{A_n}构成一个完备事件组且都有正概率,则对任意一个事件B都有公式成立: 

 朴素贝叶斯

 将全概率公式带入贝叶斯公式中,得到

朴素贝叶斯

P(A)称为先验概率,即在B事件发生前,对A事件概念的一个判断

P(A|B)称为后验概率,即在B事件发生之后,对于A事件的重新评估。

样例

下面是 随便列举的一堆数据

品德 性格 成绩 是否可以被评选为优秀学生
不好 不是
不好 不好 不是
不好
不好 不是
不好 不好 不是
不好
不好 不是

贝叶斯公式为

朴素贝叶斯

 根据贝叶斯公式转化为分类任务的表达式为

P(类别|特征)=P(类别)* P(特征|类别)/  P(特征), 然后计算P(是 |品德好 性格不好 成绩差)和 P(不是 |品德好 性格不好 成绩差),选择是或不是。

解决步骤如下:

朴素贝叶斯

朴素贝叶斯对文本进行分类的python代码

import numpy as np
from functools import reduce

#创建一个实验样本
def loadDataSet():
    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']]
    classVec = [0,1,0,1,0,1]
    return dataSet,classVec

# 创建一个包含在所有文档中出现的不重复词的词表
def createbvocabList(dataSet):
    vocabSet=set([])# 创建一个空集
    for doc in dataSet:
        vocabSet=vocabSet|set(doc)# 创建两个集合的并集
        vocabList=list(vocabSet)
    return vocabList

# 将文档词条转换成词向量
def setOfWords2Vec(vocabList, inputSet):
    returnVec = [0]*len(vocabList)#创建一个其中所含元素都为0的向量
    for word in inputSet:
        if word in vocabList:
            returnVec[vocabList.index(word)] = 1
        else:
            print ("the word: %s is not in my Vocabulary!" % word)
    return returnVec
#把实验数据中的每条文本转化为词向量
def get_trainMat(dataSet):
    trainMat=[]
    vocabList=createbvocabList(dataSet)
    for inputSet in dataSet:
        returnVec=setOfWords2Vec(vocabList,inputSet)
        trainMat.append(returnVec)
    return trainMat

# 朴素贝叶斯分类器训练函数 从词向量计算概率
def trainNB(trainMat,classVec):
    n=len(trainMat)#文档数目
    m=len(trainMat[0])#文档的词条数
    pAb=sum(classVec)/n#文档属于侮辱类的
    p0Num=np.ones(m)
    p1Num=np.ones(m)
    p0Denom=2
    p1Denom=2
    for i in range(n):
        if classVec[i]==1:
            p1Num+=trainMat[i]
            p1Denom+=sum(trainMat[i])
        else:
            p0Num+=trainMat[i]
            p0Denom+=sum(trainMat[i])
    p1V=np.log(p1Num/p1Denom)#拉普拉斯平滑,为了解决零概念事件
    p0V=np.log(p0Num/p0Denom)
    return p0V,p1V,pAb

def classifyNB(vec2Classify,p0V,p1V,pAb):
    p1=sum(vec2Classify*p1V)+np.log(pAb)
    p0=sum(vec2Classify*p0V)+np.log(1-pAb)
    print("p0",p0)
    print("p1",p1)
    if p1>p0:
        return 1
    else:
        return 0
def testingNB(testVec):
    dataset,classVec=loadDataSet()
    vocabList=createbvocabList(dataset)
    trainMat=get_trainMat(dataset)
    p0V,p1V,pAb=trainNB(trainMat,classVec)
    thisone=setOfWords2Vec(vocabList,testVec)
    if classifyNB(thisone,p0V,p1V,pAb)==1:
        print("属于侮辱类")
    else:
        print("属于非侮辱类")

testVec=["stupid","garbage"]
print(testingNB(testVec))

testVec1=["love","my"]
print(testingNB(testVec1))

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/143094.html

(0)

相关推荐

  • Ajax异步刷新注册验证

    导读:本篇文章讲解 Ajax异步刷新注册验证,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    技术随笔 2023年1月13日
    00
  • [spring学习]6、基于注解配置bean

    有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

    导读:本篇文章讲解 [spring学习]6、基于注解配置bean,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    技术随笔 2023年5月29日
    00
  • JDBC 事务转账案例

    导读:本篇文章讲解 JDBC 事务转账案例,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    技术随笔 2023年1月31日
    00
  • 如何导出Navicat的数据库连接配置

    有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

    导读:本篇文章讲解 如何导出Navicat的数据库连接配置,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    技术随笔 2023年4月19日
    00
  • IDEA通过原型(骨架)创建MavenJavaWeb项目

    导读:本篇文章讲解 IDEA通过原型(骨架)创建MavenJavaWeb项目,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    技术随笔 2023年1月31日
    00
  • 【用java写的】定义一个方法来复制数组

    导读:本篇文章讲解 【用java写的】定义一个方法来复制数组,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    技术随笔 2023年1月18日
    00
  • 3.3、JVM-垃圾回收-如何回收?垃圾收集器

    导读:本篇文章讲解 3.3、JVM-垃圾回收-如何回收?垃圾收集器,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    2023年1月11日
    00
  • java中枚举类型,整型,字符串之间转换

    导读:本篇文章讲解 java中枚举类型,整型,字符串之间转换,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    技术随笔 2023年2月10日
    00
  • 剑指offer 27:二叉树的镜像

    导读:本篇文章讲解 剑指offer 27:二叉树的镜像,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    2023年2月3日
    00
  • 26. 加密和解密

    勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

    导读:本篇文章讲解 26. 加密和解密,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    技术随笔 2023年5月5日
    00

发表回复

登录后才能评论