利用贝叶斯算法对垃圾邮件进行分类处理
代码及注释如下:
#使用贝叶斯算法实现垃圾邮件过滤
#将一个大字符串解析为字符串列表
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
分类结果:
代码中测试集来自于机器学习实战官网
利用贝叶斯算法对垃圾邮件进行分类处理相关推荐
- 朴素贝叶斯算法实现垃圾邮件过滤(Python3实现)
目录 1.朴素贝叶斯实现垃圾邮件分类的步骤 2.邮件数据 3.代码实现 4.朴素贝叶斯的优点和缺点 1.朴素贝叶斯实现垃圾邮件分类的步骤 (1)收集数据:提供文本文件. (2)准备数据:将文本文件解析 ...
- 机器学习:朴素贝叶斯算法与垃圾邮件过滤
简介 贝叶斯算法是由英国数学家托马斯·贝叶斯提出的,这个算法的提出是为了解决"逆向概率"的问题.首先我们先来解释下正向概率与逆向概率的含义: 正向概率:假设一个箱子里有5个黄色球和 ...
- 朴素贝叶斯算法实现垃圾邮件过滤
朴素贝叶斯算法实现垃圾邮件过滤 1.1 题目的主要研究内容 (1)贝叶斯垃圾邮件过滤技术是一种电子邮件过滤的统计学技术,它使用贝叶斯分类来进行垃圾邮件的判别. (2)贝叶斯分类的运作是借着使用标记(一 ...
- python:基于朴素贝叶斯算法的垃圾邮件过滤分类
目录 一.朴素贝叶斯算法 1.概述 2.推导过程 二.实现垃圾邮件过滤分类 1.垃圾邮件问题背景 2.朴素贝叶斯算法实现垃圾邮件分类的步骤 3.python实现 参考学习网址:https://blog ...
- 利用朴素贝叶斯算法识别垃圾邮件
转载自:http://blog.csdn.net/wowcplusplus/article/details/25190809 朴素贝叶斯算法是被工业界广泛应用的机器学习算法,它有较强的数学理论基础,在 ...
- 贝叶斯算法:垃圾邮件过滤
准备 100封邮件,50封垃圾邮件和50封正常邮件 参考 : 贝叶斯算法原理 程序过程解释 垃圾邮件分类的数学基础是贝叶斯推断(bayesian inference).整个程序过程主要 ...
- 机器学习——朴素贝叶斯算法(垃圾邮件分类)
朴素贝叶斯算法介绍以及垃圾邮件分类实现 1.一些数学知识 2.贝叶斯公式 3.朴素贝叶斯算法 (1)介绍 (2)核心思想 (3)朴素贝叶斯算法 (4)拉普拉斯修正 (5)防溢出策略 (6)一般过程 ( ...
- 《机器学习实战》基于朴素贝叶斯算法实现垃圾邮件分类
import random import sys import numpy as np import pandas as pd from pandas import Series, DataFrame ...
- 朴素贝叶斯算法实现对邮件的分类
通过朴素贝叶斯算法来分类垃圾邮件的PYTHON实现(超易懂) 文章目录 通过朴素贝叶斯算法来分类垃圾邮件的PYTHON实现(超易懂) 前言 一.朴素贝叶斯算法分类垃圾邮件原理 二.python实现 1 ...
最新文章
- [No0000160]常用C# 正则表达式大全
- Day1-python基础
- jQuery Datatables常用配置
- 【Spring MVC 之应用篇】3_SpringMVC常见注解
- activemq 发两条只收到一条_浅谈ActiveMQ与使用
- 【做题记录】[SCOI2009]围豆豆
- java实现加密电话号码,有具体的加密流程注释
- 计算获取最小值和最大值
- 国家铁路调度中心在哪_博慈46寸液晶拼接屏打造上海铁路局南翔站指挥中心显示系统...
- python字符串isalnum()函数
- 清风数学建模学习笔记——模糊综合评价法原理及案例分析讲解
- 快手火山美拍秒拍抖音映客yy小影视频批量下载毛驴保存去水印助手
- 宝石争霸如何保存进度
- 全国计算机教学图片,全国“xx杯”计算机类说课大赛课件一等奖作品:图层蒙版教学课件.pptx...
- hdu2243之AC自动机+矩阵乘法
- 谈如何用SNS做淘宝客
- 怎么进入云计算这个行业?新手怎么学习云计算?
- APP实用开发—自定义加载动画
- python画图软件是哪个_Python实现画图软件功能方法详解
- 企业网站[正能量系列]失业的程序员(一)