朴素贝叶斯分类-西瓜分类 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()))

结果

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

目录
相关文章
|
14天前
|
机器学习/深度学习 计算机视觉 异构计算
基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类(2)
基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类
基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类(2)
|
1月前
|
机器学习/深度学习 数据采集 人工智能
使用Python和Scikit-learn实现机器学习分类任务
使用Python和Scikit-learn实现机器学习分类任务
42 1
|
14天前
|
机器学习/深度学习 计算机视觉 异构计算
基于YOLOv8深度学习的橙子病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类(2)
基于YOLOv8深度学习的橙子病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类
|
14天前
|
机器学习/深度学习 监控 Python
基于YOLOv8深度学习的橙子病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类(1)
基于YOLOv8深度学习的橙子病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类
|
14天前
|
机器学习/深度学习 监控 搜索推荐
基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类(1)
基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类
|
18天前
|
数据采集 SQL 算法
LeetCode题目75:颜色分类【python】
LeetCode题目75:颜色分类【python】
|
1月前
|
机器学习/深度学习 数据采集 数据可视化
数据分享|python分类预测职员离职:逻辑回归、梯度提升、随机森林、XGB、CatBoost、LGBM交叉验证可视化
数据分享|python分类预测职员离职:逻辑回归、梯度提升、随机森林、XGB、CatBoost、LGBM交叉验证可视化
|
1月前
|
机器学习/深度学习 算法 数据可视化
Python用KNN(K-近邻)回归、分类、异常值检测预测房价、最优K值选取、误差评估可视化
Python用KNN(K-近邻)回归、分类、异常值检测预测房价、最优K值选取、误差评估可视化
|
1月前
|
机器学习/深度学习 算法 Python
【Python机器学习专栏】逻辑回归在分类问题中的应用
【4月更文挑战第30天】逻辑回归是用于二分类的统计方法,通过Sigmoid函数将线性输出映射到[0,1],以预测概率。优点包括易于理解、不需要线性关系、鲁棒且能输出概率。缺点是假设观测独立、易过拟合及需大样本量。在Python中,可使用`sklearn`的`LogisticRegression`实现模型。尽管有局限,但在适用场景下,逻辑回归是强大且有价值的分类工具。
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化
Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化

热门文章

最新文章