python 贝叶斯分类
来源:互联网 发布:青山水利软件价格 编辑:程序博客网 时间:2024/06/05 03:48
#-*- coding: utf-8 -*-from numpy import *import numpy as np def loadDataSet():postingList=[['my','dog','has','flea','problem','help','please'], ['maybe','not','take','him','to','dog','park','stupid'], ['my','dalmation','is','so','cute','I','love','him','my']]classVec =[0,1,0,1,0,1]return postingList,classVecclass NBayes(object):def __init__(self):self.vocabulary =[] #词典self.idf =0 #词典的IDF权值向量self.tf =0 #训练集的权值矩阵self.tdm =0 #P(x|Yi)self.Pcates ={ } #对应每个文本分类,是一个外部导入的列表self.doclength = 0 #训练集文本数self.vocablen =0 #词典词长self.testset = 0 #测试集def train_set(self,trainset,classVec):'''导入和训练数据集 生成算法必须的参数和数据结构'''self.cate_prob(classVec) #计算每个分类在数据集中的概率P(Yi)self.doclength = len(trainset)tempset =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)def cate_prob(self,classVec):'''计算在数据集中每个分类的概率 P(yi)'''self.labels =classVeclabeltemps = set(self.labels) #获取全部分类for labeltemp in labeltemps:#统计列表中重复的分类:self.labels.count(labeltemp)self.Pcates[labeltemp] = float(self.labels.count(labeltemp))/float(len(self.labels))def calc_wordfreq(self,trainset):'''生成普通的词频向量'''self.idf = np.zeros([1,self.vocablen]) # 1*词典数self.tf = np.zeros([self.doclength,self.vocablen]) #训练集文件数*词典数for indx in xrange(self.doclength): #遍历所有的文本for word in trainset[indx]: #遍历文本中的每个词#找到文本的词在字典 中的位置 +1self.tf[indx,self.vocabulary.index(word)] +=1for signleword in set(trainset[indx]):self.idf[0,self.vocabulary.index(signleword)] +=1def build_tdm(self):'''按分类累积计算向量空间的每维值 P(x|yi)'''self.tdm = np.zeros([len(self.Pcates),self.vocablen]) #类别行x词典列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[self.labels[indx]])self.tdm =self.tdm/sumlist #生成 P(x|yi)def map2vocab(self,testdata):'''将测试集映射到当前词典'''self.testset = np.zeros([1,self.vocablen])for word in testdata:self.testset[0,self.vocabulary.index(word)] +=1def predict(self,testset):'''预测分类结果,输出预测的分类类别'''if np.shape(testset)[1] != self.vocablen: #如果测试集长度与词典不相等,则退出程序print ("输入错误")exit(0)predvalue = 0 #初始化类别概率predclass = '' #初始化类别名称for tdm_vect,keyclass in zip(self.tdm,self.Pcates):#P(X|Yi) P(Yi)#变量tdm ,计算最大分类值temp =np.sum(testset*tdm_vect*self.Pcates[keyclass])if temp > predvalue:predvalue = temppredclass = keyclassreturn predclassdef calc_tfidf(self,trainset):'''以 TF-IDF 方式生成向量空间'''self.idf = np.zeros([1,self.vocablen])self.tf = np.zeros([self.doclength,self.vocablen])for indx in xrange(self.doclength):for word in trainset[indx]:self.tf[indx,self.vocabulary.index(word)] +=1#消除不同句 长句导致的偏差self.tf[indx] = self.tf[indx]/float(len(trainset[indx]))for signleword in set(trainset[indx]):self.idf[0,self.vocabulary.indx(signleword)] +=1self.idf = np.log(float(self.doclength)/self.idf)self.tf = np.multiply(self.tf,self.idf) #矩阵与向量的点乘 TFXIDF
#-*- coding:utf-8 -*-import sysimport osfrom numpy import *import numpy as np from Nbayes_lib import *dataSet,listClasses = loadDataSet() #导入外部数据集#dataSet: 句子的词向量#listClass 是句子所属的类别 [0,1,0,1,0,1]nb =NBayes()nb.train_set(dataSet,listClasses) #训练数据集nb.map2vocab(dataSet[0]) #随机选一个测试句print (nb.predict(nb.testset)) #输出分类的结果
阅读全文
0 0
- python 贝叶斯分类
- python实现贝叶斯分类器
- 基于python的贝叶斯分类
- Python实现贝叶斯分类器
- 贝叶斯分类算法,python实现
- python实现贝叶斯分类器
- 朴素贝叶斯分类Python演示
- 朴素贝叶斯分类原理及Python实现简单文本分类
- python机器学习之朴素贝叶斯分类
- Python实现朴素贝叶斯分类器
- python实现一个朴素贝叶斯分类器
- 朴素贝叶斯分类器的python实现
- 朴素贝叶斯分类算法的Python实现
- Python 朴素贝叶斯(Naive Bayes)分类
- 朴素贝叶斯分类文本 python实现
- 朴素贝叶斯分类器及Python实现
- 用Python学习朴素贝叶斯分类器
- 朴素贝叶斯分类器(Python实现)
- 整型int和字节数组byte相互转换
- 【SEO与页面设置细节】
- HTML&CSS快速入门(二)
- express中创建ejs项目以及引用ejs模板引擎
- 阿里巴巴开源项目nginx_concat_module部署实例
- python 贝叶斯分类
- cglib
- mvn 打包命令
- C语言的输出的规范
- PAT-A-1095. Cars on Campus (30)
- 安卓添加背景音乐的方法
- css布局小结
- 双系统时间不一致问题
- linux系统中如何查看日志 (常用命令)