资源简介
朴素贝叶斯算法实现的邮件分类器,其中包括代码和数据。文章链接为:https://blog.csdn.net/J__Max/article/details/82965180

代码片段和文件信息
#!/usr/bin/python
# -*- coding utf-8 -*-
# Project: NB
# Author: jiangnan
# Mail: jiangnanmax@gmail.com
# Date: 2018/9/26
import numpy as np
def loadFile(filename):
“““
函数说明:
加载数据文件
:param filename:
文件名
:return:
contentList - 切分邮件内容得到的词条
classVec - 类别标签向量
“““
file = open(filename)
contentList = []
classVec = []
contents = file.readlines()
for line in contents:
content = line.strip(‘\n‘).split(‘ ‘) #以空格为分割符,切分邮件的内容,得到该邮件对应的词条
classVec.append(int(content[0])) #取出邮件的类别标签
del(content[0]) #删掉词条中的类别标签
contentList.append(content)
return contentList classVecx
def createVocabList(dataSet):
“““
函数说明:
根据训练数据,生成一个词汇表
:param dataSet:
切分所有邮件得到的词条
:return:
list(vocabSet) - 使用训练数据生成的不重复的词汇表
“““
vocabList = set([]) #创建一个空集合
for content in dataSet:
vocabList = vocabList | set(content) #通过取并集的方式去重,扩充词汇表
return list(vocabList) #以list的形式返回词汇表
def Words_to_Vec(vocabList wordsSet):
“““
函数说明:
根据vocabList词汇表,将每个wordsSet词条向量化,向量的每个值为1或0,分别表示该词有或者没有在词汇表中出现
:param vocabList:
词汇表
:param inputSet:
切分每封邮件得到的词条
:return:
词条向量
“““
returnVec = [0] * len(vocabList)
for word in wordsSet: #判断每个词是否在词汇表中出现
if word in vocabList:
returnVec[vocabList.index(word)] = 1 #在词汇表中出现的话则该词对应的位置标记为1
else:
print(“The word %s is not in the VocabList!“ % word)
return returnVec
def trainNB(trainMat trainLabel):
“““
函数说明:
朴素贝叶斯分类训练函数
:param trainMat:
训练文档,即Words_to_Vec函数返回的词向量构成的矩阵
:param trainLabel:
训练数据的类别标签,即loadFile函数返回的classVec
:return:
p0Vec - 侮辱类的条件概率数组
p1Vec - 非侮辱类的条件概率数组
pNotAbusive - 文档属于侮辱类的概率
“““
numTraindocs = len(trainMat) #训练集的数量
numWords = len(trainMat[0]) #每个词条向量的长度
pNotAbusive = sum(trainLabel) / float(numTraindocs) #文档属于非侮辱类的概率
p0Num = np.ones(numWords) #创建numpy.ones数组词条出现数初始化为1,拉普拉斯平滑方法
p1Num = np.ones(numWords)
p0Denom = 2.0 ##分母初始化为2拉普拉斯平滑方法
p1Denom = 2.0
for i in range(numTraindocs):
if trainLabel[i] == 1:
p1Num += trainMat[i] #统计属于非侮辱类的条件概率所需的数据,即P(w0|1)P(w1|1)P(w2|1)···
p1Denom += sum(trainMat[i])
else:
p0Num += trainMat[i] #统计属于侮辱类的条件概率所需的数据,即P(w0|0)P(w1|0)P(w2|0)···
p0Denom += sum(trainMat[i])
p1Vec = np.log(p1Num / p1Denom) #取对数
p0Vec = np.log(p0Num / p0Denom)
return p0Vec p1Vec pNotAbusive
def classifyNB(vec2Classify p0Vec p1Vec pClass0):
“““
函数说明:
朴素贝叶斯分类函数
:param vec2Classify:
待分类的词条向量
:param p0Vec:
侮辱类的条件概率数组
:param p1Vec:
非侮辱类的条件概率数组
:param pClass0:
文档属于侮辱类的概率
:return:
0 - 文档属于侮辱类
1 - 文档属于分侮辱类
“““
p1 = sum(vec2Classify * p1Vec) + np.log(pClass
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-10-08 11:01 NB\
文件 6148 2018-10-08 11:01 NB\.DS_Store
目录 0 2018-10-08 11:01 __MACOSX\
目录 0 2018-10-08 11:01 __MACOSX\NB\
文件 172 2018-10-08 11:01 __MACOSX\NB\._.DS_Store
文件 2375391 2015-04-16 14:04 NB\spam_test.txt
文件 172 2015-04-16 14:04 __MACOSX\NB\._spam_test.txt
文件 10309828 2015-04-16 14:04 NB\spam_train.txt
文件 172 2015-04-16 14:04 __MACOSX\NB\._spam_train.txt
文件 5970 2018-10-07 12:30 NB\NB.py
文件 172 2018-10-08 11:01 __MACOSX\._NB
- 上一篇:LadEditor.zip
- 下一篇:PUNTutorial教程译文.pdf
相关资源
- Python中Numpy库最新教程
- 用python编写的移动彩信的发送程序
- Python全栈学习笔记面向对象大作业:
- python实现的ftp自动上传、下载脚本
- Python版的A*寻路算法
- IronPython IDE
- pip-10.0.1.tar.gz
- Data Science from Scratch 2nd Edition
- 朴素贝叶斯分类模型完整代码
- shape_predictor_68_face_landmarks.dat.bz2 68个标
- 爬取豆瓣电影TOP250程序,包含非常详
- 中文维基百科语料库百度网盘网址.
- 基于决策树和朴素贝叶斯算法对Adul
- MSCNN_dehaze.rar
- 爬取豆瓣排行榜电影数据(含GUI界面
- 字典文本资源
- Brainfuck / OoK 解码脚本
- 案例实战信用卡欺诈检测数据集
- 招商策略_抱团启示录那些年我们一起
- sip-4.19.zip
- 树莓派3b+学习使用教程
- numpy 中文学习手册
- 基于朴素贝叶斯分类法的图像分割
- pytorch-1.4.0-py3.7_cpu_0.tar.bz2
- 机器学习实战 高清完整版PDF
- 泰坦尼克号0.81准确率实验报告.docx
-
abaqus sc
ripting reference manual.pdf - 网页版聊天程序--网络程序设计课程大
- Give Me Some Credit
-
ba
semap安装出错时,正确得pyproj文件
评论
共有 条评论