首页 > 其他分享 >Chapter4 朴素贝叶斯案例

Chapter4 朴素贝叶斯案例

时间:2023-04-25 16:45:20浏览次数:39  
标签:real 词条 Chapter4 样本 贝叶斯 ---- error class 朴素

朴素贝叶斯案例:过滤垃圾邮件


1. 案例的流程

    示例:使用朴素贝叶斯对电子邮件进行分类
    (1)收集数据:提供文本文件。
    (2)准备数据:将文本文件解析成词条向量。
    (3)分析数据:检查词条确保解析的正确性。
    (4)训练算法:使用我们之前建立的trainNB0()函数。  
    (5)测试算法:使用classifyNB(),并且构建一个新的测试函数来计算文档集的错误率。
    (6)使用算法:构建一个完整的程序对一组文档进行分类,将错分的文档输出到屏幕上。

2. 文件解析函数

# 该函数的作用是用于分割文本,以便于生成词汇列表
# 该函数位于bayes.py文件中

def textParse(bigString):
    import re
    # 这里通过正则表达式来分割样本
    # 该正则表达式的含义为:以非字母数字下划线为标志进行分割(长度为0个或无限个)
    listOfTokens = re.split(r'\W*',bigString)
    # 返回分割之后的样本,单词(词条)要求:长度大于2且均为小写
    return [ tok.lower() for tok in listOfTokens if len(tok) > 2]

3. 垃圾邮件测试函数

# 该函数的作用是用于分类垃圾邮件并测试错误率
# 该函数位于bayes.py文件中

def spamTest():
    docList = []                # 代表分割词条之后的样本列表
    classList = []              # 代表样本的类别列表
    fullText = []               # 代表存储所有的词条列表
    for i in range(1,26):       # 共有25个文件
        wordList = textParse(open('email/spam/%d.txt' % i).read())      # 导入电子邮件(垃圾),分割样本,生成词条列表
        docList.append(wordList)                                        # 添加样本列表
        fullText.extend(wordList)                                       # 添加样本里面的单词
        classList.append(1)                                             # 添加该样本所属的类别(1为垃圾邮件,0为非垃圾邮件)
        wordList = textParse(open('email/ham/%d.txt' % i).read())       # 导入电子邮件(正常)
        docList.append(wordList)
        fullText.extend(wordList)
        classList.append(0)
    vocabList = createVocabList(docList)                                # 生成单词列表,进而可以生成词条向量
    trainSet = list(range(50))
    testSet = []
    # 以下代码用于从训练集里随机构建测试集,并在训练集中删除相应的测试样本
    for i in range(10):
        # random.uniform 方法代表生成一个指定范围的随机浮点数,该范围区间左闭右开
        # 随机从训练集中选择一个样本作为测试样本
        randIndex = int(random.uniform(0,len(trainSet)))
        testSet.append(randIndex)
        del(trainSet[randIndex])
    trainMat = []                                                       # 创建训练矩阵,存储的都是训练样本的词条向量
    trainClasses = []                                                   # 代表训练样本的类别
    for docIndex in trainSet:
        trainMat.append(setOfWords2Vec(vocabList,docList[docIndex]))
        trainClasses.append(classList[docIndex])
    # 通过贝叶斯计算三个概率
    p0V,p1V,pSpam = trainNB0(array(trainMat),array(trainClasses))       # pSpam代表垃圾邮件的概率
    errorCount = 0                                                      # 代表错误分类的样本计数器
    for docIndex in testSet:
        wordVector = setOfWords2Vec(vocabList,docList[docIndex])        # 生成测试样本的词条向量
        forecastClass = classifyNB(array(wordVector),p0V,p1V,pSpam)
        realClass = classList[docIndex]
        if forecastClass != realClass:  # 如果预测的类别与实际类别不符合
            errorCount+=1
            print('the error class is: %s ---- the real class is %s' % (forecastClass,realClass))
    print('the error rate is:', float(errorCount) / len(testSet))       # 计算错误率
# 该函数的作用是用于测试
# 该函数位于personalTest.py文件中
import baye1

baye1.spamTest()
'''
the error class is: 1 ---- the real class is 0
the error class is: 1 ---- the real class is 0
the error rate is: 0.2

the error class is: 1 ---- the real class is 0
the error class is: 1 ---- the real class is 0
the error class is: 1 ---- the real class is 0
the error class is: 1 ---- the real class is 0
the error class is: 1 ---- the real class is 0
the error rate is: 0.5

'''

'''
    需要注意的是:由于本案例中训练样本和测试样本是随机的,因此每次执行时,错误率都会不同。
'''

标签:real,词条,Chapter4,样本,贝叶斯,----,error,class,朴素
From: https://www.cnblogs.com/gao79135/p/17353082.html

相关文章

  • 贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析免疫球蛋白、前列腺癌数据
    原文链接:http://tecdat.cn/?p=22702最近我们被客户要求撰写关于贝叶斯分位数回归的研究报告,包括一些图形和统计输出。贝叶斯回归分位数在最近的文献中受到广泛关注,本文实现了贝叶斯系数估计和回归分位数(RQ)中的变量选择,带有lasso和自适应lasso惩罚的贝叶斯摘要还包括总结结果、......
  • Chapter4 朴素贝叶斯
    朴素贝叶斯1.简介朴素贝叶斯是一种基于概率论的分类方法。它主要借助条件概率和贝叶斯公式来对样本进行分类。2.优缺点朴素贝叶斯优点:在数据较少的情况下仍然有效,可以处理多类别问题。缺点:对于输入数据的准备方式较为敏感。适用数据类型:标称型数据。3......
  • PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SV
    全文下载链接:http://tecdat.cn/?p=26219最近我们被客户要求撰写关于银行机器学习的研究报告,包括一些图形和统计输出。该数据与银行机构的直接营销活动相关,营销活动基于电话。通常,需要与同一客户的多个联系人联系,以便访问产品(银行定期存款)是否会(“是”)或不会(“否”)订阅银行数据集我......
  • Chapter4 图例
    Chapter4图例图例的作用就是对所绘制的图像,进行解释。importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(-3,3,50)y1=2*x+1y2=x**2plt.figure()#设置x轴的取值范围plt.xlim((-1,2))#设置y轴的取值范围plt.ylim((-2,3))#描述x轴plt......
  • Java语言在Spark3.2.4集群中使用Spark MLlib库完成朴素贝叶斯分类器
    一、贝叶斯定理贝叶斯定理是关于随机事件A和B的条件概率,生活中,我们可能很容易知道P(A|B),但是我需要求解P(B|A),学习了贝叶斯定理,就可以解决这类问题,计算公式如下:  P(A)是A的先验概率P(B)是B的先验概率P(A|B)是A的后验概率(已经知道B发生过了)P(B|A)是B的后验概率(已经知道A发生过了)二......
  • 决策论——贝叶斯决策的R实现(二)
    决策是理性人普遍从事的一种活动,也是极为重要的制胜手段。它的核心是,对未来活动的多个目标及用途做出合理的选择,以寻求最满意的行动方案。决策具有以下特点:①面对新问题和新任务做出科学决定,属于创造性的管理活动;②必须对实际行为有直接的指导作用;③具有多因素、多目标、不要确定......
  • python机器学习案例系列教程——文档分类器,朴素贝叶斯分类器,费舍尔分类器
    全栈工程师开发手册(作者:栾鹏)python数据挖掘系列教程github地址:https://github.com/626626cdllp/data-mining/tree/master/Bayes贝叶斯分类过程概述:首先有一批已知分类的数据集。对每个输入对象提取特征,根据输入对象的特征属性和输入对象的所属分类,计算分类与特征属性之间的概率......
  • 基于贝叶斯判决的手写数字识别系统,带GUI界面
    1.算法描述贝叶斯判别规则是把某特征矢量(x)落入某类集群的条件概率当成分类判别函数(概率判别函数),x落入某集群的条件概率最大的类为X的类别,这种判决规则就是贝叶斯判别规则。贝叶斯判别规则是以错分概率或风险最小为准则的判别规则。判别函数,各个类别的判别区域确定后,可以用......
  • 基于贝叶斯判决的手写数字识别系统,带GUI界面
    1.算法描述      贝叶斯判别规则是把某特征矢量(x)落入某类集群的条件概率当成分类判别函数(概率判别函数),x落入某集群的条件概率最大的类为X的类别,这种判决规则就是贝叶斯判别规则。贝叶斯判别规则是以错分概率或风险最小为准则的判别规则。       判别函数,各个......
  • 频率学派和贝叶斯学派
    贝叶斯定理贝叶斯推断是一种统计学方法,用来估计统计量的某种性质。贝叶斯推断与传统的频率学派不同,它是建立在主观判断的基础上的,也就是说,你可以不需要客观证据,先估计一个值,然后根据实际结果不断修正。由于其主观性太强,所以在一些传统行业内更偏向于传统的频率学派。贝叶斯定理......