首页 > 编程语言 >朴素贝叶斯分类 -python

朴素贝叶斯分类 -python

时间:2023-09-08 23:06:26浏览次数:45  
标签:tmp python tag cla 贝叶斯 浊响 num 硬滑 朴素

算法思想——基于概率的预测

贝叶斯决策论是概率框架下实施决策的基本方法。对分类任务来说,在所有相关概率都已知的情况下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的标记类别。

理论基础

贝叶斯定理

这个定理解决了现实生活中经常遇到的问题:已知某条件概率,如何得到两个时间交换后的概率,也就是已知 P(B∣A) 的情况下如何求得 P(B∣A)

条件概率 P(B∣A):事件 B 已经发生的情况下,事件 A 发生的概率。

基本求解公式为:

P(A∣B) =P(AB)/P(B)

贝叶斯定理之所以有用,是因为在我们生活中经常遇到这种情况:

我们很容易得到 P(A∣B), P(B∣A)则很难直接得出,但我们更关心 P(B∣A) ,贝叶斯定理则为我们打通从 P(A∣B)获得 P(B∣A)的道路。

贝叶斯定理: P(B∣A) = P(A|B)P(B)/P(A)


先验概率:是指根据以往经验和分析得到的概率.

后验概率:事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小

实现代码

import math
import random
cla_all_num = 0
cla_num = {}
cla_tag_num = {}
landa = 0.6# 拉普拉斯修正值
def train(taglist, cla):  # 训练,每次插入一条数据
		# 插入分类
		global cla_all_num
		cla_all_num += 1
		if cla in cla_num:  # 是否已存在该分类
			cla_num[cla] += 1
		else:
			cla_num[cla] = 1
		if cla not in cla_tag_num:
			cla_tag_num[cla] = {}  # 创建每个分类的标签字典
		# 插入标签
		tmp_tags = cla_tag_num[cla]  # 浅拷贝,用作别名
		for tag in taglist:
			if tag in tmp_tags:
				tmp_tags[tag] += 1
			else:
				tmp_tags[tag] = 1

def P_C(cla):  # 计算分类 cla 的先验概率
	return cla_num[cla] / cla_all_num
	
def P_W_C( tag, cla):  # 计算分类 cla 中标签 tag 的后验概率
		tmp_tags = cla_tag_num[cla]  # 浅拷贝,用作别名
		if tag not in cla_tag_num[cla]:
			return landa / (cla_num[cla] + len(tmp_tags) * landa)  # 拉普拉斯修正
		return (tmp_tags[tag] + landa) / (cla_num[cla] + len(tmp_tags) * landa)

def test( test_tags):  # 测试
		res = '' #结果
		res_P = None
		for cla in cla_num.keys():
			log_P_W_C = 0
			for tag in test_tags:
				log_P_W_C += math.log(P_W_C(tag, cla),2)
			tmp_P = log_P_W_C + math.log(P_C(cla),2)  # P(w|Ci) * P(Ci)
			if res_P is None:
				res = cla
				res_P = tmp_P
			if tmp_P > res_P:
				res = cla
				res_P = tmp_P
		return res,res_P
def create_MarriageData():
		p0=['青绿','乌黑','浅白']
		p1=['蜷缩','稍蜷','硬挺']
		p2=['浊响','沉闷','清脆']
		p3=['清晰','稍糊','模糊']
		p4=['凹陷','稍凹','平坦']
		p5=['硬滑','软粘']
		dataset = []#创建样本
		dataset.append(random.choice(p0))#每个样本随机选择长相
		dataset.append(random.choice(p1))#同理,随机选择性格
		dataset.append(random.choice(p2))#同理
		dataset.append(random.choice(p3))#同理
		dataset.append(random.choice(p4))#同理
		dataset.append(random.choice(p5))#同理
		print("随机产生西瓜为:",dataset)
		return dataset

def beyesi():
	# 训练模型
	data=[      ['青绿','蜷缩','浊响','清晰','凹陷','硬滑','是'],
                ['乌黑','蜷缩','沉闷','清晰','凹陷','硬滑','是'],
                ['乌黑','蜷缩','浊响','清晰','凹陷','硬滑','是'],
                ['青绿','蜷缩','沉闷','清晰','凹陷','硬滑','是'],
                ['浅白','蜷缩','浊响','清晰','凹陷','硬滑','是'],
                ['青绿','稍蜷','浊响','清晰','稍凹','软粘','是'],
                ['乌黑','稍蜷','浊响','稍糊','稍凹','软粘','是'],
                ['乌黑','稍蜷','浊响','清晰','稍凹','硬滑','是'],
                ['乌黑','稍蜷','沉闷','稍糊','稍凹','硬滑','否'],
                ['青绿','硬挺','清脆','清晰','平坦','软粘','否'],
                ['浅白','硬挺','清脆','模糊','平坦','硬滑','否'],
                ['浅白','蜷缩','浊响','模糊','平坦','软粘','否'],
                ['浅白','稍蜷','浊响','稍糊','凹陷','硬滑','否'],
                ['浅白','稍蜷','沉闷','稍糊','凹陷','硬滑','否'],
                ['乌黑','稍蜷','沉闷','稍糊','稍凹','软粘','否'],
                ['浅白','蜷缩','浊响','模糊','平坦','硬滑','否'],
                ['青绿','蜷缩','沉闷','稍糊','稍凹','硬滑','否']]
	for x in data:
	    train(x[0:6],x[-1])
# 测试模型
	#for x in data:
	#    print('测试结果:', test(x[0:6]))
if __name__ == '__main__':
	  beyesi() #创建朴素贝叶斯分类
	  #单例测试模型
	  testcs=['青绿','蜷缩','浊响','清晰','凹陷','硬滑']
	  print("单例测试为:",testcs)
	  print('测试结果:', test(testcs))
	  #随机测试模型
	  for i in range(1,20):
	     print('测试结果:', test(create_MarriageData()))

朴素贝叶斯分类 -python_条件概率

标签:tmp,python,tag,cla,贝叶斯,浊响,num,硬滑,朴素
From: https://blog.51cto.com/u_16250667/7413230

相关文章

  • 重磅!python自动化办公,终于支持 Mac下载了
    大家好,这里是程序员晚枫,小红薯/小破站也叫这个名。给小白的《50讲Python自动化办公》,课程一直在更新中,昨晚12点多,有朋友在课程群里问能不能支持Mac?今天给大家分享一个好消息:python-office终于支持mac下载了。下载命令先给大家说一下下载命令,然后再说注意事项。不论你的电脑上......
  • python编写营销分配测算工具模型
       销售工作中经常遇到销售业绩考核和销售营销收入分配的问题,现用python编写一个营销分配测算工具模型,供python开发者设计参考。直接上代码#encoding=utf-8#Time:2023/09/0818:36#Salem.py营销测算工具#Author:HiFineimporttkinterastkfromtkinterimp......
  • 完美解决Python词云库wordcloud不显示中文问题
    你的Python词云库wordcloud显示的都是方框吗?别担心,我有一个妙招让你的中文词云变得美观又清晰!背景:wordcloud是一个基于python的词云生成库,它可以让你用简单的代码创建出各种形状和颜色的词云图像wordcloudgithub地址:https://github.com/amueller/word_cloudwordcloud\(\color......
  • 用现代C++写一个python的简易型list
    std::variant介绍:en.cppreference.com/w/cpp/utility/variant  通过泛型模板(仅提供了int,double,string三种类型的存储),实现了append,pop,front,back,size等方法,并且通过重载运算符实现了对负数索引的访问。#include<iostream>#include<vector>#include<variant>......
  • appium+python安装配置及代码测试完整流程
    1.appium安装及环境配置2.模拟器安装或者直接连接真机也可以3.手机各配置参数获取platformName'、'platformVersion'、appActivity、deviceName、webdriver.Remote 4.代码运行测试,启动手机应用5.进阶版,代码为POM模式......
  • Python初步了解装饰器
    Python初步了解装饰器装饰器的概念装饰器的简单使用装饰器的进阶装饰器的练习装饰器的固定模块装饰器的语法糖装饰器的概念装饰器它不是一个新的知识点,它是有之前我们学习的名称空间、函数嵌套、闭包函数等知识点汇总而来器:工具装饰:为其他事物添加功能装饰器:不修该装......
  • Alembic:Python数据库迁移工具
    Alembic是一款轻量型的数据库迁移工具,它与SQLAlchemy一起共同为Python提供数据库管理与迁移支持。Alembic的应用Alembic使用SQLAlchemy作为数据库引擎,为关系型数据提供创建、管理、更改和调用的管理脚本,协助开发和运维人员在系统上线后对数据库进行在线管理。同任何P......
  • appium+python安装后代码测试
     fromappiumimportwebdriver#模拟器/真机已经被电脑识别到(adbdevices)#字典#1、设置终端参数项desired_caps={"platformName":"Android","platformVersion":"6.1.1","appPackage":"com.ss.android.article.n......
  • python3之os库和pathlib库
    #os标准库importos#当前Python运行所在的环境posix,nt,javaprint(os.name)#nt#os.getcwd()获取当前工作路径print(os.getcwd())dir="./files/foo/bar/bar2"file=os.path.join(dir,"c.txt")#os.path.join()可以将多个传入路径组合为一个路径print(file)......
  • python3类实例和错误处理
    类实例classCar(object):name="Car"def__init__(self,name):self.name=name#类方法通过@classmethod装饰器实现,只能访问类变量,不能访问实例变量;通过cls参数传递当前类对象,不需要实例化。@classmethoddefrun(cls,speed):......