美文网首页Python中文社区
KNN算法 — 手写数字识别

KNN算法 — 手写数字识别

作者: _aLIEz | 来源:发表于2020-01-24 11:40 被阅读0次

KNN是将样本归为距样本最邻近的k个样本中大多数所属的类别。

算法实现:
1、计算出每一个样本点与测试点的距离
2、选取距离最近的K个样本,并获取他们的标签 label
3、然后找出K个样本中数量最多的标签,返回该标签


  • 导入所需要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt 
from sklearn.neighbors import KNeighborsClassifier
  • 打开其中一个观察特征
one = plt.imread(r'.\机器学习数据分析源码\day8-KNN算法\1-KNN\exercise\data\0\0_10.bmp')
print(one)
plt.imshow(one,cmap='gray')
  • 读取数据,文件名称在存储上有一定规律,可以使用循环来快速读取文件并将数据存放在列表中
x_train = []
x_test = []
y_train = []
y_test = []

for i in range(10):
    for j in range(1,501):
        if j < 451: #保存到训练数据
            x_train.append(plt.imread(r'C:\Users\‘\Desktop\python\数据挖掘\机器学习数据分析源码\day8-KNN算法\1-KNN\exercise\data\{}\{}_{}.bmp'.format(i,i,j)).reshape(-1))
            y_train.append(i)
        else : #保存到测试数据
            x_test.append(plt.imread(r'C:\Users\‘\Desktop\python\数据挖掘\机器学习数据分析源码\day8-KNN算法\1-KNN\exercise\data\{}\{}_{}.bmp'.format(i,i,j)).reshape(-1))
            y_test.append(i)
  • 数据转换
x_train,y_train,x_test,y_test = np.array(x_train),np.array(y_train),np.array(x_test),np.array(y_test)         
  • 实例化KNN算法,并训练
knn = KNeighborsClassifier()
knn.fit(x_train,y_train)
  • 预测并查看测试结果
y_predict = knn.predict(x_test)
print(y_predict)
  • 用matplotlib画出图像并且列出真实值
plt.figure(figsize=(12,15))
im_data = x_test[::20]
im_target = y_test[::20]
im_predict = y_predict[::20]
for i in range(25):
    plt.subplot(5,5,(i+1))
    plt.imshow(im_data[i].reshape((28,28)))
    plt.title('predict:%d'%im_predict[i]+'\ntrue:%d'%(im_target[i]))

相关文章

网友评论

    本文标题:KNN算法 — 手写数字识别

    本文链接:https://www.haomeiwen.com/subject/jiycthtx.html