返回顶部
首页 > 资讯 > 后端开发 > Python >朴素贝叶斯算法的Python实现
  • 727
分享到

朴素贝叶斯算法的Python实现

朴素算法贝叶斯 2023-01-31 03:01:39 727人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

注意:1、代码中的注释请不要放在源程序中运行,会报错。    2、代码中的数据集来源于Http://arcHive.ics.uci.edu/ml/datasets/Car+Evaluation     3、对于朴素贝叶斯的原理,可以查看我的

注意:1、代码中的注释请不要放在源程序中运行,会报错。

    2、代码中的数据集来源于Http://arcHive.ics.uci.edu/ml/datasets/Car+Evaluation

    3、对于朴素贝叶斯的原理,可以查看我的前面的博客

# Author :Wenxiang Cui
# Date :2015/9/11
# Function: A classifier which using naive Bayesian alGorithm 

import math

class Bayesian:
	def __init__(self):
		self.dataS = [] # 训练样本集DataSource
		self.attriList = [] # 属性集合
		self.desClass = 0 # 分类目标属性在attriList中的位置
	def loadDataS(self,fileName,decollator):
		#input: 
		#		fileName - DataSource 的文件名
		#		decollator - DataSource 中每个字段之间的分割符,有可能是空格或','
		#function : 
		#		从磁盘中读取数据并转化为较好处理的列表	
		items = []
		fp = open(filename,'r')
		lines = fp.readlines()
		for line in lines:
			line = line.strip('\n')
			items.append(line)
		fp.close()

		i = 0
		b = []
		for i in range(len(items)):
			b.append(items[i].split(decollator))
		self.dataS = b[:]
	def getAttriList(self,attributes):
		#input: 
		#		attributes - 训练数据集中的属性集合,必须与dataSource中的列相对应
		#function: 
		#		获得训练数据集的属性列表
		self.attriList = attributes[:]
	def getDesClass(self,loca):
		#input: 
		#		loca - 分类目标属性在attriList中的位置
		#function: 
		#		获得分类目标属性在attriList中的位置
		self.desClass = loca
	def calPriorProb(self):
		#input: 
		#		
		#function: 
		#		计算类的先验概率
		dictFreq = {} # 构建频度表,用字典表示
		desLabel = [] 
		sampleNum = 0
		for items  in self.dataS:
			sampleNum += 1
			if not items[self.desClass] in dictFreq:
				dictFreq[items[self.desClass]] = 1
				desLabel.append(items[self.desClass])
			else:
				dictFreq[items[self.desClass]] += 1
		dictPriorP = {} # 构建先验概率表,用字典表示
		for item in desLabel:
			dictPriorP[item] = float(dictFreq[item]) / sampleNum
		self.PriorP = dictPriorP[:]
		self.classLabel = desLabel[:]
	def calProb(self,type,loca):
		#input: 
		#		type - 定义属性是连续的还是离散的
		#   	loca - 该属性在属性集中的位置
		#output:
		#		dictPara - 连续属性的样本均值和方差(列表表示)
		#		dictProb - 离散属性的类条件概率
		#function: 
		#		计算某个属性的类条件概率密度
		if type == 'continuous': 
			dictData = [] # 提取出样本的类别和当前属性值
			dictPara = [] # 记录样本的类别和其对应的样本均值和方差
			for item in self.classLabel:
				dictData.append([])
				dictPara.append([])
			for items in self.dataS:
				dataIndex = self.classLabel.index(items[self.desLabel]) # 返回当前样本类属性
				dictData[dataIndex].append(float(items[loca])) # 记录当前属性值及该样本的类属性
			#计算类属性的样本均值和方差(可以用Numpy包来快速处理)
			for i in range(len(self.classLabel)):
				[a,b] = self.calParam(dictData[i])
				dictPara[i].append(a)
				dictPara[i].append(b)
			return dictPara
		elif type == 'discrete': 
			dictFreq = {}
			dictProb = {}
			for item in self.classLabel:# 构建频度表,用字典表示
				dictFreq[item] = {}		
				dictProb[item] = {}	
			label = []
			for items in self.dataS:
				if not items[loca] in label:
					label.append(items[loca])
					dictFreq[items[self.desClass]][items[loca]] = 1
				else:
					dictFreq[items[self.desClass]][items[loca]] += 1
			needLaplace = 0
			for key in dictFreq.keys():
				for ch in labels:
					if ch not in dictFreq[key]:
						dictFreq[key][ch] = 0
						needLaplace = 1
				if needLaplace == 1: # 拉普拉斯平滑用于处理类条件概率为0的情况
					dictFreq[key] = self.LaplaceEstimator(dictFreq[key])	
					needLaplace = 0
			for item in self.classLabel:
				for ch in dictFreq[item]:
					dictProb[item][ch] = float(dictFreq[item][ch]) / self.dictFreq[item]	
			return dictProb	
		else:
			print 'Wrong type!'
	def calParam(self,souList):
		#input: 
		#		souList - 待计算的列表
		#output:
		#		meanVal - 列表元素的均值
		# 		deviation - 列表元素的标准差
		#function: 
		#		计算某个属性的类条件概率密度
		meanVal = sum(souList) / float(len(souList))
		deviation = 0
		tempt = 0
		for val in souList:
			tempt += (val - meanVal)**2
		deviation = math.sqrt(float(tempt)/(len(souList)-1))
		return meanVal,deviation
	def LaplaceEstimator(self,souDict):
		#input: 
		#		souDict - 待计算的字典
		#output:
		#		desDict - 平滑后的字典
		#function: 
		#		拉普拉斯平滑
		desDict = souDict.copy()
		for key in souDict:
			desDict[key] = souDict[key] + 1
		return desDict

class CarBayesian(Bayesian):
	def __init__(self):
		Bayesian.__init__(self)
		self.buying = {}
		self.maint = {}
		self.doors = {}
		self.persons = {}
		self.lug_boot = {}
		self.safety = {}
	def tranning(self):
		self.Prob = []
		self.buying = Bayesian.calProb('discrete',0)
		self.maint = Bayesian.calProb('discrete',1)	
		self.doors = Bayesian.calProb('discrete',2)
		self.persons = Bayesian.calProb('discrete',3)
		self.lug_boot = Bayesian.calProb('discrete',4)
		self.safety = Bayesian.calProb('discrete',5)

		self.Prob.append(self.buying)
		self.Prob.append(self.maint)
		self.Prob.append(self.doors)
		self.Prob.append(self.persons)
		self.Prob.append(self.lug_boot)
		self.Prob.append(self.safety)
	def classify(self,sample):
		#input :
		# 		sample - 一个样本
		#function:
		# 		判断输入的这个样本的类别
		posteriorProb = {}
		for item in self.classLabel:
				posteriorProb[item] = self.PriorP[item]
				for i in range(len(sample)-1):
					posteriorProb[item] *= self.Prob[i][item][sample[i]]
		maxVal = posteriorProb[self.classLabel[0]]
		i = 0
		for item in posteriorProb:
			i += 1
			if posteriorProb[item] > maxVal:
				maxVal = posteriorProb[item]
				location = i
		print "该样本属于的类别是:",self.classLabel[location]


filename = "D:\MyDocuments-HnH\DataMining\DataSets\Car\Car_Data.txt"
MyCar = CarBayesian()
MyCar.loadDataS(filename,',')
attributes = ['buying','maint','doors','persons','lug_boot','safety']
MyCar.getAttriList(attributes)
MyCar.getDesClass(7-1)
MyCar.tranning()
sample = ['vhigh','vhigh','2','2','small','low']


--结束END--

本文标题: 朴素贝叶斯算法的Python实现

本文链接: https://lsjlt.com/news/187620.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 朴素贝叶斯算法的Python实现
    注意:1、代码中的注释请不要放在源程序中运行,会报错。    2、代码中的数据集来源于http://archive.ics.uci.edu/ml/datasets/Car+Evaluation     3、对于朴素贝叶斯的原理,可以查看我的...
    99+
    2023-01-31
    朴素 算法 贝叶斯
  • 朴素贝叶斯和半朴素贝叶斯(AODE)分类器Python实现
      一、概述  机器学习最后一次实验,要求实现朴素贝叶斯和AODE的半朴素贝叶斯分类器。由于老师说可以调用现成的相关机器学习的库,所以我一开始在做朴素贝叶斯分类器的时候,直接调用了sklearn库,很方便,可是问题来了,在做AODE半朴素贝...
    99+
    2023-06-02
  • python中如何使用朴素贝叶斯算法
    这里再重复一下标题为什么是"使用"而不是"实现": 首先,专业人士提供的算法比我们自己写的算法无论是效率还是正确率上都要高。 其次,对于数学不好的人来说,为了实现算法而去研究一堆公式是很痛苦的事情。 再次,...
    99+
    2022-06-04
    如何使用 朴素 算法
  • 朴素贝叶斯(Naive Bayes)
            朴素贝叶斯是一个基于概率统计的机器学习算法,作用是用于多分类。         训练集包含已知分类类别的大量样本,每个样本具有n维特征,例如:已知一个人分类为胖或者瘦,有5个特征用于分类,这5个特征分别是体重、身高、年...
    99+
    2023-09-24
    机器学习 人工智能 python
  • 朴素贝叶斯(Naive Bayesian
    简介 Naive Bayesian算法 也叫朴素贝叶斯算法(或者称为傻瓜式贝叶斯分类) 朴素(傻瓜):特征条件独立假设 贝叶斯:基于贝叶斯定理 这个算法确实十分朴素(傻瓜),属于监督学习,它是一个常用于寻找决策面的算法。   基本思...
    99+
    2023-01-30
    朴素 贝叶斯 Bayesian
  • web算法中朴素贝叶斯如何实现文档分类
    本篇内容主要讲解“web算法中朴素贝叶斯如何实现文档分类”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web算法中朴素贝叶斯如何实现文档分类”吧!  作业要求:  实验数据在bayes_data...
    99+
    2023-06-02
  • Java利用朴素贝叶斯分类算法实现信息分类
    目录贝叶斯分类算法 代码实例数据集data.txt代码实现输出结果使用场景贝叶斯分类算法  贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类...
    99+
    2024-04-02
  • Python机器学习应用之朴素贝叶斯篇
    朴素贝叶斯(Naive Bayes,NB):朴素贝叶斯分类算法是学习效率和分类效果较好的分类器之一。朴素贝叶斯算法一般应用在文本分类,垃圾邮件的分类,信用评估,钓鱼网站检测等。 1、...
    99+
    2024-04-02
  • 机器学习:朴素贝叶斯模型算法原理(含实战案例)
    机器学习:朴素贝叶斯模型算法原理 作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍...
    99+
    2023-09-04
    机器学习 人工智能 python 朴素贝叶斯 开发语言
  • Python编程之基于概率论的分类方法:朴素贝叶斯
    概率论啊概率论,差不多忘完了。 基于概率论的分类方法:朴素贝叶斯 1. 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。本章首先介绍贝叶斯分类算法的基础——贝叶斯定理...
    99+
    2022-06-04
    概率论 朴素 方法
  • Python通过朴素贝叶斯和LSTM分别实现新闻文本分类
    目录一、项目背景二、数据处理与分析三、基于机器学习的文本分类–朴素贝叶斯1. 模型介绍2. 代码结构3. 结果分析四、基于深度学习的文本分类–LSTM1. 模型介绍2. 代码结构3....
    99+
    2024-04-02
  • R语言朴素贝叶斯技术怎么使用
    本篇内容主要讲解“R语言朴素贝叶斯技术怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“R语言朴素贝叶斯技术怎么使用”吧!安装package:> install.packag...
    99+
    2023-06-19
  • 如何优化数据库的数据朴素贝叶斯
    要优化数据库的数据朴素贝叶斯,可以考虑以下几点: 数据清洗:确保数据质量高,包括去除重复数据、处理缺失值、处理异常值等。 特征选择:选择合适的特征对模型进行训练,可以使用特征选择技术如方差分析、相关性分析等。 数据标准化:对数据...
    99+
    2024-07-03
    数据库
  • python机器学习朴素贝叶斯算法及模型的选择和调优详解
    目录一、概率知识基础1.概率2.联合概率3.条件概率二、朴素贝叶斯1.朴素贝叶斯计算方式2.拉普拉斯平滑3.朴素贝叶斯API三、朴素贝叶斯算法案例1.案例概述2.数据获取3.数据处理...
    99+
    2024-04-02
  • Python如何通过朴素贝叶斯和LSTM分别实现新闻文本分类
    这篇文章主要介绍Python如何通过朴素贝叶斯和LSTM分别实现新闻文本分类,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数据处理与分析本次大赛提供的材料是由csv格式编写,只需调用python中的pandas库读取...
    99+
    2023-06-22
  • python机器学习中朴素贝叶斯算法及模型选择和调优的示例分析
    这篇文章将为大家详细讲解有关python机器学习中朴素贝叶斯算法及模型选择和调优的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、概率知识基础1.概率概率就是某件事情发生的可能性。2.联合概率包...
    99+
    2023-06-25
  • python实现贝叶斯推断的例子
    目录1. 前言2. 问题描述3. 贝叶斯规则4. Bayes engine: scalar implementation 5. Bayes engine: vec...
    99+
    2024-04-02
  • 机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测
    机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测 作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁...
    99+
    2023-10-06
    机器学习 分类 朴素贝叶斯 python 开发语言
  • Python中的贝叶斯推理的软件包 pystan
    前言PyStan 为 Stan 提供了一个 Python 接口,这是一个使用 No-U-Turn 采样器进行贝叶斯推理的软件包,这是Hamiltonian Monte Carlo 的一种变体。PyStan具有以下依赖项:Python:2.7...
    99+
    2023-06-02
  • Python pomegranate库实现基于贝叶斯网络拼写检查器
    目录概要一、准备数据二、构建贝叶斯网络三、训练模型四、测试模型五、总结概要 贝叶斯网络是一种基于概率的图模型,可用于建立变量之间的条件概率关系。在拼写检查器中,贝叶斯网络可以通过建立...
    99+
    2023-05-17
    Python pomegranate库 贝叶斯网络拼写检查器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作