资源简介
压缩包中包括python脚本和一个PPT。
在UtralEdit中打开这两个脚本NBayes_lib.py和NBayes_test.py就可以查看脚本,然后运行NBayes_test.py这个脚本就可以得到测试集文本1的分类结果是0
PPT详解了朴素贝叶斯算法的原理以及这个文本分类器的程序思想和运行结果详解,希望对你能够有帮助,如果有任何问题,请留言!

代码片段和文件信息
#encoding: utf-8
import numpy as np
from numpy import *
#postingList 是训练文本,classVec 是每个文本对应的分类
def loadDataSet():
postingList = [[‘my‘‘dog‘‘has‘‘false‘‘problems‘‘help‘‘please‘]
[‘maybe‘‘not‘‘take‘‘him‘‘to‘‘dog‘‘park‘‘stupid‘]
[‘my‘‘dalmation‘‘is‘‘so‘‘cute‘‘I‘‘love‘‘him‘‘my‘]
[‘stop‘‘posting‘‘stupid‘‘worthless‘‘garbage‘]
[‘mr‘‘licks‘‘ate‘‘my‘‘steak‘‘how‘‘to‘‘stop‘‘him‘]
[‘quit‘‘buying‘‘worthless‘‘dog‘‘food‘‘stupid‘]]
classVec = [010101] #‘1‘ is abusive ‘0‘ is not
return postingListclassVec
#贝叶斯算法类
class NBayes(object):
#定义方法,方法的第一个参数必须是self,self是指类实例对象本身
def __init__(self):
self.vocabulary = [] #词典 词典是个键值对 eg. dict={‘Alice‘:‘wo‘‘Jimmy‘:‘ta‘}
self.idf = 0 #词典的IDF权值向量
self.tf = 0 #训练集的权值矩阵
self.tdm = 0 #P(x|yi)
self.Pcates = {} #P(yi)是一个类别字典 key-value
self.labels = [] #对应每个文本的分类,是一个外部导入的列表
self.doclength = 0 #训练集文本数
self.vocablen = 0 #词典词长
self.testset = 0 #测试集
#导入和训练数据集,生成算法必须的参数和数据结构
def train_set(selftrainsetclassVec):
self.cate_prob(classVec) #计算每个分类在测试集中的概率P(yi)
self.doclength = len(trainset)
tempset = set() #无序不重复元素集 set([])
[tempset.add(word) for doc in trainset for word in doc] #生成词典
self.vocabulary = list(tempset)
self.vocablen = len(self.vocabulary)
self.calc_wordfreq(trainset) #计算次品数据集
self.build_tdm() #按分类累计向量空间的每维值P(x|yi)
#cate_prob函数:计算在数据集中每个分类的概率P(yi)
def cate_prob(selfclassVec):
self.labels = classVec
labeltemps = set(self.labels)#获取全部分类
for labeltemp in labeltemps:
self.Pcates[labeltemp] = float(self.labels.count(labeltemp))/float(len(self.labels))
#calc_wordfreq函数:生成普通的词频向量
def calc_wordfreq(selftrainset):
self.idf=np.zeros([1self.vocablen]) #1*词典数
self.tf=np.zeros([self.doclengthself.vocablen]) #训练集文件数*词典数
for indx in xrange(self.doclength):
for word in trainset[indx]:
#找到文本的词在字典中的位置
self.tf[indxself.vocabulary.index(word)] += 1 #是个6*31字典中单词在每个文本中出现大的次数
#消除不同句长导致的偏差
self.tf[indx]=self.tf[indx]/float(len(trainset[indx]))
for signleword in set(trainset[indx]):
self.idf[0self.vocabulary.index(signleword)] += 1 #是个1*31的,字典中的单词在所有文本中出现的次数
self.idf = np.log(float(self.doclength)/self.idf)
self.tf = np.multiply(self.tfself.idf) #矩阵与向量的点乘TF*IDF
#build_tdm函数:按分类累计计算向量空间的每维值P(x|yi)
def build_tdm(self):
self.tdm=np.zeros([len(self.Pcates)self.vocablen]) #类别行*词典列
sumlist=np.zeros([len(self.Pcates)1]) #统计每个分类的总值
for indx in xrange(self.doclength):
#将同一类别的词向量空间值加总
self.tdm[self.labels[indx]]+=self.tf[indx]
#统计每个分类的总值——是一个标量
sumlist[self.labels[indx]]=np.sum(self.tdm[sel
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4311 2016-01-27 16:49 新建文件夹\NBayes_lib.py
文件 4331 2016-01-27 16:49 新建文件夹\NBayes_lib.py.bak
文件 4099 2016-01-27 16:49 新建文件夹\NBayes_lib.pyc
文件 407 2016-01-26 19:43 新建文件夹\NBayes_test
文件 409 2016-01-27 16:25 新建文件夹\NBayes_test.py
文件 409 2016-01-27 16:23 新建文件夹\NBayes_test.py.bak
文件 302144 2016-01-27 16:50 新建文件夹\朴素贝叶斯算法报告.pptx
目录 0 2016-01-27 16:51 新建文件夹
----------- --------- ---------- ----- ----
316110 8
- 上一篇:树莓派避障小车.py
- 下一篇:Python二级考试试题
相关资源
- 二级考试python试题12套(包括选择题和
- pywin32_python3.6_64位
- python+ selenium教程
- PycURL(Windows7/Win32)Python2.7安装包 P
- 英文原版-Scientific Computing with Python
- 7.图像风格迁移 基于深度学习 pyt
- 基于Python的学生管理系统
- A Byte of Python(简明Python教程)(第
- Python实例174946
- Python 人脸识别
- Python 人事管理系统
- 基于python-flask的个人博客系统
- 计算机视觉应用开发流程
- python 调用sftp断点续传文件
- python socket游戏
- 基于Python爬虫爬取天气预报信息
- python函数编程和讲解
- Python开发的个人博客
- 基于python的三层神经网络模型搭建
- python实现自动操作windows应用
- python人脸识别(opencv)
- python 绘图(方形、线条、圆形)
- python疫情卡UN管控
- python 连连看小游戏源码
- 基于PyQt5的视频播放器设计
- 一个简单的python爬虫
- csv文件行列转换python实现代码
- Python操作Mysql教程手册
- Python Machine Learning Case Studies
- python获取硬件信息
评论
共有 条评论