朴素贝叶斯分类-西瓜分类 python

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

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

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

理论基础

贝叶斯定理

这个定理解决了现实生活中经常遇到的问题:已知某条件概率,如何得到两个时间交换后的概率,也就是已知 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)

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

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

实现代码

importmathimportrandomcla_all_num=0cla_num= {}
cla_tag_num= {}
landa=0.6# 拉普拉斯修正值deftrain(taglist, cla):  # 训练,每次插入一条数据# 插入分类globalcla_all_numcla_all_num+=1ifclaincla_num:  # 是否已存在该分类cla_num[cla] +=1else:
cla_num[cla] =1ifclanotincla_tag_num:
cla_tag_num[cla] = {}  # 创建每个分类的标签字典# 插入标签tmp_tags=cla_tag_num[cla]  # 浅拷贝,用作别名fortagintaglist:
iftagintmp_tags:
tmp_tags[tag] +=1else:
tmp_tags[tag] =1defP_C(cla):  # 计算分类 cla 的先验概率returncla_num[cla] /cla_all_numdefP_W_C( tag, cla):  # 计算分类 cla 中标签 tag 的后验概率tmp_tags=cla_tag_num[cla]  # 浅拷贝,用作别名iftagnotincla_tag_num[cla]:
returnlanda/ (cla_num[cla] +len(tmp_tags) *landa)  # 拉普拉斯修正return (tmp_tags[tag] +landa) / (cla_num[cla] +len(tmp_tags) *landa)
deftest( test_tags):  # 测试res=''#结果res_P=Noneforclaincla_num.keys():
log_P_W_C=0fortagintest_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)ifres_PisNone:
res=clares_P=tmp_Piftmp_P>res_P:
res=clares_P=tmp_Preturnres,res_Pdefcreate_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)
returndatasetdefbeyesi():
# 训练模型data=[      ['青绿','蜷缩','浊响','清晰','凹陷','硬滑','是'],
                ['乌黑','蜷缩','沉闷','清晰','凹陷','硬滑','是'],
                ['乌黑','蜷缩','浊响','清晰','凹陷','硬滑','是'],
                ['青绿','蜷缩','沉闷','清晰','凹陷','硬滑','是'],
                ['浅白','蜷缩','浊响','清晰','凹陷','硬滑','是'],
                ['青绿','稍蜷','浊响','清晰','稍凹','软粘','是'],
                ['乌黑','稍蜷','浊响','稍糊','稍凹','软粘','是'],
                ['乌黑','稍蜷','浊响','清晰','稍凹','硬滑','是'],
                ['乌黑','稍蜷','沉闷','稍糊','稍凹','硬滑','否'],
                ['青绿','硬挺','清脆','清晰','平坦','软粘','否'],
                ['浅白','硬挺','清脆','模糊','平坦','硬滑','否'],
                ['浅白','蜷缩','浊响','模糊','平坦','软粘','否'],
                ['浅白','稍蜷','浊响','稍糊','凹陷','硬滑','否'],
                ['浅白','稍蜷','沉闷','稍糊','凹陷','硬滑','否'],
                ['乌黑','稍蜷','沉闷','稍糊','稍凹','软粘','否'],
                ['浅白','蜷缩','浊响','模糊','平坦','硬滑','否'],
                ['青绿','蜷缩','沉闷','稍糊','稍凹','硬滑','否']]
forxindata:
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))
#随机测试模型foriinrange(1,20):
print('测试结果:', test(create_MarriageData()))

结果

网络异常,图片无法展示
|

目录
相关文章
|
3月前
|
Python
Python办公自动化:xlwings对Excel进行分类汇总
Python办公自动化:xlwings对Excel进行分类汇总
96 1
|
4月前
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
90 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
|
28天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
53 3
|
3月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
101 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
2月前
|
安全 Python
Python脚本实现IP按段分类
【10月更文挑战第04天】
29 7
|
2月前
|
存储 Python 容器
Python 对象有哪几种,我们可以从哪些角度进行分类呢?
Python 对象有哪几种,我们可以从哪些角度进行分类呢?
17 1
|
3月前
|
机器学习/深度学习 算法 数据挖掘
决策树算法大揭秘:Python让你秒懂分支逻辑,精准分类不再难
【9月更文挑战第12天】决策树算法作为机器学习领域的一颗明珠,凭借其直观易懂和强大的解释能力,在分类与回归任务中表现出色。相比传统统计方法,决策树通过简单的分支逻辑实现了数据的精准分类。本文将借助Python和scikit-learn库,以鸢尾花数据集为例,展示如何使用决策树进行分类,并探讨其优势与局限。通过构建一系列条件判断,决策树不仅模拟了人类决策过程,还确保了结果的可追溯性和可解释性。无论您是新手还是专家,都能轻松上手,享受机器学习的乐趣。
51 9
|
4月前
|
数据采集 机器学习/深度学习 算法
【python】python客户信息审计风险决策树算法分类预测(源码+数据集+论文)【独一无二】
【python】python客户信息审计风险决策树算法分类预测(源码+数据集+论文)【独一无二】
|
4月前
|
机器学习/深度学习 数据挖掘 Python
简单几步,教你使用scikit-learn做分类和回归预测
简单几步,教你使用scikit-learn做分类和回归预测
|
4月前
|
机器学习/深度学习 算法 Python
python与朴素贝叶斯算法(附示例和代码)
朴素贝叶斯算法以其高效性和优良的分类性能,成为文本处理领域一项受欢迎的方法。提供的代码示例证明了其在Python语言中的易用性和实用性。尽管算法假设了特征之间的独立性,但在实际应用中,它仍然能够提供强大的分类能力。通过调整参数和优化模型,你可以进一步提升朴素贝叶斯分类器的性能。
127 0