4.机器学习实战之朴素贝叶斯

朴素贝叶斯(Naive Bayes)详解 贝叶斯决策论、朴素贝叶斯原理与算法实现、具体应用。 阅读详情

 

返回目录

 

上一篇:决策树

 

1. 简单理论介绍

1.1  贝叶斯定理

    了解贝叶斯定理之前,需要先了解下条件概率。P(A|B)表示在事件B已经发生的条件下事件A发生的概率:

 

   P(A|B)=P(AB)  P(B)daf afdfd

 

假如我们已经知道了P(A|B),但是现在我们想要求P(B|A),也就是在事件A发生的条件下事件B发生的概率,这时贝叶斯定理就派上用场了。

 

   P(B|A)=P(A|B)P(B)  P(A)daf afdfd

 

1.2  朴素贝叶斯分类原理

     朴素贝叶斯分类是以贝叶斯定理为基础的,之所以称为“朴素”,是因为整个过程只做最原始、最简单的假设。假设我们现在有一个训练数据集,该数据集的特征向量为,n表示特征的个数,同时也有该数据集的类别标签向量,s表示类别的个数,现在就是要计算,i=[0,s-1],也就是说根据现有的这些特征来计算它所属类别标签中的每个类别的概率,最后取概率最大的分类标签为结果。那么如何计算呢?由贝叶斯定理可得:

假设特征之间互相独立,则:

由于分母P(w)的值都一样,所以只需计算分子就可以了,即:

接下来我们用一个例子来说明下朴素贝叶斯分类原理,该例子来源于阮一峰的《朴素贝叶斯分类器的应用》。根据某社区网站的抽

样统计,该站10000个账号中有89%为真实账号(设为C0),11%为虚假账号(设为C1),P(C0)=0.89,P(C1)=0.11。

接下来,就要用统计资料判断一个账号的真实性。假定某一个账号有以下三个特征:

 

W0: 日志数量/注册天数
W1: 好友数量/注册天数
W2: 是否使用真实头像(真实头像为1,非真实头像为0)

W0 = 0.1
W1 = 0.2
W2 = 0

根据上面的三个特征去判断这个账号是否真实。

 

方法是计算P(W0|C=0)P(W1|C=0)P(W2|C=0)P(C=0)和P(W0|C=1)P(W1|C=1)P(W2|C=1)P(C=1)的值,如果前者大,说明为真实账

号,否则为虚假账号。

虽然上面这些值可以从统计资料得到,但是这里有一个问题:W0和W1是连续变量,不适宜按照某个特定值计算概率。一个技巧是

将连续值变为离散值,计算区间的概率。比如将W0分解成[0, 0.05]、(0.05, 0.2)、[0.2, +∞]三个区间,然后计算每个区间的概率。在

我们这个例子中,W0等于0.1,落在第二个区间,所以计算的时候,就使用第二个区间的发生概率。

 

P(W0|C=0) = 0.5, P(W0|C=1) = 0.1
P(W1|C=0) = 0.7, P(W1|C=1) = 0.2
P(W2|C=0) = 0.2, P(W2|C=1) = 0.9

 

 

 

因此:

 

P(W0|C=0)P(W1|C=0)P(W2|C=0)P(C=0)
		= 0.5 x 0.7 x 0.2 x 0.89
		= 0.0623

P(W0|C=1)P(W1|C=1)P(W2|C=1)P(C=1)
		= 0.1 x 0.2 x 0.9 x 0.11
		= 0.00198

 

 

 

可以看到,虽然这个用户没有使用真实头像,但是他是真实账号的概率,比虚假账号高出30多倍,因此判断这个账号为真。

1.3  朴素贝叶斯分类的优缺点

优点:计算简单,在数据量很大时计算速度很快

缺点:假设特征之间是相互独立的

2. 文本向量

      在本篇文章中我们想要使用朴素贝叶斯分类器来将留言板上的留言内容分为两类:侮辱性言论和正常言论,分别用1和0来表示。但是这儿有一个问题就是,如何让计算机出识别这些文本呢?这时我们可以考虑将文本转换成文本向量。文本向量其实就是特征向量。

    我们先来了解几个概念,我们将留言板上的每一条留言内容称为文档,而文档(在这里指每一条留言内容)是由词条组成的,词条的是指字符的任意组合,在这里你可以将它认为是单词,同时我们将所有留言内容称为文档库。关系如下图:

    现在我们要构建文本向量,在这儿就是将文档(一条留言内容)转换为一个向量。有两种构建方法:词集模型(set-of-words model)和词袋模型(bag-of-words model)。

2.1 词集模型

    我们先介绍词集模型。首先我们需要从文档库(即所有的留言内容中)找到所有的词条(单词),将这些单词称为词汇表。如果要对某一文档构建文本向量,首先先创建一个长度为词汇表长度的向量,该向量的每一个元素为1或0,1代表词汇表中的词条在该文档(一条留言内容)中出现过,0则相反。例如,词汇表为{‘my’,'name',‘is’,'tom','and',‘home’,‘is’,‘Beijing’,'am',‘bag’,‘ok’},某一条留言内容为“my name is tom,and my home is Beijing”,将它转为文本向量就是[1,1,1,1,1,1,1,1,0,0,0],文本向量前8个元素为1表示词库表中的前8个词条在该留言内容中出现过,后3个元素为0表示词库表中的最后3个词条在该留言内容中未出现过。注意,虽然,“my”这个词条在该留言内容中出现过两次,但是我们仍然只记为1。也就是说词集模型中向量的元素内容表示词条是否在词汇表中出现过。

2.2  词袋模型

    现在来介绍下词袋模型,词袋模型中向量的元素内容表示词条出现在词汇表中的次数。例如上面的“my”,出现两次,如果用词袋模型表示,则文本向量为[2,1,1,1,1,1,1,1,0,0,0]。一般来说使用词袋模型的效果会更好一些。

3. 代码实现

3.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代表侮辱性言论,0代表正常言论
    return postingList,classVec

 

 

 

3.2 创建词汇表

 

# 创建词汇表
def createVocabList(dataSet):
    vocabSet = set([])  #create empty set
    for document in dataSet:
        vocabSet = vocabSet | set(document) #创建两个集合的并集
    return list(vocabSet)

 

 

 

3.3 构建文本向量

 

# 词集模型文本向量
# vocabList:词汇表,inputSet:文本内容
def setOfWords2Vec(vocabList, inputSet):
    returnVec = [0]*len(vocabList)# 创建一个长度为词汇表长度的集合
    for word in inputSet:
        if word in vocabList:
            returnVec[vocabList.index(word)] = 1#出现就赋值为1
        else: print "the word: %s is not in my Vocabulary!" % word
    return returnVec

# 词库模型文本向量
def bagOfWords2VecMN(vocabList, inputSet):
    returnVec = [0]*len(vocabList)
    for word in inputSet:
        if word in vocabList:
            returnVec[vocabList.index(word)] += 1#出现一次就将次数加1
        else: print "the word: %s is not in my Vocabulary!" % word
    return returnVec

 

 

 

测试上面的效果:

 

listOppsts,listClasses = loadDataSet()
myVocabList = createVocabList(listOppsts)
print '词汇表:',myVocabList
print '词集模型向量:',setOfWords2Vec(myVocabList,listOppsts[0])#将第一条留言内容转成词集模型向量
print '词袋模型向量:',bagOfWords2VecMN(myVocabList,listOppsts[0])#将第一条留言内容转成词袋模型向量

 

 

 

运行结果:

 

词汇表: ['cute', 'love', 'help', 'garbage', 'quit', 'I', 'problems', 'is', 'park', 'stop', 'flea', 'dalmation', 'licks', 'food', 'not', 'him', 'buying', 'posting', 'has', 'worthless', 'ate', 'to', 'maybe', 'please', 'dog', 'how', 'stupid', 'so', 'take', 'mr', 'steak', 'my']
词集模型向量: [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1]
词袋模型向量: [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1]

 

3.4  训练算法:文本向量计算概率

    我们已经得到了特征向量(即文本向量),现在要做的是根据这些特征向量去计算每个类别下各个特征的概率,类似于我们上面例子中从统计资料中得到概率这一过程。

 

import numpy as np

# 从训练文档的特征向量中计算各个类别下特征的概率
# trainMatrix:训练文档的特征向量(MxN),trainCategory:训练文档的类别标签(1xM)
# M表示训练集的个数,N表示词汇表长度,也就是特征个数
def trainNB0(trainMatrix,trainCategory):
    m = len(trainMatrix)# 训练文档的个数
    n = len(trainMatrix[0])# 词汇表长度,也就是词条的个数,也就是特征个数。
    
    p0Num = np.zeros(n); p1Num = np.zeros(n)      #change to ones() 
    p0Denom = 0.0; p1Denom = 0.0                        #change to 2.0
    for i in range(m):
        if trainCategory[i] == 1:#类别为侮辱性言论
            p1Num += trainMatrix[i]#得到一个向量,该向量元素的值为词汇表中的每个词条在侮辱性言论(c=1)类别里出现的次数
            p1Denom += sum(trainMatrix[i])#得到侮辱性言论类别词条出现的总数
        else:# 类别为正常言论
            p0Num += trainMatrix[i]#同上
            p0Denom += sum(trainMatrix[i])#同上
    
    p1Vect = p1Num/p1Denom#计算在侮辱性言论类别下每个词条出现的概率,p1Vect是一个向量,向量的元素为P(w=0|c=1),P(w=1|c=1),...,P(w=n|c=1)
    p0Vect = p0Num/p0Denom
    
    pAbusive = sum(trainCategory)/float(m)# 计算侮辱性言论文档在整个训练文档中出现的概率,即P(c=1)
    
    return p0Vect,p1Vect,pAbusive

 

 

 

测试下上面方法的效果:

 

listOppsts,listClasses = loadDataSet()
myVocabList = createVocabList(listOppsts)#得到词汇表

trainMat = []#创建一个空列表
for postinDoc in listOppsts:
    trainMat.append(setOfWords2Vec(myVocabList,postinDoc))#将每一个文档(每一个评论内容)转为文本向量,并存入trainMat中

p0V,p1V,pAb = trainNB0(trainMat,listClasses)#训练分类器,得到p0V,p1V,pAb
print 'P(c=1):',pAb
print 'p(w|c=1):',p1V
print 'p(w|c=0):',p0V

 

 

 

运行结果:

 

P(c=1): 0.5
p(w|c=1): [ 0.          0.          0.          0.05263158  0.05263158  0.          0.
  0.          0.05263158  0.05263158  0.          0.          0.
  0.05263158  0.05263158  0.05263158  0.05263158  0.05263158  0.
  0.10526316  0.          0.05263158  0.05263158  0.          0.10526316
  0.          0.15789474  0.          0.05263158  0.          0.          0.        ]
p(w|c=0): [ 0.04166667  0.04166667  0.04166667  0.          0.          0.04166667
  0.04166667  0.04166667  0.          0.04166667  0.04166667  0.04166667
  0.04166667  0.          0.          0.08333333  0.          0.
  0.04166667  0.          0.04166667  0.04166667  0.          0.04166667
  0.04166667  0.04166667  0.          0.04166667  0.          0.04166667
  0.04166667  0.125     ]

 

 

 

P(c=1)的值为0.5,表示所有留言内容中有一半的留言内容是侮辱性言论,查看下我们创建的训练集,发现该值是正确的。词汇表中第一个词条是“cute”,在类别1中没有出现过,在类别0中出现过1次,对应的条件概率是0和0.04166667,说明计算正确。

3.5 改进分类器

    利用朴素贝叶斯分类器对文档进行分类时,要计算多个概率的乘积以获得文档属于某类别的概率,即计算,如果其中的一个概率为0,那么乘积也为0,为降低这种影响,可以将所有词条出现的次数初始化为1,并将分母初始化为2。另一个要解决的问题是下溢出。由于计算乘积时,每个概率值都比较小,所以很可能溢出,可以考虑使用对数来解决。在代数中有In(a*b) = In(a) + In(b)。修改后的分类器代码如下:

 

import numpy as np

# 从训练文档的特征向量中计算各个类别下特征的概率
# trainMatrix:训练文档的特征向量(MxN),trainCategory:训练文档的类别标签(1xM)
# M表示训练集的个数,N表示词汇表长度,也就是特征个数
def trainNB0(trainMatrix,trainCategory):
    m = len(trainMatrix)# 训练文档的个数
    n = len(trainMatrix[0])# 词汇表长度,也就是词条的个数,也就是特征个数。
    
    <span style="color:#CC0000;">p0Num = np.ones(n); p1Num = np.ones(n)</span>      #change to ones() 
    p0Denom = 2.0; p1Denom = 2.0                        #change to 2.0
    for i in range(m):
        if trainCategory[i] == 1:#类别为侮辱性言论
            p1Num += trainMatrix[i]#得到一个向量,该向量元素的值为词汇表中的每个词条在侮辱性言论(c=1)类别里出现的次数
            p1Denom += sum(trainMatrix[i])#得到侮辱性言论类别词条出现的总数
        else:# 类别为正常言论
            p0Num += trainMatrix[i]#同上
            p0Denom += sum(trainMatrix[i])#同上
    
    <span style="color:#CC0000;">p1Vect = np.log(p1Num/p1Denom)</span>#计算在侮辱性言论类别下每个词条出现的概率,p1Vect是一个向量,向量的每个元素表示P(w=0|c=1),P(w=1|c=1),...,P(w=n|c=1)
    <span style="color:#CC0000;">p0Vect = np.log(p0Num/p0Denom)</span>#p0Vect向量的每个元素表示P(w=0|c=0),P(w=1|c=0),...,P(w=n|c=0)
    
    pAbusive = sum(trainCategory)/float(m)# 计算侮辱性言论文档在整个训练文档中出现的概率,即P(c=1)
    
    return p0Vect,p1Vect,pAbusive

 

 

 

3.6  使用分类器进行分类

 

# 朴素贝叶斯分类器
def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):
    p1 = sum(vec2Classify * p1Vec) + np.log(pClass1)    #element-wise mult
    p0 = sum(vec2Classify * p0Vec) + np.log(1.0 - pClass1)
    if p1 > p0:
        return 1
    else: 
        return 0
    
def testingNB():
    listOPosts,listClasses = loadDataSet()
    myVocabList = createVocabList(listOPosts)#得到词汇表
    trainMat=[]
    for postinDoc in listOPosts:#得到文档集的所有文本向量
        trainMat.append(setOfWords2Vec(myVocabList, postinDoc))
    p0V,p1V,pAb = trainNB0(np.array(trainMat),np.array(listClasses))
    
    testEntry = ['love', 'my', 'dalmation']
    thisDoc = np.array(setOfWords2Vec(myVocabList, testEntry))
    print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)
    
    testEntry = ['stupid', 'garbage']
    thisDoc = np.array(setOfWords2Vec(myVocabList, testEntry))
    print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)

 

测试结果:

 

testingNB()

 

运行结果:

 

['love', 'my', 'dalmation'] classified as:  0
['stupid', 'garbage'] classified as:  1

 

 

 

下一篇:Logistic回归

 

 

想学人工智能(Python、数据分析、机器学习、深度学习、推荐系统、强化学习),来公众号AI派看看吧!!

 

结构力学本构模型:复合材料模型:复合材料热力学行为技术教程_2024-08-07_06-54-53.Tex 热塑性复合材料是一种由热塑性树脂基体和增强纤维组成的复合材料。与热固性复合材料不同,热塑性复合材料在加热时可以软化,冷却时硬化,这一过程可以重复进行,因此它们具有可回收和可再加工的特性。热塑性树脂,如聚酰胺(尼龙)、聚碳酸酯、聚醚醚酮(PEEK)等,与碳纤维、玻璃纤维等增强材料结合,可以制备出具有高强度、高刚度和良好耐热性的复合材料。热粘弹性理论是研究材料在温度变化和时间依赖性载荷作用下的变形和应力响应。复合材料,由于其独特的微观结构,展现出复杂的热粘弹性行为。 阅读详情

相关推荐

STM32开发实战--解决STM32CubeMX生成代码时钟初始化卡死问题

本文详细分析了STM32CubeMX生成代码在时钟初始化阶段卡死的问题,提供了多种解决方案,包括简单修改和稳健的等待机制。通过深入探讨HAL库的时钟初始化陷阱及硬件层面的根本原因,帮助开发者快速定位并解决STM32开发中的常见问题。

weixin_26965807的博客 439

朴素贝叶斯(Naive Bayes)

朴素贝叶斯

weixin_44992737的博客 1万+

有了网段为什么还要有VLAN???

近几日,在学习VLAN及VXLAN方面的知识,对于产生原因做一个总结及详解。 VLAN(Virtual Local Area Network,虚拟局域网),其主要用途是用来缩小广播域,即进行隔离。 先对广播域的一个概念做如下描绘:如下图,主机A、B、C、D均连接在交换机SW1上,其中A、C同网段为192.168.252网段,而B和D同网段,为192.168.250网段。 现,假如A与C第...

dandandean_96的博客 6885

【朴素贝叶斯】深入浅出讲解朴素贝叶斯算法(公式、原理)

朴素贝叶斯(Naive Bayes)是一种简单经典的分类算法,它的经典应用案例为人所熟知:文本分类(如垃圾邮件过滤)。条件概率:记事件A发生的概率为P(A),事件B发生的概率为P(B),则在B事件发生的前提下,A事件发生的概率即为条件概率,记为P(A|B)。

程序星空实验室 5万+

单细胞基因可视化之热图的根本改造2

我们前面已经说过了单细胞marker/或者其他任意基因的热图的简单修饰(单细胞基因可视化之热图改造修饰1),仅仅是基于颜色和DoHeatmap函数的参数修饰。那么要对热图进行根本的改造,关键点在于提取表达矩阵,然后对分组进行注释,就可以使用heatmap或者ComplexHeatmap来做图了。 首先计算marker基因,然后选择自己需要展示的基因。 library(Seurat) library(stringr) library(dplyr) all.markers <- Find

qq_42090739的博客 6676

STM32CubeMX-电机控制2-电机相关配置部分

STM32CubeMX-电机霍尔传感器 写在前面的话:之前一直使用库函数,调程序时总会觉得是配置出现问题,要画一些时间去检查配置程序,所以目前转到了STM32CubeMX。写这些内容一方面是整理记录,因为是刚入门,所以难免出现错误,希望能得到大家指正;另一方面是因为自己一个人调试,走了很多弯路,写下来希望能给相同处境的人一些参考。 步骤一: 电机霍尔传感器接口 我目前使用的是STM32F4,电机的...

niker_co的博客 1万+

什么是朴素贝叶斯

本文的介绍包括了朴素贝叶斯的核心原理、分类步骤、常见朴素贝叶斯模型、优点与局限性、一个完整数学计算过程的例子。

彬彬侠的博客 4094

模拟电路综合笔试题解析

本专栏预计更新60期,当前为第10期,文章约6000字,旨在帮助读者掌握模拟电路笔试的核心知识点与实战技巧。文章分为五个章节,涵盖基础理论、高频考点、大厂题目解析等内容。首先,文章详细解析了DC-DC与LDO的区别及选型依据,并通过真题分析帮助读者理解其应用场景。接着,文章深入探讨了运放电路设计、同步降压电路设计等高频考点,并结合实际案例提供解决方案。此外,文章还分享了特斯拉、华为、大疆等大厂的面试题及解析,帮助读者应对复杂电路设计挑战。最后,文章总结了模拟电路设计中的关键技巧与优化方法,为读者提供全面的笔

启芯硬件的博客 469

【机器学习】朴素贝叶斯算法

朴素贝叶斯(Naive Bayes)是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法。由于朴素贝叶斯计算联合概率,所以朴素贝叶斯模型属于生成式模型。经典应用案例包括:文本分类、垃圾邮件过滤等。

Dong_ZH的博客 1万+

2022年8月27日全国青少年信息素养大赛Python编程小学组决赛真题+答案解析

2022年8月27日全国青少年信息素养大赛Python编程小学组决赛真题+答案解析

伶俐角少儿编程 454

电子元器件-三极管终终篇:三极管工作原理详解、参数/手册详解、开关应用详解、Ib电流研究、开关应用实例

三极管工作原理与应用摘要 三极管是一种电流控制器件,通过小基极电流控制大集电极电流。其内部结构由高掺杂发射区、薄低掺杂基区和中等掺杂集电区组成,形成NPN或PNP结。三极管有三种工作状态: 截止区:发射结和集电结均反偏,无放大作用 放大区:发射结正偏,集电结反偏,Ic=βIb 饱和区:两结均正偏,Ic不再随Ib增大 作为开关使用时,需确保三极管深度饱和(Vce≈0.2V)。设计要点包括: 基极电阻计算确保Ib足够大 集电极电阻控制Ic 基极加下拉电阻提高抗干扰 NPN管作地开关,PNP管作电源开关 典型应用

qq_60226558的博客 311

《机器学习实战》4.朴素贝叶斯

这本书的前两章要求分类器做出艰难决策,给出“该数据实例属于哪一类”这类问题的明确答案。不过,分类器有时会产生错误结果,这时可以要求分类器给出一个最优的类别猜测结果,同时给出这个猜测的概率估计值。

豆豆豆豆芽的博客 2022

视图库对接系列(GA-T 1400)一、简单介绍

GA/T 1400《公安视频图像信息应用系统》 是我们需要参考看看的相关文档,里面有对应的标准和介绍,没有这个文档的话可以加群找我要。群的话 我放在最下面了。我们先简单想几个问题, 也就是这个协议主要干什么用的,为什么要有, 能做什么。

qq_37716298的博客 4283

机器学习实战-4朴素贝叶斯

贝叶斯公式: 什么是朴素贝叶斯方法?思想和原理? 判断依据:如果,那么属于c1类。如果,那么属于c2类。 朴素贝叶斯优点:在数据较少的情况下仍然有效,可以处理多类别问题 缺点:对于输入数据的准备方式较为敏感 适用数据类型:标称型数据 应用:使用朴素贝叶斯法来文档分类 # encoding: utf-8 import numpy as np from numpy ...

weixin_41938314的博客 219

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【机器学习实战】第4章 朴素贝叶斯

第4章 基于概率论的分类方法:朴素贝叶斯 朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。本章首先介绍贝叶斯分类算法的基础——贝叶斯定理。最后,我们通过实例来讨论贝叶斯分类的中最简单的一种: 朴素贝叶斯分类。 贝叶斯理论 &a...

chimoren0700的博客 206

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[机器学习][源码]机器学习实战ch4 朴素贝叶斯

把代码保存于此,python3实现,详解就参考《机器学习实战》(Peter Harrington)啦...bayes.py:#refer: http://blog.csdn.net/sinat_17196995/article/details/57412474from numpy import *#4-1#dataset,每行是一个文档def loadDataSet():    postingLi...

小白 362

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

机器学习实战笔记4(朴素贝叶斯)

前面介绍的kNN和决策树都给出了“该数据实例属于哪一类”这类问题的明确答案,而有时候的分类并不能给出明确的答案,本节讲解使用概率论进行分类的方法。 1:简单概念描述 概念比较简单,这里我摘抄自百度百科,很容易理解。 朴素贝叶斯模型(NaiveBayesian classification)): ---- Vmap=arg max P( Vj | a1,a2...an) Vj属于V集合

小村长技术blog 9891

【机器学习实战】4、基于概率论的分类方法:朴素贝叶斯

朴素贝叶斯法 4.1 基于贝叶斯决策理论的分类方法 4.1.1 贝叶斯决策理论 4.1.2 条件概率 4.1.3 全概率公式 4.1.4 贝叶斯推断 4.1.5 朴素贝叶斯 4.2 使用朴素贝叶斯进行文档分类 4.3 总结 4.4 朴素贝叶斯改进——拉普拉斯平滑 4.5 朴素贝叶斯——过滤垃圾邮件 4.5.1 收集数据 4.5.2 准备数据 4.6 朴素贝叶斯——新浪新闻分类(skl...

呆呆的猫的博客 4902

【机器学习实战4】基于朴素贝叶斯分类器的西瓜数据集

优点:朴素贝叶斯分类器简单易实现,对小规模数据集表现良好,且对缺失数据具有一定的鲁棒性。局限性:朴素贝叶斯算法假设特征之间相互独立,这在实际应用中往往不成立,可能会影响分类效果。改进方向:可以尝试其他算法(如决策树、支持向量机等)进行对比,或者对特征独立性的假设进行放松,使用半朴素贝叶斯等更复杂的模型。

2301_80833977的博客 1224

《机器学习实战》-chapter4-朴素贝叶斯

这一章主要是介绍了朴素贝叶斯的算法思想以及如何构造一个简单的朴素贝叶斯网络用来过滤掉垃圾邮件。 首先在朴素贝叶斯中有两个非常重要的假设: 假设所有的特征都是独立的 假设所有的特征都是同等重要的 具体的细节大家可以在书上找到,下面说一下这一章需要改的地方(由于Python版本不同而导致的错误,我是在python3.6下进行实验的): emai/ham/23.txt需要把第二行第一个单词后面的...

没错我是程序猿 439

机器学习实战读书笔记系列4——朴素贝叶斯

1.回顾 贝叶斯决策理论的核心:选择具有最高概率的决策 计算条件概率——贝叶斯准则 使用条件概率进行分类,概率大,就分到该类 2.使用朴素贝叶斯进行文档分类 朴素贝叶斯分类器假设: ‘朴素’——特征之间相互独立(对于文本来说,一个单词的出现与其他单词无关),则样本数为N*x 每个特征同等重要 注:样本数随特征数目增大而增大(指数级)若每个特征需要N个样本,共x个特征,则样本数为NxN...

sinat_37386947的博客 438

机器学习实战——4.基于概率论的分类方法:朴素贝叶斯

k-近邻算法和决策树要求分类器做出艰难决策,给出“该数据实例属于哪一类”这类问题的明确答案。不过,分类器有时会产生错误结果,这是可以要求分类器给出一个最优的类别猜测结果,同时给出这个猜测的概率估计值。 ...

RF~or的博客 1723

机器学习实战4--朴素贝叶斯

分类器在进行分类的时候会给出一个最优的类别猜测结果,同时给出这个猜测的概率估计值。若p1>p2,那么属于类别1,反之属于类别2。 朴素贝叶斯属于贝叶斯决策理论的一部分:贝叶斯准则是计算条件概率的方法,若已知P(x|c),要求P(c|x),则p(c|x)=p(x|c)p(c)/p(x)。 p(c1|x,y)表示给定某个由x,y表示的数据点,那么该数据点来自c1的概率是多少。利用贝叶斯准则求得p(x

chuhang_zhqr的博客 2856

机器学习实战--4.朴素贝叶斯

1.朴素贝叶斯 优点: (1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。 (2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。 (3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。 缺点: 对输入数据的表达形式很敏感。 应用场景:文本分类、人脸识别、欺诈检测。 **2.核心思想:**选择具有最高概率的决策 3.贝叶斯概率:引入先验概率和逻辑推理处理不确定命题 **频数概率:**只从数据本身获得结论,不考虑逻辑推理和先验知识 3

认真学代码的shell 389

读书笔记:机器学习实战【第4章:朴素贝叶斯】

读书笔记:机器学习实战【第4章:朴素贝叶斯】4.1 基于贝叶斯决策理论的分类方法朴素贝叶斯: 优点:在数据较少的情况下依然有效,可以处理多类别问题 缺点:对于输入数据的准备方式较为敏感 适用数据类型:标称型数据朴素贝叶斯是贝叶斯决策理论的一部分,贝叶斯决策理论的核心思想是选择具有最高概率的决策。4.2 条件概率4.3 使用条件概率分类基本都是最基本的概率论知识,跳过。4.4 使用朴素贝叶

欲速求达,三思后行 490

机器学习实战笔记-4-朴素贝叶斯

朴素贝叶斯 (计算 每类下个特征的条件概率之积 和 该类概率 的乘积) 朴素贝叶斯的特点: 特点 例 优点:数据较少时依然有效,可处理多类别问题; 缺点:对输入数据的准备方式比较敏感; 适用数据类型:标称。 文档分类(用关键词) 过滤垃圾邮件(某些关键词是否有侮辱性) 从广告获取区域倾向 原理 如果\(p\left( c_{1} \middle| x,y \righ...

FQ1149816888的博客 171
上一篇: 3.机器学习实战之决策树
下一篇: Integrate Apache Spark with latest IPython Notebook (Jupyter 4.x)
Wang_AI
博客等级 码龄12年 988粉丝 162原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值