朴素贝叶斯算法.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《朴素贝叶斯算法.docx》由会员分享,可在线阅读,更多相关《朴素贝叶斯算法.docx(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、4 X,上机报告课程名称: 机器学习理论与实践指导教师:杨威学号20191106078姓名龚永好上机地点信-506专业电子信息工程班级电信1902班时间2022年4月1日上机内容实验一:朴素贝叶斯算法一、目的及要求目的:利用skleam中的朴素贝叶斯算法进行手写字符进行识别。 要求:1 ,导入 sklearn 包;2 .利用朴素贝叶斯算法对手写字符进行识别;3 .对真实拍摄的手写字符图像进行预处理,并进行识别;二、设备(环境)及要求1 .硬件要求:CPU在2.0 GHz以上,内存在4G以上,建议8G。2 .软件要求:Widows7系统及以上系统,Anaconda编译环境。三、内容(-)朴素贝叶
2、斯算法对mnist数据集进行训练; 1、代码:# coding: UTF-8 import numpy as np from os import listdir from sklearn.naive_bayes import GaussianNBIf fill将32x32的二进制图像转换为1x1024向量。Parameters:filename -文件名Returns:returnVect -返回的二进制图像的1x1024向量 h ft ndef img2vector(filename):#创立1x1024零向量return Vect = np.zeros(l, 1024)C:ProgpamD
3、ataAnaconda3python.exe E:/shiyan2/pusubeiyesi.py分类返回结果为4Process finished with exit code 0四、结果分析以及出现问题本次试验,本人主要做了导入sklearn包,利用朴素贝叶斯算法对手写字符进行识别和对真实 拍摄的手写字符图像进行预处理,并进行识别等实验内容,其中,朴素贝叶斯算法对mnist数据集 进行训练的基本步骤是:(1)读取数据集(2)训练模型先验概率,p(cl), p(c2)10.1. 条件概率,p(x|cl), p(x|c2)(3)对测试集进行预测,求准确率实验结束后,本人掌握了朴素贝叶斯算法的基本原
4、理和朴素贝叶斯算法的编程实现方法,能 利用朴素贝叶斯算法解决实际问题,收货颇丰!#翻开文件fr = open(filename)#按行读取for i in range(32):#读一行数据lineStr = fr.readline()#每一行的前32个元素依次添加到returnVect中for j in range(32):returnVect0, 32 * i + j= int(lineStrj)# 返回转换后的1x1024向量return returnVectff“ fl获取训练集 ft n iidef trainingdata():hwLabels = |# 返回trainingDigi
5、ts目录下的文件名trainingFileList = listdir(trainingDigits)# 返回文件夹下文件的个数m = len(trainingFileList)# 初始化训练的Mat矩阵,测试集trainingMat = np.zeros(m, 1024)# 从文件名中解析出训练集的类别 for i in range(m):# 获得文件的名字fileNameStr = trainingFileListfi# 获得分类的数字classNumber = int(fHeNameStr.split(_)O)# 将获得的类别添加到hwLabels中hwLabels.append(cla
6、ssNumber)# 将每一个文件的1x1024数据存储到trainingMat矩阵中trainingMati,: = img2vector(*trainingDigits/%s % (fileNameStr) return trainingMat, hwLabelsdef testdata():testFileList = listdir(,testDigits,)# 错误检测计数errorCount = 0.0# 测试数据的数量mTest = len(testFileList)# 从文件中解析出测试集的类别并进行分类测试for i in range(mTest):# 获得文件的名字 fil
7、eNameStr = testFileListi# 获得分类的数字classNumber = int(fileNameStr.spIit(_)O)# 获得测试集的1x1024向量,用于训练vectorUnderTest = img2vector(testDigits/%s % (fileNameStr) return vectorUnderTestff If II手写数字分类测试f! Ifdef handwritingClassTest():#测试集的Labels hwLabels =# 返回trainingDigits目录下的文件名 trainingFileList = listdirCtr
8、ainingDigits*)# 返回文件夹下文件的个数m = len(trainingFileList)# 初始化训练的Mat矩阵,测试集 trainingMat = np.zeros(m, 1024)# 从文件名中解析出训练集的类别 for i in range(m):# 获得文件的名字fileNameStr = trainingFileListi# 获得分类的数字classNumber = int( fileNameStr. split(_)O)# 将获得的类别添加到hwLabels中 hwLabels.append(classNumber)# 将每一个文件的1x1024数据存储到trai
9、ningMat矩阵中 trainingMati,: = img2vector(,trainingDigits/%s, % (fileNameStr)elf 二 GaussianNB() # 构造 clf.fit(trainingMat, hwLabels) # 拟合#返回testDigits目录下的文件列表 testFileList = listdir(testDigits)#错误检测计数 errorCount = 0.0 #测试数据的数量 mTest = len(testFileList)#从文件中解析出测试集的类别并进行分类测试 for i in range(mTest):# 获得文件的名
10、字fileNameStr = testFileListi# 获得分类的数字classNumber = in t(fileN ameStr. split( *_*) 0)# 获得测试集的1x1024向量,用于训练vectorUnderTest = img2vector(*testDigits/%s % (fileNameStr)# 获得预测结果classifierResult = classifyO(vectorUnderTest, trainingMat, hwLabels, 3)classifierResult = clf.predict(vectorUnderTest)print(分类返回
11、结果为dt 真实结果为d % (classifierResult, classNumber)if (classifierResult != classNumber):errorCount += 1.0print(总共错了%d 个数据n 错误率为吃 % (errorCount, errorCount / mTest * 100)handwritingClassTest() 2、运用朴素贝叶斯对训练集进行识别分类返回结果为8 分类返回结果为8 分类返回结果为3 分类返回结果为8 分类返回结果为9 分类返回结果为9 分类返回结果为8 分类返回结果为8 分类返回结果为9 分类返回结果为8 分类返回结果
12、为9 分类返回结果为8 分类返回结果为3 分类返回结果为9 分类返回结果为9 分类返回结果为9 分类返回结果为8 分类返回结果为3 分类返回结果为9 分类返回结果为8真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9真实结果为9总共错了 252个数据错误率为26.638478%Process finished with exit code 63、书写数字图片2,8孑6536 I。1 -srt(n Min mnoi ac
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 朴素 贝叶斯 算法
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内