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 = fr.readline()
for j in range(32):
return_vector[0, 32 * i + j] = int(line[j])
return return_vector
# knn算法

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

被折叠的 条评论
为什么被折叠?



