`
yuhai.china
  • 浏览: 160232 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

朴素贝叶斯分类

阅读更多
给定训练样本
('Nobody owns water.','good');

('the quick rabbit jumps fences','good');

('buy pharmaceuticals','bad');

('make quick money at the online casino','bad');

('the quick brown fox jumps','good');

如何判断一个新的样本'quick money'是good还是bad呢,最常用的办法就是朴素贝叶斯分类

朴素贝叶斯分类的步骤大致如下:
1.根据样本集判断每个词属于各个分类的可能性。
  也就是计算一个词的文档频度df
2.对待分类文本中的每一个词,计算相应的df,利用贝叶斯公式,把所有的df相乘,结果在乘以p(目录)的值,就算出了当前文本属于一个分类的概率
import re
import math

def getwords(doc):
	spliter=re.compile('\\W*')
	words=[s.lower() for s in spliter.split(doc) if len(s)>2 and len(s)<20]
	return dict([(w,1) for w in words]);

def sampletrain(cl):
	cl.train('Nobody owns water.','good');
	cl.train('the quick rabbit jumps fences','good');
	cl.train('buy pharmaceuticals','bad');
	cl.train('make quick money at the online casino','bad');
	cl.train('the quick brown fox jumps','good');
	
class classifier:
	def __init__(self,getfeatures,filename=None):
		self.fc={}
		self.cc={}
		self.getfeatures=getfeatures
		self.thresholds={}
		
	def setthreshold(self,cat,t):
		self.thresholds[cat]=t
		
	def getthreshold(self,cat):
		if cat not in self.thresholds: return 1.0
		return self.thresholds[cat]
		
	def classify(self,item,default=None):
		probs={}
		max=0.0
		for cat in self.categories():
			probs[cat]=self.prob(item,cat)
			if probs[cat]>max:
				max=probs[cat]
				best=cat
		
		for cat in probs:
			if cat==best:continue
			if probs[cat]*self.getthreshold(best)>probs[best]:return default
			
		return best
		
	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
		
	def catcount(self,cat):
		if cat in self.cc:
			return float(self.cc[cat])
		return 0.0
		
	def totalcount(self):
		return sum(self.cc.values())
		
	def categories(self):
		return self.cc.keys()
	
	def train(self,item,cat):
		features=self.getfeatures(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)
		
	def weightedprob(self,f,cat,prf,weight=1.0,ap=0.5):
		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 nativebayes(classifier):
	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 docprob*catprob
		
		
		

分享到:
评论
1 楼 sdh5724 2008-11-23  
我也在搞学习的东西, 哈

相关推荐

    朴素贝叶斯分类器算法

    朴素贝叶斯分类器是一种基于概率的机器学习算法,它基于贝叶斯定理和特征条件独立假设。在"朴素贝叶斯分类器算法"中,我们主要关注以下几个知识点: 1. **贝叶斯定理**:贝叶斯定理是统计学中的一个重要概念,用于...

    朴素贝叶斯分类Iris数据

    朴素贝叶斯分类是一种基于概率的机器学习方法,它在数据分类中有着广泛的应用。该方法基于贝叶斯定理,假设特征之间相互独立,因此被称为“朴素”。在这个实例中,我们将探讨如何使用朴素贝叶斯分类器处理Iris数据集...

    人工智能-项目实践-朴素贝叶斯分类器-朴素贝叶斯文本分类器

    人工智能_项目实践_朴素贝叶斯分类器_朴素贝叶斯文本分类器 **数据:**搜狗文本分类语料库 **分类器:**朴素贝叶斯分类器 NBC(Naive Bayesian Classifier) **编程语言:**Python+jieba分词库+nltk+sklearn

    java实现朴素贝叶斯分类算法

    朴素贝叶斯分类算法是一种基于概率的机器学习方法,它基于贝叶斯定理和特征条件独立假设。在Java中实现朴素贝叶斯分类器,我们需要理解以下几个关键知识点: 1. **贝叶斯定理**:贝叶斯定理是概率论中的一个公式,...

    朴素贝叶斯分类器,用于识别手写的数字A~J

    朴素贝叶斯分类器是一种基于概率的机器学习算法,它在数据分类中有着广泛的应用,尤其是在文本分类、垃圾邮件过滤和图像识别等领域。这个特定的案例是针对手写数字的识别,目标是从A到J这10个字符进行区分。 在手写...

    基于hadoop的朴素贝叶斯分类器

    朴素贝叶斯分类器是一种基于概率的机器学习算法,它基于贝叶斯定理和特征条件独立假设。在大数据处理领域,结合Hadoop框架可以实现大规模数据集的分类任务。Hadoop是一个开源分布式计算框架,它允许在大量廉价硬件上...

    朴素贝叶斯分类程序(C++)

    朴素贝叶斯分类是一种基于概率理论的机器学习方法,它假设各特征之间相互独立,并且在给定类标签的情况下,每个特征出现的概率是独立的。这个假设使得计算变得简单,因此朴素贝叶斯分类器在处理大量数据时具有高效性...

    朴素贝叶斯分类 源码+步骤

    该文档为朴素贝叶斯分类算法的实现步骤,包括源码注解和详细步骤

    模式识别朴素贝叶斯分类器

    朴素贝叶斯分类器是一种基于概率的机器学习算法,它在模式识别领域有着广泛的应用。该算法基于贝叶斯定理,通过计算不同特征条件下类别的先验概率和后验概率来进行分类。在这个主题中,我们将深入探讨朴素贝叶斯分类...

    Python实现的朴素贝叶斯分类器示例

    朴素贝叶斯分类器是一种基于概率的分类方法,它的核心思想是假设各个特征之间相互独立,并且利用贝叶斯定理来计算一个样本属于某一类别的概率。在Python中,我们可以使用各种库,如sklearn,来实现朴素贝叶斯分类器...

    朴素贝叶斯_朴素贝叶斯分类_

    朴素贝叶斯分类是一种基于概率理论的机器学习方法,它在文本分类、垃圾邮件过滤、情感分析等领域有着广泛的应用。这种算法的核心思想是利用贝叶斯定理来预测未知类别的数据实例的类别,同时假设特征之间相互独立,即...

    MATLAB实现朴素贝叶斯分类对手写数字数据集进行分类

    在机器学习领域,朴素贝叶斯分类是一种广泛应用的算法,尤其在文本分类和垃圾邮件过滤等领域。本项目将探讨如何使用MATLAB来实现朴素贝叶斯分类器,并将其应用于手写数字识别。手写数字数据集通常是机器学习初学者...

    基于朴素贝叶斯分类器的文本分类算法

    朴素贝叶斯分类器是一种基于概率的机器学习方法,它在文本分类领域有着广泛的应用。该模型基于贝叶斯定理,并且通过“朴素”这一假设来简化计算,即假设特征之间是相互独立的。这一假设使得朴素贝叶斯分类器能够高效...

    论文研究-朴素贝叶斯分类器的构建 .pdf

    朴素贝叶斯分类器是一种基于贝叶斯定理的概率分类方法,它简单且易于实现,广泛应用于文本分类、垃圾邮件过滤、情感分析等众多领域。朴素贝叶斯分类器的核心是基于属性条件独立的假设,即一个属性的出现不影响其他...

    朴素贝叶斯分类器(wine红酒数据集)

    机器学习领域一个非常重要理论就是贝叶斯理论,本文就是一篇关于使用朴素贝叶斯分类器来进行多维数据分类的学习使用文档,由于使用latex进行排版,所以就直接上传PDF文档了,如有问题可以在CSDN上私信我,多谢批评...

    朴素贝叶斯分类算法

    朴素贝叶斯分类算法是基于概率理论的一种有监督学习方法,尤其在文本分类、垃圾邮件过滤等领域表现出色。它的核心思想是假设各个特征之间相互独立,并且先验概率可以通过观察到的数据来估计。这种算法简单易用,计算...

    朴素贝叶斯分类器(Matlab代码)

    朴素贝叶斯分类器是一种基于概率的机器学习算法,它基于贝叶斯定理和特征条件独立假设。在本项目中,"朴素贝叶斯分类器(Matlab代码)" 提供了一个非官方的实现,由作者亲自编写,并且包含了测试模块,这使得学习者...

    朴素贝叶斯分类器(python版)

    朴素贝叶斯分类器是一种基于概率的机器学习算法,它基于贝叶斯定理和特征条件独立假设。在Python中实现朴素贝叶斯分类器,我们可以利用常见的数据分析库,如NumPy、Pandas以及Scikit-learn。在这个压缩包中,有两个...

    朴素贝叶斯分类器(MATLAB源代码)

    朴素贝叶斯分类器 MATLAB 源代码,里面含有使用实例,用的是 UCI 的 mushroom 数据集。 分类器详细介绍见: http://blog.csdn.net/yunduanmuxue/article/details/39693917

    MATLAB中的朴素贝叶斯分类器matlab.7z

    标题 "MATLAB中的朴素贝叶斯分类器matlab.7z" 涉及到的主要知识点是关于在MATLAB环境中实现朴素贝叶斯分类器。MATLAB是一种强大的数学计算和编程环境,常用于数据分析、算法开发和模型创建。朴素贝叶斯分类器则是一...

Global site tag (gtag.js) - Google Analytics