• 大小: 249KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-28
  • 语言: Python
  • 标签: Python  

资源简介

压缩包中包括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


评论

共有 条评论