KNN实现手写数字识别

准确率有92%

import numpy as np
from sklearn.neighbors import KNeighborsClassifier
# 读取图片
import matplotlib.image as mpimg
# 显示图片
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import pandas as pd

x_train=[]
path=r"E:\study\data\datanumber"

X_train=[]
Y_train=[]
X_test=[]
Y_test=[]

# 加载1到9,每个数字里面的500张图片 小于480训练,大于480测试
# 并把二维数组转为一维数组
for i in range(10):
    for j in range(1,501):
        if j<480:
            X_train.append(mpimg.imread(path+"\\%d\\%d_%d.bmp" %(i,i,j)).reshape(-1))
            Y_train.append(i)
        else:
            X_test.append(mpimg.imread(path+"\\%d\\%d_%d.bmp" %(i,i,j)).reshape(-1))
            Y_test.append(i)
# 转化成numpy类型的数组
X_train=np.array(X_train)
Y_train=np.array(Y_train)
X_test=np.array(X_test)
Y_test=np.array(Y_test)

# print(X_train.shape)
# 随机选择一个图片显示
# n=np.random.randint(1,210)
# num=X_test[n].reshape(28,28)
# plt.imshow(num,cmap="gray")
# plt.show()

knn=KNeighborsClassifier()
knn.fit(X_train,Y_train)
# 对数据进行预测
Y_new=knn.predict(X_test)
# 输出准确率
acc=(Y_new==Y_test).sum()/len(Y_test)

# 或者直接调用评分函数
score=knn.score(X_test,Y_test)
# print(acc,score)

# 批量显示图片
plt.figure(figsize=(10,15))
im_datas=X_test[::10]
im_target=Y_test[::10]
im_predict=Y_new[::10]
for i in range(20):
    plt.subplot(5,5,(i+1))
    plt.imshow(im_datas[i].reshape((28,28)))
    plt.title("predict:%d\n"%(im_predict[i])+"true:%d"%(im_target[i]))
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值