资源简介
朴素贝叶斯算法实现的邮件分类器,其中包括代码和数据。文章链接为: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
相关资源
- 机器学习_基于朴素贝叶斯算法_疾病预
- 13个经典量化策略 汇总.pdf
- pyltp-0.2.1-cp35-cp35m-win_amd64.whl pyltp-0.2
- tensorflow中文文档.pdf
- 超级强大灵活的文件批量重命名工具
- pyton tkinter参考手册中文版软件直译
- dlib-19.7.0-cp36-cp36m-win_amd64.whl
- 《Django By Example》中文带目录文字版
- Attention is all you need实战tensorflow及ke
- Django Design Patterns and Best Practices 中文
- ros小车的包
- 网络爬虫的初次体验
- 泰坦尼克号.zip
- onlineExam.zip
- pycairo-1.19.0-cp38-cp38-win_amd64.whl
- Creating Apps in Kivy中文版
- 美科新闻抓取程序源码
-
opencv的xm
l文件 - RedHat6.6更新Centos6yum源
- pyecharts安装包
- 中国省市县三级行政区划地图含九段
- 爬取微信公众号中的历史消息点赞量
- 彩票的选择
- scrapy简单的多层页面爬取程序
- 用遗传算法求解旅行商问题
- SUCCESSFUL ALGORITHMIC TRADING()
- Successful Algorithmic Trading原书加代码
- license_plate.zip
- 论文研究-改进的朴素贝叶斯垃圾邮件
- SVM学习笔记+伪码.pdf
评论
共有 条评论