资源简介
压缩包中包括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二级考试试题
- 树莓派避障小车.py
- Apartment_Manager.py
- python编程相关的161本书内含解压密码
-
wxPython实现fr
ame界面的跳转 - 模式识别ISODATA算法
- Python - 截取指定帧数间隔指定大小的
- Graph Cut图像分割算法——Python+Opencv实
- 球面拟合-基于最小二乘法
- python+pyqt5显示图像,播放视频,绘图
- karmarkar.py
- python keylogger键盘记录源码
- Python基础训练100题(带答案).docx
- 燕大《Python机器学习》实验报告 .do
- 正向云模型发生器python
- 鱼C小甲鱼零基础入门学习Python视频课
- Python爬虫爬取51Job职位数据
- BP神经网络_Python实习_包含鸢尾花分类
- Python调用CAD生成多边形骨料
- python爬取豆瓣电影源码+报告.zip
- 利用python爬虫爬取王者荣耀数据.py
- Fiona-1.8.6-cp37-cp37m-win_amd64.whl
- FP_Growth算法python实现.rar.rar
- PyQt4-4.11.4 win32 python3.4直接安装版(
- 基于python+mysql的图书管理系统,有g
- 多目标优化算法(一)NSGA2python版
- 小甲鱼教程Python全部源码软件包课件
- 西电数据挖掘作业——关联规则apri
- Python 八数码问题,可以直接运行
- python学生管理系统
评论
共有 条评论