基于KNN算法的手势图像分类

本文介绍了基于KNN算法的手势图像分类方法,包括KNN算法原理、流程和实现过程。通过密集SIFT特征提取,实现了手势的准确分类。实验表明,KNN算法在样本数量增加时能提供稳定但计算时间较长的结果。
摘要由CSDN通过智能技术生成

KNN算法原理

  • KNN(K-Nearest Neighbor,KNN)算法,是著名的模式识别统计学方法,在机器学习分类算法中占有相当大的地位。它既是最简单的机器学习算法之一,也是基于实例的学习方法中最基本的,又是最好的文本分类算法之一。
  • 算法的基本思想为:在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类。
  • KNN算法涉及3个主要因素:实例集、距离或相似的衡量、k的大小。
    一个实例的最近邻是根据标准欧氏距离定义的。更精确地讲,把任意的实例x表示的特征向量:[a1(x),a2(x),…,an(x)],假定所有实力对应于n维欧式空间an中的点,通过计算一个点与其他所有点的距离,取出与该点最近的k个点,然后统计这k个点里面所属分类比例最大的,则这个点属于该分类,如下图:
    在这里插入图片描述

KNN算法流程

  1. 准备数据,对数据进行预处理
  2. 选用合适的数据结构存储训练数据和测试元组
  3. 设定参数,如k
    4.维护一个大小为k的的按距离由大到小的优先级队列,用于存储最近邻训练元组。随机从训练元组中选取k个元组作为初始的最近邻元组,分别计算测试元组到这k个元组的距离,将训练元组标号和距离存入优先级队列
  4. 遍历训练元组集,计算当前训练元组与测试元组的距离,将所得距离L 与优先级队列中的最大距离Lmax
  5. 进行比较。若L>=Lmax,则舍弃该元组,遍历下一个元组。若L < Lmax,删除优先级队列中最大距离的元组,将当前训练元组存入优先级队列。
  6. 遍历完毕,计算优先级队列中k 个元组的多数类,并将其作为测试元组的类别。
  7. 测试元组集测试完毕后计算误差率,继续设定不同的k值重新进行训练,最后取误差率最小的k 值。

算法实现

1.计算欧式距离

n维空间下的欧式距离:
在这里插入图片描述
本次实验仅考虑平面二维空间的欧氏距离。

from numpy import * 
class KnnClassifier(object):    
    def __init__(self,labels,samples):
        """ Initialize classifier with training data. """        
        self.labels = labels
        self.samples = samples    
    def classify(self,point,k=3):
        """ Classify a point against k nearest 
            in the training data, return label. """        
        # compute distance to all training points
        dist = array([L2dist(point,s) for s in self.samples])
        # sort them
        ndx &#
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值