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
#返回字典中值最大的那个键
res = max(classCount)
return res
def img2vec(filename):
#创建一行1024列
【机器学习】Knn算法实现手写数字识别
最新推荐文章于 2024-04-25 20:07:55 发布