代码及注释如下:
#使用贝叶斯算法实现垃圾邮件过滤
#将一个大字符串解析为字符串列表
def textParse(bigString):import relistOfTokens = re.split(r'\W*', bigString)return [tok.lower() for tok in listOfTokens if len(tok) > 2]def spamTest():#import pandas as pddocList = []; classList = []; fullText = []for i in range(1,26):#wordList = textParse(pd.read_csv('email/spam/%d.txt' %i, sep='\n', encoding='utf8'))wordList = textParse(open('email/spam/%d.txt' % i).read())    #spam文件夹中的邮件全设为1docList.append(wordList)fullText.extend(wordList)classList.append(1)#wordList = textParse(pd.read_csv('email/ham/%d.txt' % i, sep='\n', encoding='utf8'))wordList = textParse(open('email/ham/%d.txt' % i).read())    #ham文件夹中的邮件全设为0docList.append(wordList)fullText.extend(wordList)classList.append(0)vocabList = createVocabList(docList)     #将重复出现的单词删掉trainingSet = list(range(50)); testSet = []#随机选取10封邮件为测试集for i in range(10):randIndex = int(random.uniform(0,len(trainingSet)))testSet.append(trainingSet[randIndex])del(trainingSet[randIndex])    #将测试集从训练集中删除trainMat = []; trainClasses = []#剩下的40封作为训练集for docIndex in trainingSet:trainMat.append(setOfWords2Vec(vocabList, docList[docIndex]))    #将文本转换成向量trainClasses.append(classList[docIndex])p0V,p1V,pSpam = trainNB0(array(trainMat), array(trainClasses))   #贝叶斯算法来计算概率errorCount = 0#测试集分类精度计算for docIndex in testSet:wordVector = setOfWords2Vec(vocabList, docList[docIndex])print("the index %d is classified as: %d, the real class is %d" % (docIndex, classifyNB(array(wordVector), p0V, p1V, pSpam), classList[docIndex]))if classifyNB(array(wordVector),p0V,p1V,pSpam) != classList[docIndex]:errorCount += 1print('the error rate is: ',float(errorCount)/len(testSet))

创建一个包含所有文档中出现的不重复单词列表

def createVocabList(dataSet):vocabSet = set([])    #创建空集合for document in dataSet:vocabSet = vocabSet | set(document)     #返回不重复的单词集合#print(vocabSet)return list(vocabSet)
def setOfWords2Vec(vocabList, inputSet):returnVec = [0]*len(vocabList)for word in inputSet:if word in vocabList:returnVec[vocabList.index(word)] = 1else:print("the word: %s is not in my Vocabulary!" %word)return returnVec

贝叶斯概率计算

#trainMatrix为输入的词条集合,trainCategory为词条类别
def trainNB0(trainMatrix, trainCategory):numTrainDocs = len(trainMatrix)     #获取词条长度,即分母变量numWords = len(trainMatrix[0])     #第一段词条中单词个数,即分子变量pAbusive = sum(trainCategory)/float(numTrainDocs)p0Num = zeros(numWords);p1Num = zeros(numWords)p0Denom = 0.0; p1Denom = 0.0for i in range(numTrainDocs):if trainCategory[i] == 1:p1Num += trainMatrix[i]p1Denom += sum(trainMatrix[i])else:p0Num += trainMatrix[i]p0Denom += sum(trainMatrix[i])p1Vect = p1Num/p1Denomp0Vect = p0Num/p0Denomreturn p0Vect,p1Vect,pAbusive
def setOfWords2Vec(vocabList, inputSet):returnVec = [0]*len(vocabList)for word in inputSet:if word in vocabList:returnVec[vocabList.index(word)] = 1else:print("the word: %s is not in my Vocabulary!" %word)return returnVec
#分类,取概率高的值
def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):p1 = sum(vec2Classify * p1Vec) + log(pClass1)p0 = sum(vec2Classify * p0Vec) + log(1.0 - pClass1)if p1 > p0:return 1else:return 0

分类结果:

代码中测试集来自于机器学习实战官网

利用贝叶斯算法对垃圾邮件进行分类处理相关推荐

  1. 朴素贝叶斯算法实现垃圾邮件过滤(Python3实现)

    目录 1.朴素贝叶斯实现垃圾邮件分类的步骤 2.邮件数据 3.代码实现 4.朴素贝叶斯的优点和缺点 1.朴素贝叶斯实现垃圾邮件分类的步骤 (1)收集数据:提供文本文件. (2)准备数据:将文本文件解析 ...

  2. 机器学习:朴素贝叶斯算法与垃圾邮件过滤

    简介 贝叶斯算法是由英国数学家托马斯·贝叶斯提出的,这个算法的提出是为了解决"逆向概率"的问题.首先我们先来解释下正向概率与逆向概率的含义: 正向概率:假设一个箱子里有5个黄色球和 ...

  3. 朴素贝叶斯算法实现垃圾邮件过滤

    朴素贝叶斯算法实现垃圾邮件过滤 1.1 题目的主要研究内容 (1)贝叶斯垃圾邮件过滤技术是一种电子邮件过滤的统计学技术,它使用贝叶斯分类来进行垃圾邮件的判别. (2)贝叶斯分类的运作是借着使用标记(一 ...

  4. python:基于朴素贝叶斯算法的垃圾邮件过滤分类

    目录 一.朴素贝叶斯算法 1.概述 2.推导过程 二.实现垃圾邮件过滤分类 1.垃圾邮件问题背景 2.朴素贝叶斯算法实现垃圾邮件分类的步骤 3.python实现 参考学习网址:https://blog ...

  5. 利用朴素贝叶斯算法识别垃圾邮件

    转载自:http://blog.csdn.net/wowcplusplus/article/details/25190809 朴素贝叶斯算法是被工业界广泛应用的机器学习算法,它有较强的数学理论基础,在 ...

  6. 贝叶斯算法:垃圾邮件过滤

    准备     100封邮件,50封垃圾邮件和50封正常邮件 参考 :     贝叶斯算法原理 程序过程解释 垃圾邮件分类的数学基础是贝叶斯推断(bayesian inference).整个程序过程主要 ...

  7. 机器学习——朴素贝叶斯算法(垃圾邮件分类)

    朴素贝叶斯算法介绍以及垃圾邮件分类实现 1.一些数学知识 2.贝叶斯公式 3.朴素贝叶斯算法 (1)介绍 (2)核心思想 (3)朴素贝叶斯算法 (4)拉普拉斯修正 (5)防溢出策略 (6)一般过程 ( ...

  8. 《机器学习实战》基于朴素贝叶斯算法实现垃圾邮件分类

    import random import sys import numpy as np import pandas as pd from pandas import Series, DataFrame ...

  9. 朴素贝叶斯算法实现对邮件的分类

    通过朴素贝叶斯算法来分类垃圾邮件的PYTHON实现(超易懂) 文章目录 通过朴素贝叶斯算法来分类垃圾邮件的PYTHON实现(超易懂) 前言 一.朴素贝叶斯算法分类垃圾邮件原理 二.python实现 1 ...

最新文章

  1. [No0000160]常用C# 正则表达式大全
  2. Day1-python基础
  3. jQuery Datatables常用配置
  4. 【Spring MVC 之应用篇】3_SpringMVC常见注解
  5. activemq 发两条只收到一条_浅谈ActiveMQ与使用
  6. 【做题记录】[SCOI2009]围豆豆
  7. java实现加密电话号码,有具体的加密流程注释
  8. 计算获取最小值和最大值
  9. 国家铁路调度中心在哪_博慈46寸液晶拼接屏打造上海铁路局南翔站指挥中心显示系统...
  10. python字符串isalnum()函数
  11. 清风数学建模学习笔记——模糊综合评价法原理及案例分析讲解
  12. 快手火山美拍秒拍抖音映客yy小影视频批量下载毛驴保存去水印助手
  13. 宝石争霸如何保存进度
  14. 全国计算机教学图片,全国“xx杯”计算机类说课大赛课件一等奖作品:图层蒙版教学课件.pptx...
  15. hdu2243之AC自动机+矩阵乘法
  16. 谈如何用SNS做淘宝客
  17. 怎么进入云计算这个行业?新手怎么学习云计算?
  18. APP实用开发—自定义加载动画
  19. python画图软件是哪个_Python实现画图软件功能方法详解
  20. 企业网站[正能量系列]失业的程序员(一)

热门文章

  1. 前端学习路线笔记 - html 和 html5 的新特性
  2. 如何转接固定电话(内线)
  3. KgoUI(2) 之 vue + layui
  4. 在vue中使用腾讯地图
  5. “MacTalk 跨越边界” iBooks.
  6. 项目实施中三个最关键的干系人
  7. MediaPlayer播放视频
  8. 嵌入式是做什么的可就业方向是怎样的?
  9. 【koa2】使用token
  10. D3.js的v5版本入门教程(第十四章)—— 力导向图