没有合适的资源?快使用搜索试试~ 我知道了~
首页python使用KNN算法识别手写数字
本文实例为大家分享了python使用KNN算法识别手写数字的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- #pip install numpy import os import os.path from numpy import * import operator import time from os import listdir 描述: KNN算法实现分类器 参数: inputPoint:测试集 dataSet:训练集 labels:类别标签 k:K个邻居 返回值: 该测试数据的类别 def classify(
资源详情
资源评论
资源推荐

python使用使用KNN算法识别手写数字算法识别手写数字
本文实例为大家分享了python使用KNN算法识别手写数字的具体代码,供大家参考,具体内容如下
# -*- coding: utf-8 -*-
#pip install numpy
import os
import os.path
from numpy import *
import operator
import time
from os import listdir
"""
描述:
KNN算法实现分类器
参数:
inputPoint:测试集
dataSet:训练集
labels:类别标签
k:K个邻居
返回值:
该测试数据的类别
"""
def classify(inputPoint,dataSet,labels,k):
dataSetSize = dataSet.shape[0] #已知分类的数据集(训练集)的行数
#先tile函数将输入点拓展成与训练集相同维数的矩阵,再计算欧氏距离
diffMat = tile(inputPoint,(dataSetSize,1))-dataSet #样本与训练集的差值矩阵
# print(inputPoint);
sqDiffMat = diffMat ** 2 #sqDiffMat 的数据类型是nump提供的ndarray,这不是矩阵的平方,而是每个元素变成原来的平方。
sqDistances = sqDiffMat.sum(axis=1) #计算每一行上元素的和
# print(sqDistances);
distances = sqDistances ** 0.5 #开方得到欧拉距离矩阵
# print(distances);
sortedDistIndicies = distances.argsort() #按distances中元素进行升序排序后得到的对应下标的列表,argsort函数返回的是数组
值从小到大的索引值
# print(sortedDistIndicies);
# classCount数据类型是这样的{0: 2, 1: 2},字典key:value
classCount = {}
# 选择距离最小的k个点
for i in range(k):
voteIlabel = labels[ sortedDistIndicies[i] ] # print(voteIlabel)
# 类别数加1
classCount[voteIlabel] = classCount.get(voteIlabel,0)+1
print(classCount)# {1: 1, 7: 2}
#按classCount字典的第2个元素(即类别出现的次数)从大到小排序
sortedClassCount = sorted(classCount.items(), key = operator.itemgetter(1), reverse = True)
print(sortedClassCount)# [(7, 2), (1, 1)] return sortedClassCount[0][0]
"""
描述:
读取指定文件名的文本数据,构建一个矩阵
参数:
文本文件名称
返回值:
一个单行矩阵
"""
def img2vector(filename):
returnVect = [] fr = open(filename)
for i in range(32):
lineStr = fr.readline()
for j in range(32):
returnVect.append(int(lineStr[j]))
return returnVect
"""
描述:



















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0