【数据挖掘】文档分类之朴素贝叶斯算法
来源:互联网 发布:dreamweaver做淘宝分类 编辑:程序博客网 时间:2024/04/30 07:17
#!/usr/bin/pythonimport reimport mathdef getwords(doc): splitter=re.compile('\\W*') # Split the words by non-alpha characters words=[s.lower() for s in splitter.split(doc) if len(s)>2 and len(s)<20] return dict([(w,1) for w in words])#分类器使用demo,训练分类器,其中Nobody owns the water为features,good为catdef sampletrain(cl): cl.train('Nobody owns the water.','good') cl.train('the quick rabbit jumps fences','good') cl.train('buy pharmaceuticals now','bad') cl.train('make quick money at the online casino','bad') cl.train('the quick brown fox jumps','good')#构建分类器需要能识别item的特征。class classifier: def __init__(self,getfeatrues,filename=None): #存储不同特征在不同分类中的次数 self.fc={} #每个分类被使用多少次的字典 self.cc={} self.getfeatures=getfeatures #增加特征在分类中出现的次数 def incf(self,f,cat): self.fc.setdefault(f,{}) self.fc[f].setdefault(cat,0) self.fc[f][cat]+=1 #增加分类使用的次数 def incc(self,cat): self.cc.setdefault(cat,0) self.cc[cat]+=1 #返回特增出现次数 def fcount(self,f,cat): if f in self.fc and cat in self.fc[f]: return float(self.fc[f][cat]) return 0.0 #返回category出现的次数 def catcount(self,cat): if cat in self.cc: return float(self.cc[cat]) return 0.0 #item出现次数之和 def totalcount(self): return sum(self.cc.values()) #返回所有category def categories(self): return self.cc.keys() #本例的feature就是字符串中的单词,cat是对feature的评判 def train(self,item,cat): features= self.getfeatrues(item) for f in features: self.incf(f,cat) self.incc(cat) #条件概率 def fprob(self,f,cat): if self.catcount[cat] == 0: return 0 return self.fcount(f,cat)/self.catcount(cat) #带权重的概率计算 #(weight*assumedprob + count*fprob)/(count+weight) def wieghtprob(self,f,cat,weight=1,ap=0.5,prf): basicprob=prf(f,cat) totals=sum(self.fcount(f,c) for c in self.categories()) bp=((weight*ap)+(totals*basicprob))/(weight+totals) return bp
#朴素贝叶斯算法class naivebayes(classifier): #计算整个文档的概率,由独立性,整个文档的概率:所有item的乘积 def docprob(self,item,cat): features=self.getfeatures(item) p=1 for f in features: p*=self.weightedprob(f,cat,self.fprob) return p def prob(self,item,cat): catprob = self.catcount(cat)/self.totalcount() docprob=self.docprob(item,cat) return catprob*docprob
总结:
1)基于sample训练分类器
2)计算item的条件概率
3)基于贝叶斯理论,计算doc的条件概率
- 【数据挖掘】文档分类之朴素贝叶斯算法
- 数据挖掘回顾三:分类算法之 朴素贝叶斯 算法
- 数据挖掘---分类算法之朴素贝叶斯算法
- 数据挖掘经典算法之朴素贝叶斯分类器
- 数据挖掘算法之深入朴素贝叶斯分类
- 数据挖掘经典算法--朴素贝叶斯分类
- 数据挖掘经典算法总结-朴素贝叶斯分类器
- 数据挖掘之朴素贝叶斯算法的实现
- 数据挖掘:基于朴素贝叶斯分类算法的文本分类实践
- 使用Orange进行数据挖掘之分类(1)------朴素贝叶斯分类
- 数据挖掘4---朴素贝叶斯算法
- 数据挖掘经典算法复现:朴素贝叶斯
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
- C#中 如何执行带GO的sql 语句
- Oracle常用收集
- 深入理解Linux之copy_process()
- JS 实现图片直接下载
- POJ 3664
- 【数据挖掘】文档分类之朴素贝叶斯算法
- Java 线程间的通信
- 趣味Shell
- HDU 2115
- 图像处理笔记(4)
- 实现抽象工厂
- C++中LIB和DLL的区别与使用
- python Scrapy 轻松定制网络爬虫
- 如何理解java中重写,重载与多态(整理)