python计算机视觉KNN算法、稠密Dense-sift及图像手势识别

2023-11-18

KNN算法

一、KNN算法概述

1、kNN算法又称为k近邻分类(k-nearest neighbor classification)算法。
最简单平凡的分类器也许是那种死记硬背式的分类器,记住所有的训练数据,对于新的数据则直接和训练数据匹配,如果存在相同属性的训练数据,则直接用它的分类来作为新数据的分类。这种方式有一个明显的缺点,那就是很可能无法找到完全匹配的训练记录。
kNN算法则是从训练集中找到和新数据最接近的k条记录,然后根据他们的主要分类来决定新数据的类别。该算法涉及3个主要因素:训练集、距离或相似的衡量、k的大小。

二、KNN算法步骤
1)算距离:给定测试对象,计算它与训练集中的每个对象的距离
2)找邻居:圈定距离最近的k个训练对象,作为测试对象的近邻
3)做分类:根据这k个近邻归属的主要类别,来对测试对象分类

三、算法优缺点
1、优点
简单,易于理解,易于实现,无需估计参数,无需训练
适合对稀有事件进行分类(例如当流失率很低时,比如低于0.5%,构造流失预测模型)
特别适合于多分类问题(multi-modal,对象具有多个类别标签),例如根据基因特征来判断其功能分类,kNN比SVM的表现要好

2、缺点
懒惰算法,对测试样本分类时的计算量大,内存开销大,评分慢
可解释性较差,无法给出决策树那样的规则。

四、KNN算法实现代码
实现最基本的KNN形式非常简单。给定训练样本集和对应的标记列表,下面的代码可以用来完成这一工作。 这些训练样本和标记可以在一一个 数组里成行摆放或者千脆摆放列表里,训练样本可能是数字、字符串等任何你喜欢的形状。将定义的类对象添加到名为knn.py的文件里:

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. 
             在训练数据上采用 k 近邻分类,并返回标记
        """
        
        # compute distance to all training points 计算所有训练数据点的距离
        dist = array([L2dist(point,s) for s in self.samples])
        
        # sort them 对它们进行排序  
        ndx = dist.argsort()
        
        # use dictionary to store the k nearest   用字典存储 k 近邻
        votes = {}
        for i in range(k):
            label = self.labels[ndx[i]]
            votes.setdefault(label,0)
            votes[label] += 1
            
        return max(votes, key=lambda x: votes.get(x))

定义一个类并用训练数据初始化非常简单;每次想对某些东西进行分类时,用KNN方法,我们就没有必要存储并将训练数据作为参数来传递。用一个字典来存储邻近标记,我们便可以用文本字符串或数字来表示标记。在这个例子中,我们用欧式距离(L2)进行度量,当然,如果你有其他的度量方式,只需要将其作为函数添加到上面代码的最后。

我们首先建立一些简单的二维示例数据集来说明并可视化分类器的工作原理,下面的脚本将创建两个不同的二维点集,每个点集有两个类,用pickle模块来保存创建的数据:

# -*- coding: utf-8 -*-
from numpy.random import randn
import pickle
from pylab import *

# create sample data of 2D points
n = 200
# two normal distributions
class_1 = 0.6 * randn(n,2)
class_2 = 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python计算机视觉KNN算法、稠密Dense-sift及图像手势识别 的相关文章

  • 海康威视系统未连接服务器,ivms-4200客户端登入不了云服务器

    ivms 4200客户端登入不了云服务器 内容精选 换一换 本章节为您介绍以下内容 准备弹性云服务器作为GDS服务器在使用GDS导入导出数据之前 需要准备一台或多台与GaussDB DWS 集群在相同VPC内的Linux弹性云服务器 简称E
  • Redis使用总结(四、处理延时任务)

    引言 在开发中 往往会遇到一些关于延时任务的需求 例如 生成订单30分钟未支付 则自动取消 生成订单60秒后 给用户发短信 对上述的任务 我们给一个专业的名字来形容 那就是延时任务 那么这里就会产生一个问题 这个延时任务和定时任务的区别究竟

随机推荐

  • 简单讲解一下什么是ATT&CK框架

    点击 仙网攻城狮 关注我们哦 不当想研发的渗透人不是好运维 让我们每天进步一点点 简介 ATT CK框架由 MITRE 安全组织提出并列出了APT 高级可持续威胁攻击 的14个阶段涉及到206个安全技术点上千种攻击 检测手段 基本覆盖所有网
  • Mip-Nerf三维重建代码复现教程——环境配置

    Mip Nerf三维重建Pytorch使用Pycharm运行0基础教程 项目论文 项目Github 你好 这里是 出门吃三碗饭 本人 本文章接下来将介绍如何从0运行2020会议Mip Nerf的Pytorch版本 让你自己动手渲染第一个三维
  • 网络安全应急响应----1、应急响应简介

    目录 1 应急响应流程 2 PDCERT应急响应方法模型 3 应急响应常见事件 4 应急响应分析流程 网络安全应急响应 针对已经发生的或可能发生的安全事件进行监控 分析 协调 处理 保护资产安全 1 应急响应流程 2 PDCERT应急响应方
  • uni-App聊天功能的源码

    前言 泡泡IM uniapp版聊天源码是一套完整的基于uniapp开发的聊天软件源码 可编译成微信小程序 安卓 IOS APP聊天软件 H5网页聊天室 uniapp聊天源码未加密 无外部依赖 可私有化部署 可二次开发 文档全面 接口丰富 方
  • 仿kafka实现java版时间轮

    系统定时 超时 在我们平时的项目开发中 会设置系统的超时时间 比如在http接口中设置超时时间 在定时调度中也会用到 在jdk的开发的实现Timer和ScheduledThreadPoolExecutor DelayQueue定时调度中使用
  • React学习之扩展浅比较(三十四)

    注意 这玩意也已经被React PureComponent的功能取代了 这里依旧是提一下 主要是React v15的版本中的react with addons js 这些玩意还存在 哎 害人呐 引入 import shallowCompar
  • c#图像保存为icon

    Icon操作类 实现了将Image图像向Icon的转化 调用示例 Image pic Image FromFile D tmp 2 png IconTool SaveToIcon pic D tmp test2 ico class Icon
  • 5.x Linux RT-Preempt补丁和ARM平台RT-test编译

    1 在make menuconfig中 5 x版本内核的RT Preempt设置在General Setup下面 2 ARM平台的RT test编译 git clone git git kernel org pub scm utils rt
  • springboot 集成elasticsearch遇到的坑

    最近开始学习elasticsearch 所以就想着在springboot里面集成一下elasticsearch 结果遇到了不少麻烦 下面总结一下 但愿大家和自己以后都少走弯路 首先声明下 本人开始学习elasticsearch的时候 官网最
  • python-类变量(类属性),实例变量(实例属性),self作用

    类中定义的变量又称之为属性 类中定义的函数又称之为方法 类中 所有函数 方法 之外 此范围定义的变量 称为类属性或类变量 类中 所有函数 方法 内部 以 self 变量名 的方式定义的变量 称为实例属性或实例变量 类中 所有函数 方法 内部
  • nuxt3 pinia pinia-plugin-persistedstate

    安装pinia yarn add pinia pinia nuxt 或者使用 npm npm install pinia pinia nut 安装pinia plugin persistedstate npm npm i pinia plu
  • x-studio(Lua调试器,粒子编辑器,UI编辑器,代码编辑器,csb恢复工具)

    最新版本 x studio 10 0 9000 29 2020年4月14日更新 官网 https x studio net 官方教程 https docs x studio net x studio是一款强大的游戏开发IDE 由作者历时5年
  • 如何从零开始写小程序

    看了这篇文章 即使让我现在就从头写一个能够正常运行的小程序 也没有原本想象中的那么难了 在本文中 我们将会以一个具体的小程序为例 带领大家从零到一完成一个小程序的开发流程 并将这个小程序上传到 FinClip com 进行小程序提审与上架操
  • 信息收集之 绕过CDN获取真实IP地址

    作者主页 士别三日wyx 作者简介 CSDN top100 阿里云博客专家 华为云享专家 网络安全领域优质创作者 专栏简介 此文章已录入专栏 网络安全快速入门 CDN绕过 一 为什么要绕过CDN 二 如何识别CDN 1 nslookup解析
  • 多线程总结

  • Android 5.0 API新增和改进

    API 级别 21 Android 5 0 LOLLIPOP 为用户和应用开发者提供了新的功能 本文档介绍了最值得注意的新 API 有关新平台功能的扼要介绍 另请参阅 Android Lollipop 集锦 开始开发 要构建 Android
  • 硬件设计---了解电源篇

    1 概述 在高速电路设计中一块单板上常存在多种电源 3 3V 1 8V 1 2V 1 0V 0 9V 0 75V等 有时光是对FPGA供电就需要五六种电源 为了便于使用往往用户只需要提供一种或几种电源 然后经过板上电源模块转换到各个目标电源
  • 二、Docker安装及使用教程(Windows版)

    Docker安装及使用教程 Windows版 1 下载安装 2 启用windows Hyper V虚拟引擎 1 打开设置 2 搜索 启用或关闭 windows 功能 3 勾选Hyper V服务 4 根据提示重启电脑 等待更新即可 2 启动D
  • iOS 开发之 AutoLayout 自动布局

    iOS 开发之 AutoLayout 自动布局 frame 原点自身的尺寸 来确定自身的位置 autoLayout 根据参照视图的位置来定义自己的位置 autoLayout 约束视图和视图的关系来分配屏幕上的位置 使用VFL Visual
  • python计算机视觉KNN算法、稠密Dense-sift及图像手势识别

    KNN算法 一 KNN算法概述 1 kNN算法又称为k近邻分类 k nearest neighbor classification 算法 最简单平凡的分类器也许是那种死记硬背式的分类器 记住所有的训练数据 对于新的数据则直接和训练数据匹配