机器学习:多项式模型朴素贝叶斯分类器(原理+python实现)

本文介绍了多项式朴素贝叶斯分类器在文本处理中的应用,通过实例展示了如何处理垃圾邮件分类问题。数据集、文本预处理、模型构建和评估过程均进行了详细说明,强调了数据清洗和单词计数在提高分类效果中的作用。
摘要由CSDN通过智能技术生成

简介

多项式朴素贝叶斯也是多用于文本处理,其原理和计算的流程和伯努利朴素贝叶斯基本一致,唯一的区别在于单词的计数方式,由《伯努利朴素贝叶斯》一文可知,在文本处理的环节中,我们将单词是否出现在词组作为特征,但在多项式朴素贝叶斯中,我们将单词在词组中出现的次数作为特征,因此只需要更改文中setOfWords2Vec的函数即可,变成如下方式:

def bagOfWords2VecMN(vocabList, inputSet):
    returnVec = [0] * len(vocabList)
    for word in inputSet:
        if word in vocabList:
            returnVec[vocabList.index(word)] += 1
    return returnVec

下面我们就以实例来使用多项式朴素贝叶斯,这次我们使用最著名的贝叶斯应用:垃圾邮件分类。

准备数据

数据集点击这里,其提取码为x9ko

文本处理

首先将文本文件的字符变为我们想要的格式,即每个句子都生成单词组的列表,并将每个单词的字符变为小写,具体实现如下:

# 输入文本
def textParse(bigString):
    import re
    dataMat = []
    for line in bigString:
        curLine = line.split()
        curLine = [tok.lower() for tok in curLine if len(tok) > 2]
        dataMat.append(curLine)
    return dataMat

接下来,就要构造多项式朴素贝叶斯并进行预测,这次选择50封邮件,其中随机抽取10封进行测试决策效果,以分类错误率为评价指标(即将垃圾邮件当作正常邮件的比例),此外,我们将错分的邮件进行输出,以便观察我们可以在哪个方面进行精度上的提升。

import numpy as np
import random

# 根据句子构建单词表
def createVocabList(dataSet):
    vocabSet = set([])  # 因为document也是[]结构
    for document in dataSet:
        vocabSet = vocabSet | set(document)  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值