基于python的手写数字识别knn_KNN 手写数字识别

数据集

链接:https://pan.baidu.com/s/1XCyuW3wbvWk8X28jvgS-WQ

提取码:jwsf

代码

from os import listdir

import numpy as np

def img2vector(filename):

vector=np.zeros((1,1024))

fp=open(filename)

for i in range(32):

fstr=fp.readline()

for j in range(32):

vector[0,32*i+j]=int(fstr[j])

return vector

def getmat():

labels=[]

listname=listdir('D:\\qq杂物\\347801313\\FileRecv\\MobileFile\\knn_data\\trainingDigits')

m=len(listname)

mat=[]

for i in range(m):

strname=listname[i].split('.')[0]

str=strname.split('_')[0]

labels.append(int(str))

mat.extend(img2vector('D:\\qq杂物\\347801313\\FileRecv\\MobileFile\\knn_data\\trainingDigits/%s'%listname[i]))

testlist=listdir('D:\\qq杂物\\347801313\\FileRecv\\MobileFile\\knn_data\\testDigits')

n=len(testlist)

rightnum=0

for i in range(n):

strname=testlist[i].split('.')[0]

str=strname.split('_')[0]

out=int(str)

testmat=img2vector('D:\\qq杂物\\347801313\\FileRecv\\MobileFile\\knn_data\\testDigits/%s'%testlist[i])

classfyresult=classfy0(testmat,mat,labels)

print("Classfy is",classfyresult,"Answer is",out)

if classfyresult==out:

rightnum=rightnum+1

print('Right Rate=',rightnum/n)

def classfy0(test,train,labels):

diff1=train-np.tile(test,(np.size(train,0),1))

diff2=diff1**2

distance=diff2.sum(axis=1)**0.5

sorteddis=distance.argsort()

k=3

labellist=np.zeros((1,10))

for i in range(k):

new_label=labels[sorteddis[i]]

labellist[0,new_label]=labellist[0,new_label]+1

finallabel=labellist.argsort()

return finallabel[0,9]

原文链接:https://blog.csdn.net/cj12345657582255/article/details/108978221

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值