KNN-Python实现handwriting recognization system

本文介绍了如何使用KNN算法实现手写数字识别。KNN是一种无参数的监督学习分类器,通过计算样本与数据集中的欧几里得距离进行分类。在实现过程中,从machine learning in action的资源中获取数据,将.txt文件转换为.jpg图像,再用opencv提取训练所需的特征向量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KNN(k-nearest neighbors)是一种监督学习的分类器,计算样本与所有数据的欧几里得距离,后枚举出k个距离最小的样本labels,从这k个样本中对labels进行投票,从中选择出最多票数的label作为result输出。

KNN模型中本身是没有参数的,不像CNN和RNN这样的神经网络模型存在大量的可学习的参数,所以KNN是不需要训练的。模型本身通过计算数据的距离来进行分类。

参考machine learning in action, 文中利用的数据可以在这本书的资源中找到,也可以去github上直接下载手写数字的image

程序如下:

# 调用需要的第三方库
import numpy as np
import operator
import os
import cv2
# 定义KNN分类器算法
# 函数输入是训练数据,训练labels,unlabeldata,参数k
# 训练数据的数据类型是matrix
# 训练labels的数据类型是vector
# unlabeldata的数据类型是vector
def classfier0(traindata, labels, data, k):
    datasize = traindata.shape[0]
    # 计算欧几里得距离
    diff = np.tile(data, (datasize, 1)) - traindata
    distance = ((diff ** 2).sum(axis=1)) ** 0.5
    # return index of data increasingly order
    sortedDist = distance.argsort()
    classCount = {
   }
    # 为label进行投票,选举出result
    for i in range(k):
        votedLabel = labels[sortedDist[<
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值