• 大小: 701KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-25
  • 语言: Python
  • 标签: python  

资源简介

手写体数字识别原始数据,0~9数字,32*32,贝叶斯代码实现手写体识别和大致出错率计算,可用于python学习实践。 github免费下载:https://github.com/HeCCXX/CSDNDownloading/raw/main/%E6%89%8B%E5%86%99%E4%BD%93%E6%95%B0%E5%AD%97%E8%AF%86%E5%88%AB%E6%95%B0%E6%8D%AE%E5%92%8C%E8%B4%9D%E5%8F%B6%E6%96%AF%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0.zip

资源截图

代码片段和文件信息

import numpy as npy
import os
#P(B|A)=P(A|B)*P(A)/P(B)
class Bayes:
    def __init__(self):
        self.length=-1
        self.labelrate=dict()
        self.vectorrate=dict()
    def fit(selfdataset:listlabels:list):
        if len(dataset)!=len(labels):
            raise ValueError(“输入测试数组和类别数组长度不一致“)
        self.length=len(dataset[0])#训练数据特征值的长度
        labelsnum=len(labels) #类别的数量
        norlabels=set(labels) #不重复类别的数量
        for item in norlabels:
            self.labelrate[item]=labels.count(item)/labelsnum #求当前类别占总类别的比例
        for vectorlabel in zip(datasetlabels):
            if label not in self.vectorrate:
                self.vectorrate[label]=[]
            self.vectorrate[label].append(vector)
        print(“训练结束“)
        return self
    def btest(selftestdatalabelset):
        if self.length==-1:
            raise ValueError(“未开始训练,先训练“)
        #计算testdata分别为各个类别的概率
        lbDict=dict()
        for thislb in labelset:
            p = 1
            alllabel = self.labelrate[thislb]
            allvector = self.vectorrate[thislb]
            vnum=len(allvector)
            allvector=npy.array(allvector).T
            for index in range(0len(testdata)):
                vector=list(allvector[index])
                p*=vector.count(testdata[index])/vnum
            lbDict[thislb]=p * alllabel
        thislbabel=sorted(lbDictkey=lambda x:lbDict[x]reverse=True)[0]
        return thislbabel
#加载数据
def datatoarray(fname):
    arr=[]
    fh=open(fname)
    for i in range(032):
        thisline=fh.readline()
        for j in range(0  32):
            arr.append(int(thisline[j]))
    return arr
#建立一个函数取出labels
def seplabel(fname):
    filestr=fname.split(“.“)[0]
    label=int(filestr.split(“_“)[0])
    return label
#建立训练数据
def traindata():
    labels=[]
    trainfile=os.listdir(“./traindata“)
    num=len(trainfile)
    trainarr=npy.zeros((num1024))
    for i in range(num):
        thisfname=trainfile[i]
        thislabel=seplabel(thisfname)
        labels.append(thislabel)
        trainarr[i]=datatoarray(“./traindata/“+thisfname)
    return trainarrlabels
bys=Bayes()
#训练数据
train_datalabels=traindata()
train_data=list(train_data)
bys.fit(train_datalabels)

#测试
thisdata=datatoarray(“./testdata/8_90.txt“)
labelsall=[0123456789]

#识别单个手写体数字
# test=bys.btest(thisdatalabelsall)
# print(test)

#识别多个手写体数字(批量处理)
testfile=os.listdir(“./testdata“)
num=len(testfile)
x=0
for i in range(num):
    thisfilename=testfile[i]
    thislabel=seplabel(thisfilename)
    thisdataarr=datatoarray(“./testdata/“+thisfilename)
    label=bys.btest(thisdataarrlabelsall)
    print(“测试数字是:“+str(thislabel)+“识别出来的数字是:“+str(label))
    if label!=thislabel:
        x+=1
        print(“识别出错“)
print(x)
print(“出错率:“+str(x/num))

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        3161  2018-06-06 21:45  bayes_code.py
     目录           0  2018-05-29 16:15  testdata\
     文件        1088  2010-10-07 06:35  testdata\0_0.txt
     文件        1088  2010-10-07 06:35  testdata\0_1.txt
     文件        1088  2010-10-07 06:35  testdata\0_10.txt
     文件        1088  2010-10-07 06:35  testdata\0_11.txt
     文件        1088  2010-10-07 06:35  testdata\0_12.txt
     文件        1088  2010-10-07 06:35  testdata\0_13.txt
     文件        1088  2010-10-07 06:35  testdata\0_14.txt
     文件        1088  2010-10-07 06:35  testdata\0_15.txt
     文件        1088  2010-10-07 06:35  testdata\0_16.txt
     文件        1088  2010-10-07 06:35  testdata\0_17.txt
     文件        1088  2010-10-07 06:35  testdata\0_18.txt
     文件        1088  2010-10-07 06:35  testdata\0_19.txt
     文件        1088  2010-10-07 06:35  testdata\0_2.txt
     文件        1088  2010-10-07 06:35  testdata\0_20.txt
     文件        1088  2010-10-07 06:35  testdata\0_21.txt
     文件        1088  2010-10-07 06:35  testdata\0_22.txt
     文件        1088  2010-10-07 06:35  testdata\0_23.txt
     文件        1088  2010-10-07 06:35  testdata\0_24.txt
     文件        1088  2010-10-07 06:35  testdata\0_25.txt
     文件        1088  2010-10-07 06:35  testdata\0_26.txt
     文件        1088  2010-10-07 06:35  testdata\0_27.txt
     文件        1088  2010-10-07 06:35  testdata\0_28.txt
     文件        1088  2010-10-07 06:35  testdata\0_29.txt
     文件        1088  2010-10-07 06:35  testdata\0_3.txt
     文件        1088  2010-10-07 06:35  testdata\0_30.txt
     文件        1088  2010-10-07 06:35  testdata\0_31.txt
     文件        1088  2010-10-07 06:35  testdata\0_32.txt
     文件        1088  2010-10-07 06:35  testdata\0_33.txt
     文件        1088  2010-10-07 06:35  testdata\0_34.txt
............此处省略2852个文件信息

评论

共有 条评论