使用朴素贝叶斯算法简单实现垃圾邮件过滤之算法介绍实现过程

一、算法介绍https://www.cnblogs.com/love528/p/10125089.html

二、实现过程

实验步骤

(1)收集数据:提供文本文件。

(2)准备数据:将文本文件解析成词条向量。

(3)分析数据:检查词条确保解析的正确性。

(4)训练算法:计算不同的独立特征的条件概率。

(5)测试算法:计算错误率。

(6)使用算法:构建一个完整的程序对一组文档进行分类。

主要代码解析

(1)    分词

使用正则表达式将邮件文本其划分成一个个单词的形式

import re

def textParse(bigString):

listOfTokens = re.split(r‘\W*‘, bigString)

return [tok.lower() for tok in listOfTokens if len(tok) > 2]

(2)     生成词汇表

将所有的邮件进行分词后生成一个dataSet,然后生成一个词汇表,这个词汇表是一个集合,即每个单词只出现一次。

def createVocabList(dataSet):

    vocabSet = set([])                   # 创建一个空的不重复列表

for document in dataSet:

         vocabSet = vocabSet | set(document)  # 取并集

return list(vocabSet)

(3)   
 生成词向量

每一封邮件的词汇都存在了词汇表中,因此将每一封邮件生成一个词向量,若该词汇存在于词汇表中,对应位置则为1,不存在为0,这里词向量的维度与词汇表相同。

def setOfWords2Vec(vocabList, inputSet):

returnVec = [0] * len(vocabList)  # 创建一个元素都为0的向量

for
word in
inputSet:

        if
word in
vocabList: 
# 如果词条存在于词汇表中,则置1

returnVec[vocabList.index(word)] = 1  # 查找单词索引

else:

print("the word: %s is
not in my Vocabulary!"
% word)

return
returnVec 
# 返回文档向量

(4)   
 训练算法

计算Pr(W|S)、Pr(W|H),Pr(

|S)表示在垃圾邮件的条件下第i个特征的概率,首先将所有的类别为1的词向量相加,可以得到每个特征的个数,除以类别为1的单词总数就是垃圾邮件中每个单词的概率。

def trainNB0(trainMatrix, trainCategory):

numTrainDocs = len(trainMatrix)  # 计算训练的文档数目

numWords = len(trainMatrix[0])   # 计算每篇文档的词条数

pAbusive = sum(trainCategory) / float(numTrainDocs)  # 文档属于垃圾邮件类的概率

p0Num = np.ones(numWords)

p1Num = np.ones(numWords)  # 创建numpy.ones数组,词条出现数初始化为1,拉普拉斯平滑

p0Denom = 2.0

p1Denom = 2.0  # 分母初始化为2 ,拉普拉斯平滑

for i in
range(numTrainDocs):

if
trainCategory[i] == 1:  # 统计属于侮辱类的条件概率所需的数据,即P(w0|1),P(w1|1),P(w2|1)···

p1Num += trainMatrix[i]

p1Denom += sum(trainMatrix[i])

else# 统计属于非侮辱类的条件概率所需的数据,即P(w0|0),P(w1|0),P(w2|0)···

p0Num += trainMatrix[i]

p0Denom += sum(trainMatrix[i])

p1Vect = np.log(p1Num / p1Denom)

p0Vect = np.log(p0Num / p0Denom)  # 取对数,防止下溢出

return p0Vect, p1Vect, pAbusive  # 返回属于正常邮件类的条件概率数组,属于侮辱垃圾邮件类的条件概率数组,文档属于垃圾邮件类的概率

完整代码

运行结果

原文地址:https://www.cnblogs.com/love528/p/10133202.html

时间: 2024-07-28 16:49:07

使用朴素贝叶斯算法简单实现垃圾邮件过滤之算法介绍实现过程的相关文章

使用朴素贝叶斯算法简单实现垃圾邮件过滤

一.算法介绍 朴素贝叶斯法,简称NB算法,是贝叶斯决策理论的一部分,是基于贝叶斯定理与特征条件独立假设的分类方法: 首先理解两个概念: · 先验概率是指根据以往经验和分析得到的概率,它往往作为"由因求果"问题中的"因"出现: · 后验概率是指在得到"结果"的信息后重新修正的概率,是"执果寻因"问题中的"因" . 1 贝叶斯定理 贝叶斯理论是以18世纪的一位神学家托马斯贝叶斯(Thomas Bayes)命名.

利用朴素贝叶斯实现简单的留言过滤

一.朴素贝叶斯 首先第一个问题,什么是朴素贝叶斯? 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.而朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法.而我们所想要实现的留言过滤其实是一种分类行为,是通过对于概率的判断,来对样本进行一个归类的过程. 朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入A求出使得后验

机器学习算法整理(六)— 贝叶斯算法_实现垃圾邮件过滤

垃圾邮件过滤实例 原文地址:https://www.cnblogs.com/douzujun/p/8457865.html

机器学习Matlab打击垃圾邮件的分类————朴素贝叶斯模型

该系列来自于我<人工智能>课程回顾总结,以及实验的一部分进行了总结学习机 垃圾分类是有监督的学习分类最经典的案例,本文首先回顾了概率论的基本知识.则以及朴素贝叶斯模型的思想.最后给出了垃圾邮件分类在Matlab中用朴素贝叶斯模型的实现 1.概率 1.1 条件概率 定义:事件B发生的情况下,事件A发生的概率记作条件概率P(A|B) P(A|B)=P(A∧B)P(B) 条件概率也叫后验概率.无条件概率也叫先验概率(在没有不论什么其他信息存在的情况下关于命题的信度) 能够得到乘法规则: P(A∧B)

机器学习Matlab实战之垃圾邮件分类————朴素贝叶斯模型

本系列来自于我<人工智能>课程复习总结以及机器学习部分的实验总结 垃圾邮件分类是监督学习分类中一个最经典的案例,本文先复习了基础的概率论知识.贝叶斯法则以及朴素贝叶斯模型的思想,最后给出了垃圾邮件分类在Matlab中用朴素贝叶斯模型的实现 1.概率 1.1 条件概率 定义:事件B发生的情况下,事件A发生的概率记作条件概率P(A|B) P(A|B)=P(A∧B)P(B) 条件概率也叫后验概率,无条件概率也叫先验概率(在没有任何其它信息存在的情况下关于命题的信度) 可以得到乘法规则: P(A∧B)

Bayes 朴素贝叶斯实现垃圾邮件分类

本文选取了25封垃圾邮件和25封正常邮件,随机产生了10组测试集和40组训练集,使用朴素贝叶斯方法实现了垃圾邮件的分类. Bayes公式   遍历每篇文档向量,扫描所有文档的单词,合并集合去重 ,并生成最终的词汇表 # 创建词汇表 # 输入:dataSet已经经过切分处理 # 输出:包含所有文档中出现的不重复词的列表 def createVocabList(dataSet):  # 文本去重,创建词汇表 vocabSet = set([])  # 创建一个空的集合 for document in

深入理解朴素贝叶斯(Naive Bayes)

https://blog.csdn.net/li8zi8fa/article/details/76176597 朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.朴素贝叶斯原理简单,也很容易实现,多用于文本分类,比如垃圾邮件过滤.该算法虽然简单,但是由于笔者不常用,总是看过即忘,这是写这篇博文的初衷.当然,更大的动力来在于跟大家交流,有论述不妥的地方欢迎指正. 1.算法思想--基于概率的预测 逻辑回归通过拟合曲线(或者学习超平面)实现分类,决策树通过寻找最佳划分特征进而学习

机器学习(五)—朴素贝叶斯

最近一直在看机器学习相关的算法,今天我们学习一种基于概率论的分类算法—朴素贝叶斯.本文在对朴素贝叶斯进行简单介绍之后,通过Python编程加以实现. 一  朴素贝叶斯概述                                                               1 前言 “贝叶斯”又是一个响当当的名字,刚开始接触的是贝叶斯定理.贝叶斯分类器是一类分类算法的总称,是两种最为广泛的分类模型之一,另一种就是上篇中的决策树了.贝叶斯分类均以贝叶斯定理为基础,朴素贝叶斯是

朴素贝叶斯方法(Naive Bayes)

本文主要描述了朴素贝叶斯分类方法,包括模型导出和学习描述.实例部分总结了<machine learning in action>一书中展示的一个该方法用于句子感情色彩分类的程序.1 方法概述 学习(参数估计) 实现:朴素贝叶斯下的文本分类 模型概述 朴素贝叶斯方法,是指 朴素:特征条件独立 贝叶斯:基于贝叶斯定理 根据贝叶斯定理,对一个分类问题,给定样本特征x,样本属于类别y的概率是 p(y|x)=p(x|y)p(y)p(x)......(1) 在这里,x是一个特征向量,将设x维度为M.因为朴