【10月23日】机器学习实战(一)KNN算法:手写识别系统

本文介绍了k-近邻(KNN)算法在手写数字识别中的应用,通过简单的系统实现识别0-9的阿拉伯数字。尽管KNN算法精度高、对异常值不敏感,但因其计算和空间复杂度高、需要大量标注数据,存在一定的局限性。通过代码演示,展示了算法的实现过程,并得出98.8%的正确率。然而,KNN算法需要保存所有数据,可能导致存储需求大和计算时间长的问题。
摘要由CSDN通过智能技术生成

k-近邻算法怕是最简单的机器学习的分类算法了。简单的说,k-近邻算法采用测量不同特征值之间的距离方法进行分类。

源码+实验数据地址:https://github.com/MoonTreee/machine_learning

  • 其优点:精度高、对异常值不敏感、无数据输入假定;
  • 缺点:计算复杂度高、空间复杂度高;and 需要大量的标注数据
  • 适用数据范围:数值型和标称型。

本文基于k-近邻算法完成一个对字符的识别(本质是一个分类问题),为了简单起见,构造的系统只能识别阿拉伯数字0-9(相关的测试集和训练集数据见github)。源数据已经使用图像处理软件处理成32像素x32像素的黑白图像。为方便处理,以文本格式进行保存。

算法本身也不是很复杂,下面直接上代码。需要注意的地方已经在代码块中标注。

import numpy as np
from os import listdir
import operator


# 图像矩阵转换为二进制向量
# 本例中读取文本文件的前32行和前32列,即32x32的矩阵,转换为1x1024的向量
def img2vector(filename):
    return_vector = np.zeros((1, 1024))
    fr = open(filename)
    for i in range(32):
        line = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值