什么是KNN?(概述)

K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。Cover和Hart在1968年提出了最初的邻近算法。
KNN是一种分类(classification)算法,它输入基于实例的学习(instance-based learning),属于懒惰学习(lazy learning)即KNN没有显式的学习过程,也就是说没有训练阶段,数据集事先已有了分类和特征值,待收到新样本后直接进行处理。与急切学习(eager learning)相对应。

简单的说,k-近邻算法采用测量不同特征值之间的距离方法进行分类。

思路是:如果一个样本在特征空间中的k个最邻近的样本中的大多数属于某一个类别,则该样本也划分为这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

优缺点以及适用数据范围

优点:

  • 精度高
  • 对异常值不敏感
  • 无数据输入设定

缺点:

  • 计算复杂度高
  • 空间复杂度高

适用数据范围:

  • 数值型和标称型

工作原理

存在一个样本数据集合, 也称作训练样本集, 并且样本集中每个数据都存在标签,即我们知道样本集中每一数据 与所属分类的对应关系。 输人没有标签的新数据后, 将新数据的每个特征与样本集中数据对应的 特征进行比较,然后算法提取样本集中特征最相似数据( 最近邻) 的分类标签。一般来说,我们 只选择样本数据集中前k个最相似的数据, 这就是k-近邻算法中k的出处,通常k是不大于20的整数。 最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

k-近邻算法的一般流程

(1)收集数据:可以使用任何方法。
(2)准备数据:距离计算所需要的数值,最好是结构化的数据格式。
(3)分析数据:可以使用任何方法。
(4)训练算法:此步驟不适用于k-近邻算法。
(5)测试算法:计算错误率。
(6)使用算法:首先需要输入样本数据和结构化的输出结果,然后运行女-近邻算法判定输 入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理。

一般代码

from numpy import *
import operator
from os import listdirdef createDataSet():group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])labels = ['A', 'A', 'B', 'B']return group, labelsgroup, labels = createDataSet()
# print(group)
# print(labels)def classify0(inX, dataSet, labels, k):dataSetSize = dataSet.shape[0]diffMat = tile(inX, (dataSetSize, 1)) - dataSet  sqDiffMat = diffMat**2sqDistances = sqDiffMat.sum(axis=1)distances = sqDistances ** 0.5# 距离采用欧氏距离,计算*xA*和*xB*之间的距离sortedDistIndicies = distances.argsort()classCount = {}for i in range(k):voteIlabel = labels[sortedDistIndicies[i]]classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)return sortedClassCount[0][0]# 可以输入一个点[0,0]进行测试
a = classify0([0, 0], group, labels, 3)
print(a)
tile():重复inX的维度sorted(iterable, key=None, reverse=False)
iterable -- 可迭代对象。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则, reverse = True 降序, reverse = False 升序(默认)。

欧式距离:

KNN-----Python程序学习(一)相关推荐

  1. 第一个程序(python)-helloworld_创建第一个python程序:‘Hello World!’

    安装好python解释器就可以创建第一个仪式程序Helloworld了 1.Python程序的3种运行方式 1.1.Python解释器直接运行 在Windows或者Linux命令行输入python,进 ...

  2. 运行python程序的两种方式交互式和文件式_教你如何编写、保存与运行 Python 程序...

    第一步 接下来我们将看见如何在 Python 中运行一个传统的"Hello World"程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Pyth ...

  3. python编程语法-Python学习笔记(Ⅰ)——Python程序结构与基础语法

    作为微软的粉丝,最后终于向Python低头了,拖了两三个月终于下定决心学习Python了.不过由于之前受到C/C#等语言影响的思维定式,前期有些东西理解起来还是很费了些功夫的. 零.先抄书: 1.Py ...

  4. Python学习笔记(Ⅰ)——Python程序结构与基础语法

    作为微软的粉丝,最后终于向Python低头了,拖了两三个月终于下定决心学习Python了.不过由于之前受到C/C#等语言影响的思维定式,前期有些东西理解起来还是很费了些功夫的. 零.先抄书: 1.Py ...

  5. 深度学习中IU、IoU(Intersection over Union)的概念理解以及python程序实现

    from: 深度学习中IU.IoU(Intersection over Union)的概念理解以及python程序实现 IoU(Intersection over Union) Intersectio ...

  6. python程序格式框架的描述_python 程序语言设计(嵩天)-学习笔记(第二章python 程序实例解析)...

    第 2 章 python 程序实例解析 学习目标: 掌握解决计算问题的一般方法. 掌握python语言的基本语法,包括缩进.变量.命名等. 掌握python语言绘制图形的一般方法. 了解python标 ...

  7. python程序运行键_python学习笔记-python程序运行

    小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...

  8. 开发十年的程序员论:零基础自学Python,学习路径是什么?深思

    感谢大家一直以来的支持! 这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发.爬虫.数据分析.数据可视化.机器学习等.小编这里推荐加小编的python学习群 ...

  9. 自学python顺序-要成为一名Python程序员,要学习哪些内容,学习顺序是怎样的?...

    完全零基础的话,学Python,可以用下面这本书入门,从安装Python到可以开发实际项目,一步一步教你入门,对小白来说,那是相当友好了.想了解更多的话,可以点下面链接到豆瓣看一下.<Pytho ...

  10. python后端开发学路线_【后端开发】Python要学哪些内容?Python程序员学习路线图...

    很多零基础入门学习python不知道学习什么?也不知道Python要学哪些内容?下ki4网为您总结一下Python程序员学习路线图. python的应用范围是很广泛的,例如一些网络的爬虫,和web的开 ...

最新文章

  1. CSS中的position
  2. 加州大学信息科学院长:数据科学课程不只是工程师才修的
  3. react中引入html文件,在react中怎么引用js
  4. IOS 多线程04-GCD详解 底层并发 API
  5. 2017.10.26 四校联测D1
  6. Java基础学习总结(93)——Java编码规范之代码性能及惯例
  7. zplane函数怎么用m文件调用_elastique.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家...
  8. Atitit.得到网络邻居列表java php c#.net python
  9. Python简明教程之后应该学什么?
  10. 《普林斯顿微积分读本》 第一章:函数、图像和直线
  11. python进行文本分类_python实现文本分类
  12. HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
  13. CAN总线介绍及硬件设计
  14. 魔兽世界服务器维护有哪些内容,魔兽世界wow服务器实装维护公告内容详情介绍_魔兽世界维护公告_快吧游戏...
  15. u3d计算向量间夹角
  16. 探索C++虚函数在g++中的实现
  17. Python基础之浮点数取整数的三种方法(向下取整,向上取整,四舍五入)
  18. 补码(为什么按位取反再加一)
  19. 算力≠智慧! MIT教授抛出「意识来源」新理论:人类认知与计算根本没关系
  20. 【学习笔记】整合SSM

热门文章

  1. windows 如何使用4GB(开启3GB和PAE)
  2. oracle 表空间
  3. designer.cs 删除后怎么恢复?(复制aspx修改名字后重新生成页面)
  4. ConcurrentLinkedQueue非阻塞队列实现原理分析
  5. 面向领域驱动的应用开发框架Apworks 2.5发布
  6. HRSP热备份路由协议(思科私有协议)
  7. ubuntu apache2配置
  8. hdu 5433(bfs+dp)
  9. hihocoder 1127 : 二分图三·二分图最小点覆盖和最大独立集
  10. mysql explain 用法和理解