机器学习-KNN近邻算法

2023-11-05

参看文章:

《机器学习-周志华》

《机器学习实战-Peter Harrington》

《统计学习方法-李航》

算法介绍:

k近邻学习是一种常用的监督学习方法,其工作机制如下,给定测试样本,基于某种距离度量(曼哈顿距离、欧氏距离、切比雪夫距离、Lp距离、Minkowski距离)找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测。

argmax(f(x))是使得 f(x)取得最大值所对应的变量点x

投票法:

分类任务中使用,选择k个样本出现最多的类别标记作为预测结果

平均法:

回归任务中使用,即将k个样本的实值输出标记的平均值作为预测结果

距离权重法:

称为k近邻算法的优化算法,为每个点的距离增加一个权重,使得距离近的点可以得到更大的权重,既可用于加权平均又可用于加权投票。

优缺点:

优点:

1.理论成熟,思想简单,既可以用来做分类又可以做回归

2.训练时间复杂度为O(n);无数据输入假定;

3.可用于数值型数据和离散型数据;

4.对异常值不敏感

缺点:

1.计算复杂度高,因无显示的训练过程

2.对k值、距离敏感,不同k值与距离计算方法可能结果不同

3.无法给出任何数据的基础结构信息

最近邻分类器(k = 1)

错误率(暂未看懂)

实现方法:

1. 传统法代码:

 

 1 #-*- coding: utf-8 -*-
 2 import numpy as np  3 import operator  4  5 def createDataSet():  6 #创建数据集,包含样本group,标签labels  7 group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])  8 labels = ['A', 'A', 'B', 'B']  9 return group, labels 10 11 def classify0(inX, dataSet, labels, k): 12 #shape[0]返回数据集的行数,shape[1]返回数据集的列数 13 dataSetSize = dataSet.shape[0] 14 #tile(array,(a,b),把array按a行,b列进行复制,a,b为1时维持原行数或列数 15 diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet 16 sqDiffMat = diffMat**2 17 #sum(axis = 1)对行求和,sum(aixs = 0)对列求和 18 sqDistances = sqDiffMat.sum(axis=1) 19 distances = sqDistances**0.5 20 ''' 21  argsort(x)升序排序,argsort(-x)降序排序,argsort(x, axis=0)按列排序,返回的是原数组从小到大排序的下标值 22  np.argsort(x, axis=1)按行排序;默认按列排序 23 ''' 24 sortedDistIndicies = distances.argsort() 25 classCount = {} 26 for i in range(k): 27 voteIlabel = labels[sortedDistIndicies[i]] 28 classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 29 # sorted(iterable, cam = None, key = None, reverse = True/False),True按倒序排列,False按升序排列 30 #items() 方法以列表返回可遍历的(键, 值) 元组数组, 31 # key = operator.itemgetter(1)根据字典的值进行排序 32 # key = operator.itemgetter(0)根据字典的键进行排序 33 sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) 34 #返回次数最多的类别 35 return sortedClassCount[0][0] 36 37 if __name__ == "__main__": 38 group, labels = createDataSet() 39 y = classify0([0, 0], group, labels, 3) 40 print(y)

 

2. kd树

 

转载于:https://www.cnblogs.com/Jacon-hunt/p/11366830.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习-KNN近邻算法 的相关文章

  • 如何在Python的SciPy中更改稀疏矩阵中的元素?

    我构建了一个小代码 我想用它来解决涉及大型稀疏矩阵的特征值问题 它工作正常 我现在要做的就是将稀疏矩阵中的一些元素设置为零 即最顶行中的元素 对应于实现边界条件 我可以调整下面的列向量 C0 C1 和 C2 来实现这一点 不过我想知道是否有
  • Sublime Text 插件开发中的全局 Python 包

    一 总结 我不知道 Sublime Text 插件开发人员如何使用 Sublime Text 查找全局 Python 包 而不是 Sublime Text 目录的 Python 包 Sublime Text使用自己的Python环境 而不是
  • Python 2.7 中的断言对我来说不起作用示例assertIn

    我的 Mac 上安装了 python 2 7 通过在终端中运行 python v 进行验证 当我尝试使用任何新的 2 7 断言方法时 我收到 AtributeError 我看过http docs python org 2 library u
  • Mac OS X 中文件系统的 Unicode 编码在 Python 中不正确?

    在 OS X 和 Python 中处理 Unicode 文件名有点困难 我试图在代码中稍后使用文件名作为正则表达式的输入 但文件名中使用的编码似乎与 sys getfilesystemencoding 告诉我的不同 采取以下代码 usr b
  • 搜索多个字段

    我想我没有正确理解 django haystack 我有一个包含多个字段的数据模型 我希望搜索其中两个字段 class UserProfile models Model user models ForeignKey User unique
  • Keras:如何保存模型或权重?

    如果这个问题看起来很简单 我很抱歉 但是阅读 Keras 保存和恢复帮助页面 https www tensorflow org beta tutorials keras save and restore models https www t
  • 从扫描文档中提取行表 opencv python

    我想从扫描的表中提取信息并将其存储为 csv 现在我的表提取算法执行以下步骤 应用倾斜校正 应用高斯滤波器进行去噪 使用 Otsu 阈值进行二值化 进行形态学开局 Canny 边缘检测 进行霍夫变换以获得表格行 去除重复行 10像素范围内相
  • Django 的 request.FILES 出现 UnicodeDecodeError

    我在视图调用中有以下代码 def view request body u for filename f in request FILES items body body Filename filename n f read n 在某些情况下
  • pytest:同一接口的不同实现的可重用测试

    想象一下我已经实现了一个名为的实用程序 可能是一个类 Bar在一个模块中foo 并为其编写了以下测试 测试 foo py from foo import Bar as Implementation from pytest import ma
  • Geodjango距离查询未检索到正确的结果

    我正在尝试根据地理位置的接近程度来检索一些帖子 正如您在代码中看到的 我正在使用 GeoDjango 并且代码在视图中执行 问题是距离过滤器似乎被完全忽略了 当我检查查询集上的距离时 我得到了预期距离 1m 和 18km 但 18km 的帖
  • Jython 和 SAX 解析器:允许的实体不超过 64000 个?

    我做了一个简单的测试xml saxJython 中的解析器在处理大型 XML 文件 800 MB 时遇到以下错误 Traceback most recent call last File src project xmltools py li
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • Anaconda 无法导入 ssl 但 Python 可以

    Anaconda 3 Jupyter笔记本无法导入ssl 但使用Atom终端导入ssl没有问题 我尝试在 Jupyter 笔记本中导入 ssl 但出现以下错误 C ProgramData Anaconda3 lib ssl py in
  • 动态过滤 pandas 数据框

    我正在尝试使用三列的阈值来过滤 pandas 数据框 import pandas as pd df pd DataFrame A 6 2 10 5 3 B 2 5 3 2 6 C 5 2 1 8 2 df df loc df A gt 0
  • Python SSL X509:KEY_VALUES_MISMATCH

    Python HTTPS server from http server import HTTPServer SimpleHTTPRequestHandler import ssl https stackoverflow com a 408
  • 如何根据第一列创建新列,同时考虑Python Pandas中字母和列表的大小? [复制]

    这个问题在这里已经有答案了 我在 Python Pandas 中有 DataFrame 如下所示 col1 John Simon prd agc Ann White BeN and Ann bad list Ben Wayne 我需要这样做
  • 双击打开 ipython 笔记本

    相关文章 通过双击 osx 打开 ipython 笔记本 https stackoverflow com questions 16158893 open an ipython notebook via double click on osx
  • 从 pandas DataFrame 中删除少于 K 个连续 NaN

    我正在处理时间序列数据 我在从数据帧列中删除小于或等于阈值的连续 NaN 时遇到问题 我尝试查看一些链接 例如 标识连续 NaN 出现的位置以及计数 Pandas NaN 孔的游程长度 https stackoverflow com que
  • 多个对象以某种方式相互干扰[原始版本]

    我有一个神经网络 NN 当应用于单个数据集时 它可以完美地工作 但是 如果我想在一组数据上运行神经网络 然后创建一个新的神经网络实例以在不同的数据集 甚至再次同一组数据 上运行 那么新实例将产生完全错误的预测 例如 对 XOR 模式进行训练
  • Apache Beam Pipeline 写表后查询表

    我有一个 Apache Beam Dataflow 管道 它将结果写入 BigQuery 表 然后我想查询该表以获取管道的单独部分 但是 我似乎无法弄清楚如何正确设置此管道依赖性 我编写的新表 然后想要查询 与一个单独的表连接以进行某些过滤

随机推荐

  • 使用vue-json-viewer实现高亮展示、折叠和复制json数据

    最近项目上有个需求 就是在前端显示json格式的数据 并且提供展开和收起的按钮 先看一下最终完成的效果吧 在这里我使用了vue json viewer这个组件来实现这个效果 这个组件主要能实现高亮 json折叠和copy功能 能满足项目需求
  • Windows下的Memcache安装

    很多phper不知道如何在Windows下搭建Memcache的开发调试环境 最近个人也在研究Memcache 记录下自己安装搭建的过程 其实我开始研究Memcache的时候并不知道居然还有memcached for Win32这个鸟东西
  • 【Matlab】数据插值

    数据插值 插值与拟合的区别 实现方法 插值要求曲线穿过样本点 而拟合不需要穿过样本点 只要求总体误差最小 结果形式 插值是分段逼近样本点 没有同一的逼近函数 函数拟合则用一个函数去逼近 有完整的表达式 侧重点 插值可以用于估计区间内某些点对
  • java实现webdav服务_访问WebDAV服务

    输入用户名和密码即可登录入服务器 使用类似ftp的命令就可以操作服务器上的文件 使用h命令可列出所有的命令 dav gt hAvailable commands ls cd pwd put get mget mput edit less m
  • LD 浅析 转

    原文地址 http www cnblogs com cjjnjust articles 1617086 html LD 浅析 转 本文乃转载 原作者的E mail是zhanglei sict ac cn 完成于2005 11 5 2005
  • Java之继承与多态

    目录 一 继承 1 为什么需要继承 2 继承概念 3 继承的语法 4 父类成员访问 1 子类中访问父类的成员变量 2 子类中访问父类的成员方法 5 super关键字 6 子类构造方法 7 super和this 8 再谈初始化 9 prote
  • 互联网的两大组成及其特点

    1 互联网由两大部分组成 边缘部分及其核心部分 2 边缘部分 主要由连接在互联网上的主机组成 这部分是直接与用户相连的 在边缘部分主要的活动是两个主机之间的通信 其通信方式可以分为两类 1 客户 服务器方式 就是客户机向服务器请求服务器 客
  • 14 openEuler DNF(YUM)配置管理

    文章目录 14 1 DNF配置文件 14 1 1 配置main部分 14 1 2 配置repository部分 14 1 3 显示当前配置 14 2 创建本地软件源仓库 14 3 添加 启用和禁用软件源 14 3 1 添加软件源 14 3
  • paste0函数在R语言中的应用

    paste0函数在R语言中的应用 在R语言中 paste0函数是一个非常有用的函数 它可以将多个输入组合成一个字符串 这个函数的使用非常简单 只需要将要组合的内容作为参数传递给paste0函数即可 在本文中 我们将通过实例来演示paste0
  • 全球及中国装备制造产业投资战略及产销需求预测报告2021-2027年版

    全球及中国装备制造产业投资战略及产销需求预测报告2021 2027年版 HS HS HS HS HS HS HS HS HS HS HS HS 修订日期 2021年10月 搜索鸿晟信合研究院查看官网更多内容 第一章 装备制造业概述 1 1
  • Redraiment的走法

    题目描述 题目描述 Redraiment是走梅花桩的高手 Redraiment总是起点不限 从前到后 往高的桩子走 但走的步数最多 不知道为什么 你能替Redraiment研究他最多走的步数吗 样例输入 6 2 5 1 5 4 5 样例输出
  • LabVIEW结合神经网络在图像目标检测中的应用

    神经网络在图像识别中的应用 摘要 随着大数据时代的快速发展 图像识别技术的重要性与日俱增 大量的数据集和强大的服务器计算能力 更是如虎添翼 相比传统的图像分类方法已经无法满足用户对于对图像分类灵活性和速度上的要求 甚至在复杂环境下 传统算法
  • Mac下安装Metasploit

    今天鼓捣Metasploit在Mac上的安装 首先下载pkg文件 http osx metasploit com metasploitframework latest pkg 接着 cd opt metasploit framework b
  • picker多列可选

    npm install usui save import usui from usui Vue use usui this usui picker label 1 value 1 label 2 value 2 label 3 value
  • androidstudio 导入git问题 is under Git, but is not registered in the Settings

    从git项目第一次导入数据到本地可能会出现以上问题 1 针对此图 首先选择Configure 2 针对上图选择加号 然后选择指定的项目路径以及类型 点击OK apply
  • Java案例:实现杨辉三角

    Java案例 实现杨辉三角 前言 本篇文章我将讲述使用Java实现杨辉三角的实现 而且可以根据用户输入的正整数输出指定行数的杨辉三角 一 杨辉三角是什么 杨辉三角 是二项式系数在三角形中的一种几何排列 中国南宋数学家杨辉1261年所著的 详
  • dockerfile

    当我在dockerfile里面想安装torchvision WORKDIR vision 0 8 1 WORKDIR相当于cd 进入文件夹执行 RUN python3 setup py install user 想要安装时 报错 Trace
  • LayUi 折叠表格

    表格会以代码的形式写到里面 大家可以将代码copy到项目中新建一个HTML尝试 下面用到的JS都会进行展示JS的内容 可以完全还原我当时的环境 lt include common layout html gt lt header gt
  • jQuery中的.bind()、.live()和.delegate()之间区别分析

    DOM树 首先 可视化一个HMTL文档的DOM树是很有帮助的 一个简单的HTML页面看起来就像是这个样子 事件冒泡 又称事件传播 当我们点击一个链接时 其触发了链接元素的单击事件 该事件则引发任何我们已绑定到该元素的单击事件上的函数的执行
  • 机器学习-KNN近邻算法

    参看文章 机器学习 周志华 机器学习实战 Peter Harrington 统计学习方法 李航 算法介绍 k近邻学习是一种常用的监督学习方法 其工作机制如下 给定测试样本 基于某种距离度量 曼哈顿距离 欧氏距离 切比雪夫距离 Lp距离 Mi