朴素贝叶斯

简介: 朴素贝叶斯

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


贝叶斯定理


       条件概率:记事件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)

image.png

样例

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


image.png

image.png


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

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

解决步骤如下:

d95ad81f9dc24f28ace406d23ce77cdd.jpg


朴素贝叶斯对文本进行分类的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))
相关文章
|
2月前
|
算法 小程序 TensorFlow
垃圾分类算法
垃圾分类算法
122 0
|
27天前
|
算法
朴素贝叶斯算法
朴素贝叶斯算法
14 0
|
2月前
|
机器学习/深度学习 算法 架构师
常见分类算法
常见分类算法
33 0
常见分类算法
|
2月前
|
机器学习/深度学习 算法
常见的分类算法介绍
常见的分类算法介绍
|
2月前
|
机器学习/深度学习 算法 数据挖掘
数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
|
2月前
|
机器学习/深度学习 算法
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病-2
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
|
2月前
|
机器学习/深度学习 算法 数据挖掘
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病-1
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
|
2月前
|
机器学习/深度学习 算法 数据挖掘
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
|
2月前
|
算法
朴素贝叶斯算法应用
朴素贝叶斯算法应用
42 4
|
机器学习/深度学习 人工智能 算法
连载|朴素贝叶斯
连载|朴素贝叶斯