kNN算法识别手写数字(代码笔记)

本文介绍了k-近邻(kNN)算法在手写数字识别中的应用,这是一种基于监督学习的分类方法。算法通过计算新样本与训练集样本间的距离,选择最接近的k个邻居来决定新样本的类别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

k-近邻算法,属于有监督分类算法。

思想:利用输入数据特征值和训练样本数据特征值之间的距离分类,挑出距离最小的k个训练样本的类别频率,作为预测的分类估计。

'''
k-近邻算法是基于实例的学习
1 使用时要保存全部的数据集,占存储空间
2 要对每个训练数据计算距离值,实际使用时非常耗时
'''
import numpy as np
import operator

def classify0(x, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]
    diffMat = np.tile(x, (dataSetSize,1)) - dataSet
    sqDiff = diffMat**2
    sqDist = sqDiff.sum(axis=1)
    distances = sqDist**0.5  # 一行数据的平方根
    sortedDistInd = distances.argsort()  # 向量元素从小到大对应的索引号
    classCount = {}
    for i in range(k):  # 前k个,也就是最近的k个; 统计类出现的频率
        vLabel = labels[sortedDistInd[i]]  
        classCount[vLabel] = classCount.get(vLabel,0)+1
    sortedClassCount = sorted(classCount.items(), # 转成dict_items:[(key1,cnt1),(key2,cnt2),..]
                       key=operator.itemgetter(1), # 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值