精华内容
下载资源
问答
  • 在一组点中查找 k - 最近邻 (kNN) 的程序。 使用的距离度量:欧氏距离 用法: [邻居距离] = kNearestNeighbors(dataMatrix, queryMatrix, k); dataMatrix (N x D) - 维数为 D 的 N 个向量(我们在其中搜索最近的邻居...
  • 返回 k最近的训练实例的索引和各自的距离。 使用鸢尾花数据集的示例 加载fisheriris X = 测量值; Y = 物种; Xnew = [min(X);mean(X);max(X)]; k = 5; 公制 = '欧几里得'; mdl = kNNeighbors(k,metric); ...
  • python实现K最近邻算法

    2020-09-20 20:16:58
    主要为大家详细介绍了python实现K最近邻算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 题 目 k-最近邻算法实现 学生姓名 学生学号 专业班级 指导教师 2015-1-2 实验二k-最近邻算法实现 一 实验目的 加强对k-最近邻算法的理解 锻炼分析问题解决问题并动手实践的能力 二 实验要求 使用一种你熟悉的程序...
  • 基于k最近邻算法的近类别支持向量机用于phi-OTDR事件识别
  • K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。
  • 连续K最近邻(CKNN)查询是最近邻查询的扩展,可广泛地应用于地理信息系统、城市规划、智能交通等领域.CKNN查询搜索某一路径上所有点的K个最近的感兴趣对象.本文研究基于交通路网的连续K最近邻查询问题,不同于传统的...
  • 在本文中,我们提出了k多样性最近邻k-DNN)图,它平衡了图的精度和多样性,从而同时具有良好的开发和勘探能力。 我们引入了一种高效的索引算法,用于构造k-DNN图,该算法的灵感来自于信息检索(IR)中的一种知名...
  • 粗到K最近邻分类器

    2021-03-10 03:18:53
    在本文中,我们提出了从粗到细的K最近邻(KNN)分类器(CFKNNC)。 CFKNNC不同从常规KNN分类器(CKNNC)得出的结果如下:CFKNNC首先粗略地确定少量的“接近”测试样本的训练样本,然后精细地确定测试样本的K个最近...
  • 题 目 k-最近邻算法实现 学生 学生学号 专业班级 指导教师 2015-1-2 实验二 k-最近邻算法实现 实验目的 加强对k-最近邻算法的理解 锻炼分析问题解决问题并动手实践的能力 实验要求 使用一种你熟悉的程序设计语言如...
  • 具体解决方案是,将待聚类的向量数据集转化为k最近邻网络,并用SSNCA对该网络进行聚类.将SSNCA与c-Means、仿射传播进行比较,实验表明文中算法得到的目标函数稍差,但聚类精度要明显高于这两个算法.
  • 主要介绍了Python K最近邻从原理到实现的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 本文提出了一种基于K最近邻(k-Nearest Neighbor,KNN)文本分类的伪装入侵检测方法,减少了TFIDF权重表示中高频命令的权重,提出新的权重表示方法 STFIDF,使得有区分性的命令权重增大,有利于更准确地表示用户的行为特征,...
  • 针对频谱的可预测性问题,通过对数据集的分析,使用k最近邻(k NN)回归模型预测频谱的信道-场强值。基于观测数据呈现出的周期性,提出了一种针对周期性数据进行优化的k NN模型,并用其进行预测。比较了原始k NN回归模型和...
  • k最近邻分类算法

    2012-03-13 11:12:27
    k最近邻算法是一种有效快速的分类算法,包括源代码和测试数据
  • K最近邻属于一种分类算法,他的解释最容易,近朱者赤,近墨者黑,我们想看一个人是什么样的,看他的朋友是什么样的就可以了。当然其他还牵着到,看哪方面和朋友比较接近(对象特征),怎样才算是跟朋友亲近,一起...
  • KNN即K最近邻,相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article/details/78796773 这里只讲述sklearn中如何使用KNN算法。 无监督最近邻 NearestNeighbors (最近邻)实现了 unsuperv....
       
    

    全栈工程师开发手册 (作者:栾鹏)

    python数据挖掘系列教程

    KNN即K最近邻,相关的知识内容可以参考
    http://blog.csdn.net/luanpeng825485697/article/details/78796773

    这里只讲述sklearn中如何使用KNN算法。

    无监督最近邻

    NearestNeighbors (最近邻)实现了 unsupervised nearest neighbors learning(无监督的最近邻学习)。 它为三种不同的最近邻算法提供统一的接口:BallTree, KDTree, 还有基于 sklearn.metrics.pairwise 的 brute-force 算法。算法的选择可通过关键字 ‘algorithm’ 来控制, 并必须是 [‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’] 其中的一个。当默认值设置为 ‘auto’ 时,算法会尝试从训练数据中确定最佳方法。

    # ========无监督查找最近邻(常在聚类中使用
    展开全文
  • 基于K最近邻分类的无线传感器网络定位算法
  • Python之K最近邻算法

    千次阅读 2019-04-15 10:48:35
    K最近邻(k-nearest neighbours,KNN)算法: 是指给定一个训练数据集,将新输入的实例,在训练数据集中找到与该实例最邻近的K个实例(K表示指定的最近邻的数量,K个邻居), 这K个实例的多数属于某个类,就把该...

    K最近邻(k-nearest neighbours,KNN)算法:
    是指给定一个训练数据集,将新输入的实例,在训练数据集中找到与该实例最邻近的K个实例(K表示指定的最近邻的数量,K个邻居), 这K个实例的多数属于某个类,就把该输入实例分类到这个类中。

    关于K的经验规则是:如果有N位用户,应考虑sqrt(N)个邻居。

    KNN算法用于分类和回归,需要考虑最近的邻居:
    1、分类就是编组;
    2、回归就是预测结果(如一个数字)。

    特征提取:
    1、将物品(如水果或用户)转换为一系列可比较的数字。
    2、挑选合适的特征,必须考虑到各种需要考虑的因素。
    3、能否挑选合适的特征事关KNN算法的成败。

    计算相似度(余弦相似度更好):公式有很多,根据需求选择
    1、勾股定理(毕达哥拉斯公式,√为平方根在计算机中的显示符号):计算两点的距离,√(a₁-a₂)²+(b₁-b₂)²。
    2、余弦相似度(cosine similarity):是通过计算两个向量的夹角余弦值来评估他们的相似度。
    3、朴素贝叶斯分类器(Naive Bayes classifier):用于获得目标概率值的方法。

    例:影片推荐系统,值为喜爱度

    			黄一		赵二		张三		李四		王五		刘六(待测人)
    喜剧片		  3 	  4 	  2 	  3 	  3 	  4
    动作片		  4 	  3 	  5       4 	  5 	  4
    生活片		  4 	  5 	  1 	  2 	  1 	  1
    恐怖片		  1 	  1 	  3 	  4 	  5 	  5
    爱情片		  4 	  5 	  1 	  1 	  1 	  1
    最终结果为:[5.9, 7.0, 3.0, 1.7, 1.4],刘六与李四、王五的值差距最小,判断他们的喜好更相似。
    
    # 分类
    import math
    
    # 计算2人的距离(非实际距离)
    def knn(one, two):
    	res = [] 										#最终各人对比距离
    	for ren in two: 								#各人依次对比
    		zhi = 0
    		for i in range(length):
    			zhi += math.pow((one[i]-ren[i]), 2)     #pow(x, y)返回x的y次幂
    		result = math.sqrt(zhi)						#sqrt(x)返回x的平方根
    		res.append((result, zhi))
    	return res
    
    # 各人对各类影片的喜爱度,中文也可做变量名
    黄一 = [3, 4, 4, 1, 4]
    赵二 = [4, 3, 5, 1, 5]
    张三 = [2, 5, 1, 3, 1]
    李四 = [3, 4, 2, 4, 1]
    王五 = [3, 5, 1, 5, 1]
    刘六 = [4, 4, 1, 5, 1]
    
    # 多个参照物
    num = [黄一, 赵二, 张三, 李四, 王五]
    
    length = len(刘六)
    print(knn(刘六, num))
    

    结果为:

    [(5.916079783099616, 35.0), (7.0, 49.0), (3.0, 9.0), (1.7320508075688772, 3.0), (1.4142135623730951, 2.0)]
    

    回归(预测):K个最近邻的值相加,再平分即是预测结果。
    如:根据5个最近邻的打分预测刘六的打分

    黄一 = 5	
    赵二 = 4	
    张三 = 4	
    李四 = 5	
    王五 = 4
    
    刘六 = (黄一 + 赵二 + 张三 + 李四 + 王五)/5
    print(刘六)
    

    结果为:

    4.4
    
    展开全文
  • 【机器学习】《机器学习实战》读书笔记及代码:第2章 - k-近邻算法 1、初识 K最近邻分类算法(K Nearest Neighbor)是著名的模式识别统计学方法,在机器学习分类算法中占有相当大的地位。主要应用领域是对未知事物的...

    【机器学习】《机器学习实战》读书笔记及代码:第2章 - k-近邻算法

    1、初识

    K最近邻分类算法(K Nearest Neighbor)是著名的模式识别统计学方法,在机器学习分类算法中占有相当大的地位。主要应用领域是对未知事物的识别,即推断未知事物属于哪一类。

    推断思想是,基于欧几里得定理,推断未知事物的特征和哪一类已知事物的的特征最接近。简单来说就是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

    KNN 算法本身简单有效,它是一种 lazy-learning 算法,分类器不需要使用训练集进行训练,训练时间复杂度为0。KNN 分类的计算复杂度和训练集中的文档数目成正比,也就是说,如果训练集中文档总数为 n,那么 KNN 的分类时间复杂度为O(n)。

    KNN方法尽管从原理上也依赖于极限定理,但在类别决策时,仅仅与极少量的相邻样本有关。因为KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其它方法更为适合。

    2、不惑

    该算法涉及3个主要因素:实例集、距离或相似的衡量、K的大小。

    一个实例的K最近邻是根据标准欧氏距离定义的。更精确地讲,把任意的实例集 x 表示为下面的特征向量:

    < a 1 ( x ) , a 2 ( x ) , a 3 ( x ) , . . . , a n ( x ) > <a_{1}(x),a_{2}(x),a_{3}(x),...,a_{n}(x)> <a1(x)a2(x)a3(x)...an(x)>

    其中 a r ( x ) a_{r}(x) ar(x)表示是实例集 x 对的第 r 个属性值,那么两个实例 x i x_{i} xi x j x_{j} xj的距离定义为 d ( x i , x j ) d(x_{i},x_{j}) d(xixj),公式为:

    ∑ r = 1 n [ a r ( x i − x j ) ] 2 \sqrt{\sum_{r = 1}^{n}[a_{r}(x_{i} - x_{j})]^{2}} r=1n[ar(xixj)]2

    有关KNN算法的几点说明:
    1. 在K最近邻学习中,目标函数值可以为离散值,也可以为实值。
    2. 我们先考虑学习以下形式的离散目标函数: f : ℜ n ⟶ V f:\Re^{n} \longrightarrow V fnV,其中V是有限集合 { v 1 , . . . , v s } \{v_{1},...,v_{s}\} {v1...vs}。下表给出了逼近离散目标函数的K近邻算法。
    3. 正如下表中所指出的,这个算法的返回值 f ′ ( x q ) f^{′}(x_{q}) f(xq)为对 f ( x q ) f(x_{q}) f(xq)的估计,它就是距离 x q x_{q} xq最近的k个训练样例中最普遍的f值。
    4. 如果我们选择k=1,那么“1近邻算法”就把 f ( x i ) f(x_{i}) f(xi)赋给 ( x q ) (x_{q}) (xq),其中xi是最靠近 x q x_{q} xq的训练实例。对于较大的k值,这个算法返回前k个最靠近的训练实例中最普遍的f值。
    逼近离散值函数f: Ân - V的K近邻算法

    在这里插入图片描述

    3、洞玄

    例子1)

    KNN能够说是一种最直接的用来分类未知数据的方法。下面通过图和文字明确说明K-NN是干什么的。
    在这里插入图片描述
    简单来说,KNN算法中,所选择的邻居都是已经正确分类的对象(红色、蓝色、绿色),该算法在定类决策上仅仅根据最邻近的K个样本的类别来决定待分样本所属的类别。

    例子2)

    如下图所示,有两类不同的样本数据,分别用蓝色的小正方形和红色的小三角形表示,而图正中间的那个绿色的圆所标示的数据则是待分类的数据。也就是说,现在, 我们不知道中间那个绿色的数据是从属于哪一类(蓝色小正方形or红色小三角形),下面,我们就要解决这个问题:给这个绿色的圆分类。
    在这里插入图片描述

    • 如果K=3,绿色圆点的最近的3个邻居是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。

    • 如果K=5,绿色圆点的最近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。

    我们可以看出,当无法判定当前待分类点是从属于已知分类中的哪一类时,我们可以依据统计学的理论看它所处的位置特征,衡量它周围邻居的权重,而把它归为(或分配)到权重更大的那一类。

    例子3)

    下图图解了一种简单情况下的K近邻算法,在这里实例是二维空间中的点,目标函数具有布尔值。正反训练样例用“+”和“-”分别表示。图中也画出了一个查询点 x q x_{q} xq。注意在这幅图中,1近邻算法把 x q x_{q} xq分类为正例,然而5近邻算法把 x q x_{q} xq分类为反例。
    在这里插入图片描述

    图解说明:

    左图画出了一系列的正反训练样例和一个要分类的查询实例 x q x_{q} xq。1近邻算法把 x q x_{q} xq分类为正例,然而5近邻算法把 x q x_{q} xq分类为反例。

    右图是对于一个典型的训练样例集合1近邻算法导致的决策面。围绕每个训练样例的凸多边形表示最靠近这个点的实例空间(即这个空间中的实例会被1-近邻算法赋予该训练样例所属的分类)。

    对前面的k邻算法作简单的修改后,它就可被用于逼近连续值的目标函数。为了实现这一点,我们让算法计算k个最接近样例的平均值,而不是计算其中的最普遍的值。更精确地讲,为了逼近一个实值目标函数,我们只要把算法中的公式替换为:
    在这里插入图片描述

    4、知命

    kNN算法因其提出时间较早,随着其他技术的不断更新和完善,kNN算法的诸多不足之处也逐渐显露,因此许多kNN算法的改进算法也应运而生:

    • 快速KNN算法。参考FKNN论述文献(实际应用中结合lucene)。

    • 加权欧氏距离公式。在传统的欧氏距离中,各特征的权重相同,也就是认定各个特征对于分类的贡献是相同的,显然这是不符合实际情况的,并且使得特征向量之间相似度计算不够准确,进而影响分类精度。加权欧氏距离公式,特征权重通过灵敏度方法获得(根据业务需求调整,例如关键字加权、词性加权等)。

    下面举一个例子,比如距离加权最近邻算法,根据它们相对查询点 x q x_{q} xq的距离,将较大的权值赋给较近的近邻。在上表逼近离散目标函数的算法中,我们可以根据每个近邻与 x q x_{q} xq的距离平方的倒数加权这个近邻的“选举权”。
    在这里插入图片描述
    在这里插入图片描述
    为了处理查询点 x q x_{q} xq恰好匹配到某个训练样例 x i x_{i} xi,从而导致分母为0的情况,我们令这种情况下的 f ′ ( x q ) f '(x_{q}) f(xq)等于 f ( x i ) f(x_{i}) f(xi)。如果有多个这样的训练样例,则我们使用它们中占多数的分类。

    我们也可以用类似的方式对实值目标函数进行距离加权,只要用下式替换上表的公式:
    在这里插入图片描述
    其中wi的定义与之前公式中相同:
    在这里插入图片描述
    注意这个公式中的分母是一个常量,它将不同权值的贡献归一化(例如,它保证如果对所有的训练样例 x i x_{i} xi f ( x i ) = c f(x_{i})=c f(xi)=c,那么 ( x q ) < − − c (x_{q})<--c (xq)<c)。

    注意以上k近邻算法的所有变体都只考虑k个近邻以分类查询点。

    如果使用按距离加权,那么允许所有的训练样例影响 x q x_{q} xq的分类,事实上这没有坏处,因为非常远的实例对 ( x q ) (x_{q}) (xq)的影响很小。考虑所有样例的惟一不足是会使分类运行得更慢。如果分类一个新的查询实例时考虑所有的训练样例,我们称此为全局(global)法。如果仅考虑最靠近的训练样例,我们称此为局部(local)法。

    5、天启

    • 算法优点:简单、易于理解、容易实现、通过对K的选择可具备丢噪音数据的健壮性

    • 算法缺点:

      1. 训练耗时短,测试耗时长。训练的时候仅需记忆所有数据即可,如果是传递指针的话,能够常数时间内完成 O(1)。
      2. 需要大量的空间储存已知的实例、算法的复杂度高(需要比较所有已知实例与要分类的实例)。
      3. 当样本分布不均衡时,比如其中一类样本过大(实例数据量过多)占主导的时候,新的未知实例容易被归类为这个主导样本,因为这类样本实例的数量过大,但这个新的未知实例实际并未接近目标样本,如下图:
        在这里插入图片描述
      4. 两点间距离公式不能提供足够的信息,比如:【CS231n】斯坦福大学李飞飞视觉识别课程笔记(五):图像分类笔记(下)
        在这里插入图片描述
        图中右侧的三张图片是在左侧图片上分别作出了某些修改后形成的,而通过精心的构建,这三张图片与左侧原本的图片有相同的距离,也就是说距离公式无法将他们区分开。而事实上,如果进行精心的设计,我们甚至可以让任意两张修改后的图片都与某张照片具有相同的距离。
      5. 维度灾难。为了能够有效的体现出K最近邻分类算法(K Nearest Neighbor)的“最邻近”这个概念,我们势必需要样本能够均匀的分布在整个空间中,将整个空间支撑起来。在一维或者二维的情况下还好说,如果假设一维需要4个样本点,那么二维需要16个样本点,而到了三维就需要64个样本点。所需的样本数量随着维数的增加呈现指数级增长的趋势,这无疑是灾难性的,所以被称作“维度灾难”。我们一张图片就算很小,10像素*10像素,再乘上RGB三个颜色值,一共有300个数值,这就意味着300维度,而 4 300 4^{300} 4300 是一个无法想象的天文数字,我们永远不可能取得足够多的数据。

    6、无距

    用空间内两个点的距离来度量。距离越大,表示两个点越不相似。距离的选择有很多,通常用比较简单的欧式距离。

    欧式距离
    在这里插入图片描述
    马氏距离:马氏距离能够缓解由于属性的线性组合带来的距离失真,是数据的协方差矩阵。
    在这里插入图片描述
    曼哈顿距离
    在这里插入图片描述
    切比雪夫距离
    在这里插入图片描述
    闵氏距离:r取值为2时:曼哈顿距离;r取值为1时:欧式距离。
    在这里插入图片描述
    平均距离
    在这里插入图片描述
    弦距离
    在这里插入图片描述
    测地距离
    在这里插入图片描述

    7、无矩

    《算法图解》学习笔记(十):K 最近邻算法(附代码)

    如果想要更多的资源,欢迎关注 @我是管小亮,文字强迫症MAX~

    回复【福利】即可获取我为你准备的大礼,包括C++,编程四大件,NLP,深度学习等等的资料。

    想看更多文(段)章(子),欢迎关注微信公众号「程序员管小亮」~

    在这里插入图片描述

    参考文章
    展开全文
  • 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表 该方法的思路是:如果一...
  • k最近邻算法(k-NN)是广泛用于分类和回归的机器学习算法。 k-NN算法被用于许多研究和工业领域,例如3维对象渲​​染,基于内容的图像检索,统计(熵和散度的估计),生物学(基因分类)等。kNN搜索的处理时间在许多...
  • 今天小编就为大家分享一篇K最近邻算法(KNN)---sklearn+python实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • K最近邻项目-源码

    2021-02-14 10:21:34
    K最近邻项目 介绍 K最近邻居是一种简单的算法,可以存储所有可用案例并根据相似性度量对新案例进行分类。 在这个项目中,我使用了人工数据集,并用更好的K值改进了模型。 安装 import pandas as pd import numpy as ...
  • 反向K最近邻查询需要确定以给定查询对象作为其k个最近邻之一的所有对象。然而由于大量应用需要处理未知数据,人们迫切需要能够处理未知对象的新算法。这里的主要问题是,一个对象属于RKNN结果集的事件不再是一个确定...
  • K最近邻算法

    千次阅读 2018-09-04 15:51:44
    K最近邻(kNN,k-NearestNeighbor)分类算法  是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。  kNN算法的核心思想是如果一个...

    K最近邻(kNN,k-NearestNeighbor)分类算法

      是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。
      kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 kNN方法在类别决策时,只与极少量的相邻样本有关。由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合。

    KNN算法的机器学习基础

      显示相似数据点通常如何彼此靠近存在的图像
      大多数情况下,相似的数据点彼此接近。KNN算法就是基于这个假设以使算法有用。KNN利用与我们童年时可能学过的一些数学相似的想法(有时称为距离、接近度或接近度),即计算图上点之间的距离。例如,直线距离(也称为欧氏距离)是一个流行且熟悉的选择。
      KNN通过查找查询和数据中所有示例之间的距离来工作,选择最接近查询的指定数字示例( K ),然后选择最常用的标签(在分类的情况下)或平均标签(在回归的情况下)。
      在分类和回归的情况下,我们看到为我们的数据选择正确的K是通过尝试几个K并选择最有效的一个来完成的。

    KNN算法的步骤

    1. 加载数据
    2. 将K初始化为你选择的邻居数量
    3. 对于数据中的每个示例
      3.1 根据数据计算查询示例和当前示例之间的距离。
      3.2 将示例的距离和索引添加到有序集合中
    4. 按距离将距离和索引的有序集合从最小到最大(按升序)排序
    5. 从已排序的集合中挑选前K个条目
    6. 获取所选K个条目的标签
    7. 如果回归,返回K个标签的平均值
    8. 如果分类,返回K个标签的模式"

    为K选择正确的值

      为了选择适合你的数据的K,我们用不同的K值运行了几次KNN算法,并选择K来减少我们遇到的错误数量,同时保持算法在给定之前从未见过的数据时准确预测的能力。
      一些trick:
      1)当我们将K值降低到1时,我们的预测会变得不稳定。相反,随着K值的增加,由于多数投票/平均,我们的预测变得更加稳定,因此更有可能做出更准确的预测(直到某一点)。最终,我们开始看到越来越多的错误。正是在这一点上,我们知道我们把K的价值推得太远了。
      2)如果我们在标签中进行多数投票(例如,在分类问题中选择模式),我们通常会将K设为奇数,以便有一个决胜局。"

    算法优劣

    1)优势
      该算法简单易行。
      没有必要建立模型,调整多个参数,或者做额外的假设。
      该算法是通用的。它可以用于分类、回归和搜索。"

    2)缺点
      随着示例和/或预测器/独立变量数量的增加,算法变得非常慢。KNN的主要缺点是随着数据量的增加变得非常慢,这使得在需要快速做出预测的环境中,变成了一个不切实际的选择。此外,有更快的算法可以产生更准确的分类和回归结果。
      然而,如果你有足够的计算资源来快速处理你用来预测的数据,KNN仍然有助于解决那些有依赖于识别相似对象的解决方案的问题。

    k-NN classification problem

    取一个新的观测向量x,将它分到 K 个离散的类 Ck (k=1,2,…,K) 之一。一般来说,类之间是互不相容的,因此,每一个观测只能被分到一个类中。

    大间隔最近邻居(Large margin nearest neighbor,LMNN)

    大间隔最近邻居分类算法是统计学的一种机器学习算法。该算法是在k近邻分类其中学习一种欧式距离度量函数。基于欧式距离度量学习函数的大间隔最近邻居分类算法能够很好的改善k近邻算法分类效果。

    为什么KNN分类中为什么有白色区域?

    答:没有获得任何一个区域的投票
      这白色区域应该是KNN无法决策的区域,比如KNN的类中有2个或2个以上的是最近的,要减少白色区域可以调整K值,或者修改最近邻的决策条件,再或者修正距离公式。

    课件中的demo

      地址:http://vision.stanford.edu/teaching/cs231n-demos/knn/
      1)k=1,其他参数任选,基本上不会有白色区域,因为总能在training data中找到最邻近的sample和相应的class,如果有两个sample的距离相等,那就对应了classes之间的边界。
      如下图所示。但是k=1时,很容易出现过拟合。
    这里写图片描述

    2)k>1,如下图所示,出现了该问题中的白色区域。回答这个问题先要弄清楚,k>1时,如何预测。
      若k=2,那么先计算得到与test sample相距最邻近的两个training samples,如果这两个samples属于相同的class,比如A,那么该test sample将被划为class A所在的区域。 但是如果这两个samples分别属于不同的class,比如A和B,那么在课程的例子中,就会被划为白色区域。 但是可以通过一些策略打破,比如当k=7,结果中3个A class的samples,3个B class的samples和1个C class的samples,那么必须从A和B中选择一个,而非划为White region。
      另外,k=2非常特殊,与k=7相比,更容易出现White region。比较k=2和k=7的结果,可以看出来,也很容易理解。
      如下图,k=2,很容易出现大面积的白色区域
    这里写图片描述

    如下图,k=7,相比k=2,不容易出现白色区域
      这里写图片描述

    展开全文
  • k-最近邻 (KNN) 分类器。 ANN 是用C++编写的,能够在O(N log N)时间内为给定数据集中的每个点找到 k最近邻。 该包提供了一个简单的界面来使用R ANN 库。 FastKNN 分类器 fastknn是为处理非常大的数据集(> 100k ...
  • 1. 算法思路通过计算每个训练样例到待分类样品的距离,取和待分类样品距离最近K个训练样例,K个样品中哪个类别的训练样例占多数,则待分类样品就属于哪个类别核心思想:如果一个样本在特征空间中的k个最相邻的样本...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,629
精华内容 10,251
关键字:

k最近邻