贝叶斯分类器
来源:互联网 发布:花千骨手游刷勾玉软件 编辑:程序博客网 时间:2024/05/03 11:48
贝叶斯分类器
以下代码是周志华《机器学习》P151关于朴素贝叶斯分类器的实现:
import numpy as npDataSet = [['青绿','蜷缩','浊响','清晰','凹陷','硬滑',0.697,0.460,'好瓜'], ['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑',0.774,0.376, '好瓜'], ['乌黑', '蜷缩', '浊响', '清晰', '凹陷', '硬滑',0.634,0.264, '好瓜'], ['青绿','蜷缩','沉闷','清晰','凹陷','硬滑',0.608,0.318,'好瓜'], ['浅白', '蜷缩', '浊响', '清晰', '凹陷', '硬滑',0.556,0.215, '好瓜'], ['青绿', '稍蜷', '浊响', '清晰', '稍凹', '软粘',0.403,0.237,'好瓜'], ['乌黑', '稍蜷', '浊响', '稍糊', '稍凹', '软粘',0.481,0.149,'好瓜'], ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '硬滑',0.437,0.211,'好瓜'], ['乌黑', '稍蜷', '沉闷', '稍糊', '稍凹', '硬滑',0.666,0.091, '坏瓜'], ['青绿', '硬挺', '清脆', '清晰', '平坦', '软粘',0.243,0.267, '坏瓜'], ['浅白', '硬挺', '清脆', '模糊', '平坦', '硬滑', 0.245,0.057,'坏瓜'], ['浅白', '蜷缩', '浊响', '模糊', '平坦', '软粘',0.343,0.099, '坏瓜'], ['青绿', '稍蜷', '浊响', '稍糊', '凹陷', '硬滑',0.639,0.161, '坏瓜'], ['浅白', '稍蜷', '沉闷', '稍糊', '凹陷', '硬滑',0.657,0.198, '坏瓜'], ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '软粘',0.360,0.370, '坏瓜'], ['浅白', '蜷缩', '浊响', '模糊', '平坦', '硬滑',0.593,0.042, '坏瓜'], ['青绿', '蜷缩', '沉闷', '稍糊', '稍凹', '硬滑', 0.719,0.103,'坏瓜']]AttrSet=['色泽','根蒂','敲声','纹理','脐部','触感','密度','含糖率','类别']TestSet=['青绿','蜷缩','浊响', '清晰','凹陷', '硬滑',0.697,0.460]LabelList=[]for Sam in DataSet: if Sam[-1] in LabelList: continue LabelList.extend([Sam[-1]])LabelNum=len(LabelList)# 不同类别的先验概率ProLabel=np.zeros(LabelNum)for Sam in DataSet: for m in range(LabelNum): if Sam[-1]==LabelList[m]: ProLabel[m] +=1.0/len(DataSet)# 在各属性上,不同分类结果条件下,测试样本属性值的条件概率/密度for m in range(len(TestSet)): # 每个属性 if type(TestSet[m])==type('a'): # 不同的分类结果条件下的概率 for n in range(LabelNum): # 遍历训练集 Count = 0 Total = 0 for Sam in DataSet: if Sam[-1]==LabelList[n]: Total +=1.0 if Sam[m]==TestSet[m]: Count +=1.0 # 计算概率 ProLabel[n] *= Count/Total else: # 不同分类结果条件下的概率密度(假定服从高斯分布) for n in range(LabelNum): # 求均值 Total = 0 U =0 for Sam in DataSet: if Sam[-1]==LabelList[n]: Total +=1.0 U += Sam[m] U /=Total # 求方差 Segma =0 for Sam in DataSet: if Sam[-1]==LabelList[n]: Segma += (Sam[m]-U)**2 Segma /=Total # 计算概率密度 ProLabel[n] *= 1.0/np.sqrt(2*np.pi)/np.sqrt(Segma)*np.exp(-(TestSet[m]-U)**2/2/Segma)for m in range(LabelNum): print('\n','样本在类别',LabelList[m],'上的联合概率为:',ProLabel[m],'\n')ProLabel=list(ProLabel)print('\n','判断样本的类别是',LabelList[ProLabel.index(max(ProLabel))],'\n')
阅读全文
0 0
- 贝叶斯分类器--文本分类应用
- 文本分类基于朴素贝叶斯分类器
- 分类模型与算法--贝叶斯分类器
- 文本分类-朴素贝叶斯分类器
- 贝叶斯网络分类器
- 贝叶斯分类器
- 贝叶斯分类器
- 朴素贝叶斯分类器
- 朴素贝叶斯分类器
- 贝叶斯分类器-基础知识
- 贝叶斯分类器--概念
- 贝叶斯分类器
- 朴素贝叶斯分类器
- 贝叶斯分类器-基础知识
- 贝叶斯最优分类器
- 贝叶斯分类器
- 贝叶斯分类器
- 朴素贝叶斯分类器
- JPA简单实例
- 【C语言数据结构】循环单链表
- 很好用的移动端左右滑动导航特效
- 时间戳转换日期及xx分钟/小时/天前
- 贝叶斯线性回归(Bayesian Linear Regression)
- 贝叶斯分类器
- 骨骼动画详解
- JqGrid之指定单元格可编辑-yellowcong
- logcat查看网络请求相关log
- Android 字体库的使用。引入外部字体
- cocos2dx之 渐变层
- 聊聊HTTPS和SSL/TLS协议
- angular获取手机验证码问题
- 1061. 判断题(15)