准确率有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()