使用python-opencv 的KNN对MNIST手写数字进行分类

import cv2
import numpy as np
import matplotlib.pyplot as plt
import os
import struct
def load_mnist(path, kind='train'):
            labels_path = os.path.join(path,'%s-labels.idx1-ubyte'% kind)
            images_path = os.path.join(path,'%s-images.idx3-ubyte'% kind)
            with open(labels_path, 'rb') as lbpath:
                        magic, n = struct.unpack('>II', lbpath.read(8))
                        labels = np.fromfile(lbpath,dtype=np.uint8)
            with open(images_path, 'rb') as imgpath:
                        magic, num, rows, cols = struct.unpack('>IIII', imgpath.read(16))
                        images = np.fromfile(imgpath,dtype=np.uint8).reshape(len(labels), 784)
            return images, labels
images, labels=load_mnist('MNIST_data', kind='train')
knn = cv2.ml.KNearest_create()
images=images.astype(np.float32)
labels=labels.astype(np.float32)
knn.train(images, cv2.ml.ROW_SAMPLE, labels)
images_test, labels_test=load_mnist('MNIST_data', kind='t10k')
images_test=images_test.astype(np.float32)
labels_test=labels_test.astype(np.float32)
corret=0
num=images_test.shape[0]
for i in range(num):  
           ret,result,neighbours,dist = knn.findNearest(images_test[i].reshape(1,784),k=5)
           if ret==labels_test[i]:
                       corret=corret+1
corret_rate=corret/num
print(corret_rate)
准确率达到96.88%。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值