knn-伪代码与实现过程

knn特点

优点:精度高,对异常值不明感,无数据输入嘉定

缺点:计算复杂度高,空间复杂度高

适用范围:数值型和标称型

knn算法的伪代码

1、计算已知类别数据集中的点与当前之间的距离

2、按照距离递增次序排序

3、选取与当前点距离最6,小的k个点

4、确定前k个点所在的类别的出现频率

5、返回前k个点出现频率最高的类别作为当前点的预测分类

示例:knn最近邻算法改进约会网站的匹配记录

1、收集数据:提供文本文件

  *做数据归一化

2、准备数据:python解析数据:包括数据录入与调用knn算法

3、分析数据:使用matplotlib画二位散点图

4、训练算法:此步骤不适用k-nn算法

5、测试算法:使用海伦通的部分数据作为测试样本;测试样本和非测试样本的区别在于:测试样本是已经完成分类的数据,如果预测分类与实际类别不同,则标记错误。

  *归一化处理特征(改造分类可以使用的特征值)

  *计算测试向量的数量(决定了那些数据用测试,哪些用于训练样本),然后输入到原始的knn分类器函数classfy0中,最后计算错误率,并输出

6、使用算法:产生raw_input,输入一些所获得的某个特殊值,产生二位散点图,并用颜色标记方法进行处理

7、注意:涉及到数值归一化问题,knn的缺点是无法给出任何数据的基础结构信息,新词我们无法知晓平均示例样本和典型实例样本具有什么特征,但概率测量方法可以处理分类问题。

手写系统示例:

1、收集数据:提取文件

2、准备数据:编写函数classfy0(),将图片转换为分类器使用的list格式

 *将二进制图形举证转化为1*1024的向量

 *打开文件,循环文件前32行,并将每行的头32个字符值存放在Numpy中

3、分析数据:在python命令提示符中检查数据,确保符合要求

  *获取目录内容

  *从文件名解析数字分类,主要是匹配训练集的向量相似性

4、训练数据:knn不适合

5、测试数据:编写函数使用提供的部分数据及作为测试样本,测试样本和费测试样本的区别在于测试样本是已经完成的分为类数据,如果预测分类和实际类别不同,则标记为一个错误

6、使用算法:

时间: 2024-12-28 05:57:38

knn-伪代码与实现过程的相关文章

KNN算法--物以类聚,人以群分

KNN(K Nearest Neighbors,K近邻 )算法是机器学习所有算法中理论最简单,最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>=1)个距离最近的邻居进行分类判断(投票法)或者回归.如果K=1,那么新数据被简单分配给其近邻的类.KNN算法算是监督学习还是无监督学习呢?首先来看一下监督学习和无监督学习的定义.对于监督学习,数据都有明确的label(分类针对离散分布,回归针对连续分布),根据机器学习产生的模型可以将新数据分到一个明确的类

TensorFlow实现knn(k近邻)算法

首先先介绍一下knn的基本原理: KNN是通过计算不同特征值之间的距离进行分类. 整体的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. K通常是不大于20的整数.KNN算法中,所选择的邻居都是已经正确分类的对象.该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别. KNN算法要解决的核心问题是K值选择,它会直接影响分类结果. 如果选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是

一句话总结kNN算法

核心:模板匹配,将样本分到离它最相似的样本所属的类. kNN算法本质上使用了模板匹配的思想.要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接近的k个样本,统计这些样本的类别进行投票,票数最多的那个类就是分类结果.下图是kNN算法的示意图: 在上图中有红色和绿色两类样本.对于待分类样本即图中的黑色点,寻找离该样本最近的一部分训练样本,在图中是以这个矩形样本为圆心的某一圆范围内的所有样本.然后统计这些样本所属的类别,在这里红色点有12个,圆形有2个,因此把这个样本判定为红色

Python识别网站验证码

http://drops.wooyun.org/tips/6313 Python识别网站验证码 Manning · 2015/05/28 10:57 0x00 识别涉及技术 验证码识别涉及很多方面的内容.入手难度大,但是入手后,可拓展性又非常广泛,可玩性极强,成就感也很足. 验证码图像处理 验证码图像识别技术主要是操作图片内的像素点,通过对图片的像素点进行一系列的操作,最后输出验证码图像内的每个字符的文本矩阵. 读取图片 图片降噪 图片切割 图像文本输出 验证字符识别 验证码内的字符识别主要以机

HotSpot关联规则算法(2)-- 挖掘连续型和离散型数据

本篇代码可在 http://download.csdn.net/detail/fansy1990/8502323下载. 前篇<HotSpot关联规则算法(1)-- 挖掘离散型数据>分析了离散型数据的HotSpot关联规则,本篇分析离散型和连续型数据的HotSpot关联规则挖掘. 1. 首先看下数据格式(txt文档): @attribute outlook {sunny, overcast, rainy} @attribute temperature numeric @attribute hum

【Weiss】【第03章】练习3.16

[练习3.16] 假设我们有一个基于数组的表A[0,1...N-1],并且我们想删除所有相同的元素. LastPosition初始值为N-1,但应该随着相同元素被删除而变得越来越小. 考虑图3-61中的伪代码程序段.过程Dlelte删除位置j上的元素并使表破坏. a.解释该过程是如何工作的 b.利用一般的表操作重写这个过程 c.如果用标准的数组实现,则这个过程的运行时间是多少? d.使用链表实现的时间是多少? e.给出一个算法以O(NlogN)时间解决问题 f.证明:如果只使用比较,那么解决该问

android开发艺术探索读书笔记之-------view的事件分发机制

View的点击事件的分发,其实就是对MotionEvent事件的分发过程,即当一个MotionEvent产生后,系统需要把这个事件传递给一个具体的View,而这个过程就是分发过程. 分发过程主要由以下3个方法共同完成: public boolean dispatchTouchEvent(MotionEvent event) 用来进行事件的分发.如果事件能够传递给当前的View,那么此方法一定会被调用,返回结果受当前的View的onTouchEvent和下级View的dispatchTouchEv

python 科学计算库NumPy—tile函数

在学习knn分类算法的过程中用到了tile函数,有诸多的不理解,记录下来此函数的用法.   函数原型:numpy.tile(A,reps) #简单理解是此函数将A进行重复输出 其中A和reps都是array_like的参数,A可以是:array,list,tuple,dict,matrix以及基本数据类型int,string,float以及bool类型,reps的类型可以是tuple,list,dict,array,int,bool,但不可以是float,string,matrix类型. 计较常

编译原理(二)

一.简单表达式的翻译器 通过上一篇知道,预测语法分析不能处理左递归的文法(比如对stmt分析,则遇到多个以stmt开头的产生式,这使得向前看符号无法匹配一个分支,而右递归则是可以使用预测分析法处理). 1. 抽象语法和具体语法 抽象语法:每个内部结点代表一个运算符,该结点的子结点表示这个运算符的分量.比如表达式 9 -5 + 2,其抽象语法树为 将前面介绍的使用终结符和非终结符表示的语法分析树称为具体语法树,相应的文法为具体语法.这里介绍的为抽象语法树. 考虑前文介绍的一个文法: expr ->

苏州微软面试--机器学习&amp;自然语言处理

博客园开通有三年了,第一次写随笔以记录苏州微软的面试经历. 楼主一个月前在校园BBS上看到师弟发布的社招信息,对苏州微软的这个研发职位比较感兴趣,就发邮件帮忙内推下.师弟很爽快的答应了,没多久就收到了苏州微软的面试电话. 电话面试 电话面试首先做了简单自我介绍,然后最近做的项目,接下来就是开始问编程和算法题了.面向对象的多态和隐藏的概念,优先级对列的实现,堆排序初始化过程时间复杂度(楼主这题答错了 ,应该是o(n),理解成了堆排序的时间复杂度).算法题:判断单链表是否存在环节点,找到环节点的入口