模式识别第一个作业,我虽然有师兄师姐们的答案,但是我不想继承了,想自己写,调动自己的学习热情!
对自己的学习负责!
作业如下:


十字交叉验证的原理是将数据集分为10组,轮流选择其中一组作为测试组,其余作为训练组,然后利用贝叶斯分类器计算决策正确的概率
贝叶斯公式

贝叶斯优化分类器
1
其中A为条件/状态,di为决策也可表示为:

如1-14条数据,选择第一组{1,11}作为测试组,其余作为训练组,

注:其中的di为决策Yes/No,A为状态如Sunny,Hot等,看如下例子,计算出决策dmp=“No”

现在我们明白了原理,那么就进行解决问题了:
一,准备数据traindata.txt 如图:

二,编写程序:

def getdata():'''获取所有事件信息'''data = []f = open('traindata.txt', 'r')lines = f.readlines()for line in lines:li = line.split(' ')data.append(li)f.close()return datadef get_tests_info_save_traindata(testlabel):'''testlabel为测试标签,[1]/[1,11]获取测试标签信息和除测试外的剩余训练集:testlabel_s,data'''testlabel_s=[]data = getdata()if testlabel!=None:for tst in testlabel:for d in data:# 条件if str(tst) == d[0]:                     #判断是否为测试标签labb= (d[1], d[2], d[3], d[4],d[5])  #记录测试标签的状态testlabel_s.append(labb)data.remove(d)                       #将测试项信息从总数据集中删除else:passreturn data,testlabel_selse:passdef get_number(testlabel=None):'''testlabel为测试标签,[1]/[1,11]获取测试项的结果(No,Yes):resulist; 统计除测试项外剩余事件的No,Yes数量:noyes以及统计在No,Yes条件下的各状态的数量:nolist,yeslist'''if testlabel==None:print('')else:data, telabels = get_tests_info_save_traindata(testlabel)nolist, yeslist,resulist,nolabel, yeslabel=[],[],[],[],[]for tel in telabels:a1, a2, a3, a4,a5= tel[0], tel[1], tel[2], tel[3], tel[4]   # 测试标签的天气情况标签no,yes,a1nonum,a2nonum,a3nonum,a4nonum,a1yesnum,a2yesnum,a3yesnum,a4yesnum =0,0, 0, 0, 0, 0,0, 0, 0, 0for d in data:# 获取No,Yes的数量dd = d[-1].replace('\n', '')if dd == 'No':no += 1if d[1]==a1:a1nonum+=1if d[2]==a2:a2nonum += 1if d[3]==a3:a3nonum+=1if d[4]==a4:a4nonum += 1#No条件下的各状态的数量nolabel=(a1nonum, a2nonum, a3nonum, a4nonum)if dd == 'Yes':yes += 1if d[1]==a1:a1yesnum+=1if d[2]==a2:a2yesnum += 1if d[3]==a3:a3yesnum+=1if d[4]==a4:a4yesnum += 1#Yes条件下的各状态的数量yeslabel=(a1yesnum, a2yesnum, a3yesnum, a4yesnum)resulist.append(a5)                #记录测试标签的决策noyes=(no,yes)                     #No/Yes的数量noo=(nolabel)                      #No条件下的各状态的数量yess=(yeslabel)                    #Yes条件下的各状态的数量nolist.append(noo)yeslist.append(yess)return resulist,noyes,nolist,yeslistdef getresult(teslabe):'''根据参数计算决策正确的概率'''result=''     #初设决策i=0           #初设决策正确的概率res4, noyes4, no4, yes4 = get_number(teslabe)#res4, noyes4, no4, yes4=['No\n', 'Yes\n'] (4, 8) [(2, 1, 3, 1), (2, 2, 1, 3)] [(1, 2, 3, 6), (1, 3, 5, 2)]no_num = noyes4[0]yes_num = noyes4[1]p_no = no_num / (no_num + yes_num)             #若为两个测试项,P(No)与P(Yes)概率也不变p_yes = yes_num/(no_num + yes_num)for t in range(len(no4)):                      #根据测试项数目循环计算概率print('结果:',res4[t].replace('\n',''))#计算Bel(No),Bel(Yes)的概率belno = p_no * (no4[t][0]/no_num)*(no4[t][1]/no_num)*(no4[t][2]/no_num)*(no4[t][3]/no_num)belyes = p_yes * (yes4[t][0]/yes_num)*(yes4[t][1]/yes_num)*(yes4[t][2]/yes_num)*(yes4[t][3]/yes_num)print('No概率:',belno)print('Yes概率:', belyes)#根据Bel(No),Bel(Yes)做出决策if belno > belyes:result='No'else:result='Yes'print('决策:',result)#判断决策是否正确if res4[t].replace('\n','')==result:   #若本身决策和计算所得决策一样,计算概率if len(no4)==2:  #若该组内有两个测试项,则各占50%比率,每次决策正确则概率增加50%i += 0.5else:            #若该组内有一个测试项,则占100%比率,决策正确则概率增加100%i += 1.0else:                #若决策错误,则概率增加为0i+=0print('正确率:',i)print('\n')return i                 #返回决策的正确率def get_possiblities(gro):'''获取概率集'''possibilities = []for i in gro: #每一组轮流作为测试标签#将分组转化为列表[5]/[2,12]tests = []tests.append(i[0])tests.append(i[-1])tests = list(set(tests))r = getresult(tests)    #获取概率集possibilities.append(r)return possibilities
gro = [(5,), (1, 11), (2, 12), (3, 13), (4, 14), (6,), (7,), (8,), (9,), (10,)]
posbs=get_possiblities(gro)
print('各组作为测试项,决策正确的概率分别为:',posbs)
k=0
for h in posbs:k=k+h
#计算平均概率
avepos=k/len(posbs)
print('平均概率为:',avepos)

下面是运行结果:

花费一天时间,终于把程序编写完成了!结果很理想!有不足之处,还请社友、大神们多多指导!感谢!

潇洒郎:Ten-fold-cross validation- Naïve Bayes Classifier 十字交叉验证-贝叶斯分类器 Python实现相关推荐

  1. 机器学习(十一)-Naïve Bayes Classifier朴素贝叶斯分类器及Python实现

    原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080 本次代码的环境: 运行平台: Windows Python版本: ...

  2. 机器学习代码实战——K折交叉验证(K Fold Cross Validation)

    文章目录 1.实验目的 2.导入数据和必要模块 3.比较不同模型预测准确率 3.1.逻辑回归 3.2.决策树 3.3.支持向量机 3.4.随机森林 1.实验目的 使用sklearn库中的鸢尾花数据集, ...

  3. 交叉验证(cross validation)是什么?K折交叉验证(k-fold crossValidation)是什么?

    交叉验证(cross validation)是什么?K折交叉验证(k-fold crossValidation)是什么? 交叉验证(cross validation)是什么?  交叉验证是一种模型的验 ...

  4. K-Fold Cross Validation

    2019独角兽企业重金招聘Python工程师标准>>> 1: K Fold Cross Validation In the previous mission, we learned ...

  5. matlab 交叉验证 代码,交叉验证(Cross Validation)方法思想简介

    本帖最后由 azure_sky 于 2014-1-17 00:30 编辑 2).K-fold Cross Validation(记为K-CV) 将原始数据分成K组(一般是均分),将每个子集数据分别做一 ...

  6. 交叉验证 cross validation 与 K-fold Cross Validation K折叠验证

    交叉验证,cross validation是机器学习中非常常见的验证模型鲁棒性的方法.其最主要原理是将数据集的一部分分离出来作为验证集,剩余的用于模型的训练,称为训练集.模型通过训练集来最优化其内部参 ...

  7. 深度学习:交叉验证(Cross Validation)

    首先,交叉验证的目的是为了让被评估的模型达到最优的泛化性能,找到使得模型泛化性能最优的超参值.在全部训练集上重新训练模型,并使用独立测试集对模型性能做出最终评价. 目前在一些论文里倒是没有特别强调这样 ...

  8. 交叉验证(Cross Validation)最详解

    1.OverFitting 在模型训练过程中,过拟合overfitting是非常常见的现象.所谓的overfitting,就是在训练集上表现很好,但是测试集上表现很差.为了减少过拟合,提高模型的泛化能 ...

  9. 十折交叉验证10-fold cross validation, 数据集划分 训练集 验证集 测试集

    机器学习 数据挖掘 数据集划分 训练集 验证集 测试集 Q:如何将数据集划分为测试数据集和训练数据集? A:three ways: 1.像sklearn一样,提供一个将数据集切分成训练集和测试集的函数 ...

  10. R语言构建xgboost模型:交叉验证(cross validation)训练xgboost模型,配置自定义的损失函数评估函数并使用交叉验证训练xgboost模型

    R语言构建xgboost模型:交叉验证(cross validation)训练xgboost模型,配置自定义的损失函数(loss function).评估函数(evaluation function) ...

最新文章

  1. ActionDescriptor 的认识
  2. intellij haskell 插件使用分享
  3. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 同时注入普通方法、静态方法、构造方法 )
  4. 【ABAP增强】基于函数的出口CMOD
  5. Shutdown SpringBoot App
  6. .NET Core开发实战(第27课:定义Entity:区分领域模型的内在逻辑和外在行为)--学习笔记...
  7. php opcache 详解
  8. 动态规划求解0-1背包问题
  9. 来电语音播报软件下载apk_消息语音播报app下载-消息语音播报安卓版 v1.0.1 - 安下载...
  10. mysql 验证码过期时间_简单的行为控制管理方法,自动登录,session定时验证码过期...
  11. PHP仿百度实现弹窗登录效果,js仿百度登录页实现拖动窗口效果
  12. sparkstreaming自定义kafka
  13. 有赞 WEB-UI 自动化实践
  14. 二进制与十进制的转换
  15. python鸭制作类代码_python之类的多态(鸭子类型 )、封装和内置函数property
  16. win10专业版激活(cmd方式)
  17. 网页设计的可用性问题
  18. 企业版高德地图开发者账号审请流程
  19. 技术美术知识学习_04:PBR的个人理解
  20. python压缩_Python札记 -- 文件压缩

热门文章

  1. 苹果开发那些事儿-D-U-N-S 号申请
  2. 银行对公业务和对私业务
  3. python click模块参数处理详解
  4. 求职 | 百度笔试题
  5. 小度wifi在window server2008R2系统下创建不了
  6. Proxmox VE 配置 朵拉云 桌面虚拟化
  7. 配置ST-GCN体会
  8. php免费利用飞信发送验证码,PHP 使用飞信API发送免费短信示例
  9. win10怎么一键释放运行内存
  10. 神经网络模型(.pth)能做些什么(使用心得)