from numpy import *
import os
import time
#inputX表示输入向量
#dataSet表示训练样本
#label表示训练样本的标签
#k是最近邻的参数,选最近k个
def kNNclassify(inputX, dataSet, labels, k):
dataSetSize = dataSet.shape[0]#计算有几个训练数据,shape[0]计算出第一维度长度即列数,属于Python中operator模块的内置操作
#开始计算欧几里得距离
# 先将待分类项扩展成和数据集一样列数的dataSetSize行矩阵,再作差,得到差值矩阵
diffMat = tile(inputX, (dataSetSize,1)) - dataSet
# 差值矩阵平方 (x**2是x的二次方)
sqDiffMat = diffMat ** 2
# 计算每一行上元素的和
sqDistances = sqDiffMat.sum(axis=1)#矩阵每一行向量相加
# 开方得到欧拉距离矩阵
distances = sqDistances ** 0.5
sortedDistance = distances.argsort()
# 选择距离最小的k个点
#创建一个字典
classCount = {}
for i in range(k):
#取得第i个近邻的标签
voteLabel = labels[sortedDistance[i]]
#get(voteLabel,0)从字典中取键votelabel也就是数字多对应的出现次数若没有则取0然后加1;
classCount[voteLabel] = classCount.get(voteLabel,0) + 1
【机器学习】Knn算法实现手写数字识别
最新推荐文章于 2024-06-20 21:22:09 发布
本文详细介绍了如何使用Knn算法进行手写数字识别。通过结合数据集,展示了从数据预处理到模型训练的完整过程,旨在帮助读者理解Knn在实际应用中的操作步骤。
摘要由CSDN通过智能技术生成