精华内容
下载资源
问答
  • 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,不容易出现白色区域
      这里写图片描述

    展开全文
  • python实现K最近邻算法

    2020-09-20 20:16:58
    主要为大家详细介绍了python实现K最近邻算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 本篇文章主要介绍了python机器学习案例教程——K最近邻算法的实现,详细的介绍了K最近邻算法的概念和示例,具有一定的参考价值,有兴趣的可以了解一下
  • 机器学习K最近邻算法.py
  • 算法基础:k最近邻算法

    千次阅读 2019-03-06 21:21:40
    对于k最近邻算法的定义,百度百科是这样给出的:K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即...

    本博客所有内容均整理自《算法图解》,欢迎讨论交流~

    了解过机器学习这个概念,一定知道有一种名为k最近邻的算法,简称KNN。

    对于k最近邻算法的定义,百度百科是这样给出的:K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

    通俗来说,就是近朱者赤,近墨者黑的道理。在有标签的监督学习中,k最近邻一般用于分类,即根据与某一个特征点离得最近的k个点的分类来决定该点的分类,一般是少数服从多数的决策;而在无标签的无监督学习中,k最近邻一般用于聚类,即将某点及与其离得最近的k个点聚到同一个类别中。不过话是这么说,一般对于无监督学习,人们通常使用的是K-Means算法,即k均值算法。


    1、分类问题

    对于KNN算法的应用,我们首先来看一个例子。

    对于下面的这个水果,我们如何判断它具体是哪一个品种呢?

     

    当然,理论上来说,我们必须根据生活经验才能做出判断,我们知道,类似于图中水果的形状和色泽的水果有橙子和柚子,同时我知道,柚子通常比橙子更大,更红。

    所以我的脑子里有了如下所示的图表:

     

    所以根据这个图表,以及上图中的水果又大又红的特点,我判断该水果很可能是柚子!

    这并不难,但是下面这样的水果呢?

     

    这个水果的大小和色泽都趋近于平庸,不大不小,不红不橙。

    那么问题来了,我们如何判断这个水果的品种呢?

    试想一下生活中的经验,对于一个陌生人,我们如何判断这个人的职业呢?我们一般会根据这个人的朋友来判断,如果这个人的朋友都是什么科学家啊工程师啊之类的,我们就认为这个人很可能是一个科研工作者;而如果这个人的朋友大多是什么记者啊播音员啊导演啊之类的,我们就认为这个人很可能是一个新闻传媒工作者。

    这是自然而然的事情,但是这个自然而然的判断思路,其实就是k最近邻算法。

    我们回到上面的问题,要判断图中水果的品种,我们就来看它的“朋友”,当然,这里我们把它的“朋友”称为“邻居”。

    我们来看看离它最近的三个邻居:

     

    如图所示,在离它最近的三个邻居中,有两个是橙子,有一个是柚子,所以根据投票法(其实就是少数服从多数)的决策,我们认为这个水果是一个橙子。在这里我们选择了3个邻居,所以我们使用的是3最近邻算法,其实k最近邻算法的k就是指的选择几个邻居来判断。


    2、创建推荐系统

    现在我们来看一个更加深入的例子。

    假设你是Netflix,要为用户创建一个电影推荐系统。从本质上来说,这个问题其实非常类似于上面的水果分类问题!

    我们首先可以对所有用户创建一个类似于上面橙子和柚子一样的图表:

     

    这些用户在图表中的位置取决于其电影口味,所以电影喜好相似的用户之间距离比较近。假设你要向网名为“小兔子”的用户推荐电影,可以找出五位与他最接近的用户。

     

    在找出了这五位距离最近的用户之后,我们只需要在这五位用户喜欢的电影中选择几部推荐给“小兔子”,就很可能“小兔子”会喜欢我们推荐的这些电影。

    所以基于同样的道理,我们只需要根据这样的电影喜好图表就可以创建一个很好的推荐系统。


    3、特征抽取

    看了上面两个例子之后,问题来了,我们确实可以基于上面的水果图表和电影喜好图表来进行水果的分类和电影推荐系统的创建,但是,我们怎么知道图表中两点之间的距离呢?又怎么确定两位用户对于电影的喜好相似程度呢?

    在前面的水果示例中,我们根据水果的大小颜色来判断品种,其实这里的大小和颜色就是两个特征。我们最终依靠的就是这些特征来完成距离的度量和相似程度确定。

    现在假设有三个水果,我们可以抽取它们的特征。

     

    再根据这些特征画图。

     

    从上图来看,哪怕没有标签,我们也可以大胆预测,水果A和水果B极有可能是同一个品种,而水果C则是另外的品种。其实这就是使用KNN来进行聚类。

    要计算两点的距离,我们使用毕达哥拉斯公式。

     

    这样求出来的结果被称为欧几里得距离。

    基于上面的毕达哥拉斯公式,我们可以求出图中A,B,C三点的两两之间的欧几里得距离。

     

    这个距离结果印证了我们之前的直觉预测:A和B很像,而C则很不同。

    如果我们有标签,如:横坐标值和纵坐标值都较小的水果是橙子,而横坐标值和纵坐标值都较大的水果是柚子,那么根据上图三点的位置和彼此之间的距离,我们就可以大胆猜测A和B是橙子,而C是柚子了。

    现在我们再来看看推荐系统。对于推荐系统,我们需要比较的Netflix用户,所以就需要以某种方式将他们放到图表中去。因此,我们需要将每位用户都转换为一组坐标,就像之前对水果所做的那样。

     

    转换成坐标之后,我们就可以把用户转换成坐标轴中的一个点了。当这些用户都抽象成一个点之后,我们就可以根据毕达哥拉斯公式来计算它们彼此之间的距离了。

    但是我们如何将用户转换成坐标呢?下面是一种很直观的方式:用户注册时,我们就要求每一位注册新用户指出他们队各种电影的喜爱程度。这样,对于每位用户,我们就拥有一组数字了!

     

    假设其中数字从1~5,数字越大表示越喜欢,数字越小表示越讨厌。

    所以,我们从上面的图表可以看出,Priyanka和Justin都喜欢爱情片和生活片,讨厌恐怖片;而Morpheus喜欢动作片,讨厌爱情片和生活片。

    前面判断水果是橙子还是柚子时,我们对每种水果都用2个数字来表示,分别代表大小和形状。而这里,我们有5个特征,所以每位用户都使用5个数字来表示。

     

    于是,对于计算各个用户之间的相似程度,我们依然可以使用毕达哥拉斯公式,只不过不是二维的版本,而是五维的版本。

     

    对于二维的情况,我说过毕达哥拉斯公式计算的是两个点之间的欧几里得距离,那么对于五维的版本呢?其实这时候计算获得的依然是距离,只是我们无法从直观上感受五维空间的距离,所以我们一般把这种距离称为相似程度。

    根据计算,Priyanka和Justin之间的距离为2,而Priyanka和Morpheus之间的距离为\sqrt{24}。所以很明显,Priyanka的喜好更接近于Justin。

    所以我们就可以轻松地创建一个针对于Priyanka的推荐系统了,只要是Justin喜欢的电影,我们就将其推荐给Priyanka,反之亦然。

    所以这也提醒了我们,当你注册了Netflix之后,Netflix总是会不断提醒你:多给电影评分吧!其实这是因为你评论的电影越多,Netflix就越能较准确地判断出你哪些用户类似,所以给你的推荐就越符合你的胃口了。


    4、回归问题

    前面介绍的都是离散点的分类问题,接下来我们来看看连续点的回归问题。

    假设你不仅要向Priyanka推荐电影,还要预测他将给某一部电影打多少分,怎么来解决这个问题呢?

    首先,我们找出与他最近的5个用户,假设为Justin,JC,Joey,Lance和Chris。

    现在你要预测Priyanka会给电影Pitch Perfect打多少分,我们就来先看看Priyanka的最近的五个邻居给这部电影打了多少分。

     

    有了这些结果之后,我们对这些人打的分求平均,结果为4.2。这就是你预测的Priyanka将给这部电影打的分数。因为这个值不是一个离散值,例如我们求出的最终平均结果有可能是\sqrt{24}这样的值,所以是连续的,因而这是一个回归问题。

    KNN主要就是可以做两个基本工资——分类和回归:

    • 分类:一般而言就是编组。
    • 回归:一般而言就是预测出一个数字,可以是小数甚至无穷小数。

    回归也很有用。假设你经营着一家面包店,每天都做新鲜面包,需要根据如下一组特征来预测当天该烤多少条面包才能效益最大化:

    • 天气指数,1~5,1表示天气很糟,5表示天气很好。
    • 是否是周末或节假日,如果是则为1,否则为0。
    • 有没有活动,有活动为1,无活动为0。

    你还有一些历史数据,记录了在各种天气指数、周末或节假日或普通日以及有活动或无活动的日子里售出的面包数量。

     

    而今天是周末,天气不错,是否有活动未知。

    根据以上信息,我们如何预测今天能售出多少条面包呢?使用KNN!

    首先,我们定义算法中的K的值为4,其实K的值为多少一般来说根据经验来定,当然也可以多次迭代来计算出最优K值,也可以让K取不同值然后根据结果的后验概率来确定K值,这些都是更加复杂的内容了。后面也会讲到普通情况下的K值选取。

    总之在这里,为解决预测面包的问题,我们就规定了找出最接近的4个邻居。

    将今天的数组(4,1,\varnothing)与前面的6个历史数据进行对比,计算它们6个数据与今天的数据之间的距离,如下图所示:

    选出其中距离最近的4个,A,B,D,E。将这4天售出的面包数进行平均,结果为218.75。这就是你今天要烤的面包数!


    5、计算距离的公式

    前面计算两位用户的距离时,我们都是使用的毕达哥拉斯距离公式。其实有时候,该公式不一定最适用。

    试想下面的情况,有两位品味非常类似的用户,但其中一位打分时更谨慎,比如说,他们都喜欢《哈利波特》,但Paul给了5星,而Rowan却只给了4星。其实Rowan一样非常非常喜欢《哈利波特》,只是他打分过于保守,可能他就打过的最高分就是4星了,这种情况下,如果你使用毕达哥拉斯距离公式去计算距离,可能Paul和Rowan就不是邻居了,但其实他们的口味非常类似。

    上面的情况其实在实际生活中屡见不鲜,所以在实际工作中,我们经常使用余弦相似度来计算两位用户之间的距离。

    余弦相似度不计算两个矢量的距离,而比较它们的角度,因此更适合处理前面所说的情况。

    具体有关余弦相似度的内容这里不再详述,请参考余弦相似度的百度百科

    另外,还有一种有效的方法是使用皮尔逊相关系数来评价。如果某人总是倾向于给出比另一个人更高的分值,而二者的分值之差又始终保持一致,则他们依然可能会存在很好的相关性。这就是皮尔逊相关系数的优点所在。

    皮尔逊相关系数的计算公式如下所示:

     

    有关皮尔逊相关系数的具体内容请参考皮尔逊相关系数的百度百科


    6、挑选合适的特征

    其实,还有一个非常影响结果的事情,那就是挑选的特征。

    对于上面的水果分类问题,我们根据一个水果的大小和颜色来判断它是橙子还是柚子,那是因为我们挑选了“大小”和“颜色”这两个特定的特征来进行判断的,但如果我们挑选的特征是“形状”和“重量”呢?

    那完了,对于一个橙子和一个柚子,可能都是球形的,然后重0.5kg,这两个特征根本无法判断一个水果是橙子还是柚子。

    又假设你只让用户给《玩具总动员》《玩具总动员2》和《玩具总动员3》评分,这就根本无法将用户的电影欣赏品味体现出来!

    所以进行KNN时,挑选合适的特征进行比较至关重要

    所谓合适的特征,必须要有以下几个特点:

    • 与要进行的分类或回归紧密相关的特征(例如,要预测水果的品种,就不要挑选今天是晴天还是雨天这种不相关的特征)。
    • 不偏不倚的特征(例如,如果只让用户给喜剧片打分,就无法判断他们是否喜欢动作片)。
    • 有区分度的特征(例如,要判断是橙子还是柚子,就不要选择“形状”作为特征,因为这两种水果都是球形的)。

    对于挑选合适的特征,上面的三个特点也只是一些普适情况,根本就没有放之四海皆准的法则,必须在实际工作中考虑到各种因素,综合做出选择。


    7、K值的经验选取

    上面说到预测售出面包数量的例子时,我很暴力地选择了4作为K的值,即找出最近的4个邻居。

    那么对于K值的选取,其实是一门很复杂的技术。前面讲到了,可以迭代最优,可以使用后验概率最优,甚至可以使用极大似然函数作为选取准则。

    但是在这样一个K值选取的步骤上就花费这么大心血显得有些本末倒置了。 一般来说,K值的选取不会太大程度地影响最终的结果,只要选择好了特征,选择好了计算距离的公式,得到的结果就不会太坏。

    而且,更何况我们还可以先随便选一个K值,根据最后得出的结果的好坏来修正K的取值。这样一定是可以得到最佳的K值的。

    其实根据经验来说,对于总共有N个数据可供使用,即我们根据N个用户的评分情况来预测Priyanka对某部电影的评分,一般来说我们会选择sqrt(N)(即\sqrt{N})来作为K的值。

    展开全文
  • 基于K最近邻算法的票房预测.pptx
  • 基于拉曼光谱与k最近邻算法的酸奶鉴别
  • 今天小编就为大家分享一篇K最近邻算法(KNN)---sklearn+python实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • k最近邻算法是一种经典的机器学习分类算法,最早由Cover T和Hart P于1967年提出。对原论文感兴趣的同学可下载此论文Nearest neighbor pattern classification。 算法概念 k最近邻,英文名为k-Nearest Neighbor,...

    k最近邻算法是一种经典的机器学习分类算法,最早由Cover T和Hart P于1967年提出。对原论文感兴趣的读者可下载此论文Nearest neighbor pattern classification

    算法概念

    k最近邻,英文名为k-Nearest Neighbor,简称为kNN,是一种极其简单的机器学习分类算法,甚至可能是最简单的分类算法。其中,k表示样本的邻居数。k最近邻算法思想可以形象地归纳为一句话,“少数服从多数”。它没有训练过程,是“懒惰学习”的著名代表。所谓“懒惰学习”,就是在模型的训练阶段只是记录了训练样本,省略了显式的训练过程,待收到测试样本(待分类样本)时直接对其进行分类的学习方法的统称。对“懒惰学习”感兴趣的读者可参考文献Lazy learning

    算法思想

    上图
    上图中有三种点,其中绿色方块与红色三角已知其类别,分别为1与-1,蓝色圆点类别未知。根据“少数服从多数”的分类原则,如果k=3,则蓝色圆点的邻居有1个绿色方块和2个红色三角,因此蓝色圆点类别被确定为-1;如果k=5,则蓝色圆点的邻居有3个绿色方块和2个红色三角,因此蓝色圆点类别被确定为1。

    算法过程

    从上述的简述中,不难看出,k最近邻分类算法的核心就是k的选择与如何寻找样本的邻居。k的选择视情况而定,一般在3~20之间,在此不再赘述。而寻找样本的邻居实际上就是寻找与样本相似的样本。样本在空间中可被表示为一个点,而样本间的相似性,可以通过计算样本间的“距离”进行表示。距离与相似性成反相关关系。因此,寻找样本的邻居的流程如下:

    1. 选取某一相似性度量函数,如欧几里得距离,曼哈顿距离等;

    2. 根据选定的相似性度量函数计算待分类样本与其他样本之间的距离;

    3. 计算完毕后,按照距离的大小进行排序(升序),选取前k个样本,即为该样本的邻居。

    常用相似性度量函数

    从上述关于k最近邻算法思想的简述中不难看出,相似性度量函数是至关重要的。以下列举了几种常用相似性度量函数。

    • 欧几里得距离
      d ( x , y ) = ∑ k = 1 n ( x k − y k ) 2 d(x,y)=\sqrt{\sum_{k=1}^{n}(x_k-y_k)^2} d(x,y)=k=1n(xkyk)2
      其中,n是x和y的维度, x k x_k xk y k y_k yk分别是x和y上第k个分量的值。

    • 曼哈顿距离
      d ( x , y ) = ∑ k = 1 n ∣ x k − y k ∣ d(x,y)=\sum_{k=1}^{n}|x_k-y_k| d(x,y)=k=1nxkyk
      其中,n是x和y的维度, x k x_k xk y k y_k yk分别是x和y上第k个分量的值。

    • 闵可夫斯基距离
      d ( x , y ) = ( ∑ k = 1 n ∣ x k − y k ∣ r ) 1 r d(x,y)=(\sqrt{\sum_{k=1}^{n}|x_k-y_k|^r})^\frac{1}{r} d(x,y)=(k=1nxkykr )r1
      其中,n是x和y的维度, x k x_k xk y k y_k yk分别是x和y上第k个分量的值。,r是参数。注意,n与r不同,n是向量的维度,r是空间的维度。此外,细心的读者可能已经发现,当r=1时,闵可夫斯基距离距离即为曼哈顿距离;当r=2时,闵可夫斯基距离距离即为欧几里得距离。

    算法优缺点

    俗话说得好,人无完人,而算法本身也有各自的优缺点。至于k最近邻算法,则其优缺点如下:

    1. 优点
    • k最近邻思想简单易懂,实现难度低,无需训练。
    1. 缺点
    • 在分类时,k最近邻必须计算待分类样本与全体样本的距离,计算量大,需要消耗很长的时间。
    • 当样本不平衡时,k最近邻的分类结果会偏向于样本数量多的类别。
    展开全文
  • spark-knn, 关于 Spark,k 最近邻算法 火花 knn wip 。Apache Spark 上的k 最近邻算法( k nn ) 。 这将使用混合溢出树方法实现高精度和搜索效率。 k nn的简单性和缺乏优化参数,使它的成为许多机器学习问题的有用...
  • K最近邻算法(介绍)

    千次阅读 2017-09-16 11:08:06
    问题用K最近邻算法创建分类系统 学习特征抽取 学习回归,即预测数值 学习K最近邻算法的应用案例和局限性 K最近邻(k-nearest neighbours, KNN)算法K最近邻算法是指在一个坐标系中(前提是把元素放入坐标系【So,...

    问题

    用K最近邻算法创建分类系统
    学习特征抽取
    学习回归,即预测数值
    学习K最近邻算法的应用案例和局限性
    

    K最近邻(k-nearest neighbours, KNN)算法

    K最近邻算法是指在一个坐标系中(前提是把元素放入坐标系【So,问题来了,怎么把他们放入坐标系?他们在坐标系的位置怎么确定?】),其中一个点的特性或者数值可以由离他最近的几个点求得,(原理是因为,他们所处的位置差不多,其会具有相当大的共性,他们之间更相似一些,这是一种猜测)
        想法一:其实不用坐标系也可以,可以使用集合,对于一个未知的集合,可以与其他集合做交集,与其交集最大的几个集合与他最相似
            【其实还是寻找共性,判断相似】
        【So,问题是什么叫相似?相似的程度如何判定?】
    

    第一个问题:特征抽取

    对于不同的系统,不同元素需要考虑的特点不同,可以根据自己的标准将各元素进行数字化,以一个数值集合的形式表示一个元素的特征,
        比如对于长方体,可以由长宽高三个标准度量,形成一个(x,y,z)的集合
    能否挑选合适的特征事关KNN算法的成败
    

    第二个问题:相似程度的判定

    现在已经使用一套标准将元素数值化,
        一个元素可能有n个数值来表示,那么其就可以放入一个n维坐标系,
            虽然当维数超过4时,我们很难想象这个坐标系具体的样子,可是这并不妨碍我们计算相似程度【愚蠢的自信。。。】
        对于放入一个2维坐标系的两个点来说,一个为(x1,y1),另一个为(x2,y2),两点之间的距离为    sqrt( (x1-y1)^2 +(x2-y2)^2 )【这个叫毕达哥拉斯公式,其实就是求空间中两点的距离公式】,对于三维坐标系则是以此类推,
            我们使用这个公式的结果来比较元素之间的相似程度。
        【除了计算距离的方法,还有一种计算角度的方法,叫余弦相似度,要深入KNN还得再看看】
    

    既然我们可以对一个未知元素根据其相邻元素判断他与其他元素的相似程度,那么可不可以猜测这个元素的特点(这里所说的特点不是将其定位在坐标系中的特点,是额外的特点)呢?

        可以,这就是回归。其实也是根据其最近的k近邻来推测他的特点。
        在对元素打标签时,需要使用合适的特征来判断元素。
    

    机器学习简介

    KNN算法对于机器学习可能很初级,不过正是因为简单,他反而可以让你很快的了解一下,还能有些理解。
    机器学习是想让电脑更聪明,而KNN算法通过模仿人的解决方法,可以对一些行为做出预测,可以对大量元素进行分类,可以根据预测的结果进行推荐,看起来还是挺聪明的。
    
    训练
        对于机器学习,首先要学会抽取元素的特征,这需要大量的例子,提取的特征可能很复杂,这一过程叫做训练,让他有些基础数据,要不怎么比对,也没法分类了。
    朴素贝叶斯分类器
        在经过大量训练后,再接触到新的元素可以使用朴素贝叶斯分类器判断其属于某个类别的概率,这个和KNN挺像的
        至于朴素贝叶斯分类器怎么实现的,还没看。。。
    
    展开全文
  • K最近邻算法(K-NN)

    千次阅读 2018-10-31 15:57:52
    K最近邻算法是一种简单但目前最常用的分类算法,也可用于回归。 KNN没有参数(不对数据潜在分布规律做任何假设),基于实例(不建立明确的模型,而是通过具体的训练实例进行预测),用于监督学习中。 K-NN算法怎么...
  • KNN K最近邻算法

    2017-03-11 14:02:05
    K Nearest Neighbor,KNN,K最近邻算法。 算法原理: (1)计算未知类别数据点与已知类别数据点之间的距离,并按降序排序。 (2)选取与未知类别数据点距离最小的k个点。 (3)以k个点中出现频率最高的类别...
  • 基于同心圆扫描线和加权K最近邻算法的手势识别
  • 基于k最近邻算法的近类别支持向量机用于phi-OTDR事件识别
  • 题 目 k-最近邻算法实现 学生 学生学号 专业班级 指导教师 2015-1-2 实验二 k-最近邻算法实现 实验目的 加强对k-最近邻算法的理解 锻炼分析问题解决问题并动手实践的能力 实验要求 使用一种你熟悉的程序设计语言如...
  • 机器学习案例研究6 用户定义的K最近邻算法
  • 题 目 k-最近邻算法实现 学生姓名 学生学号 专业班级 指导教师 2015-1-2 实验二k-最近邻算法实现 一 实验目的 加强对k-最近邻算法的理解 锻炼分析问题解决问题并动手实践的能力 二 实验要求 使用一种你熟悉的程序...
  • 数据挖掘十大经典算法之K最近邻算法 k-最近邻算法是基于实例的学习方法中最基本的,先介绍基于实例学习的相关概念。  基于实例的学习  1.已知一系列的训练样例,很多学习方法为目标函数建立起明确的一般化...
  • 该模型使用K最近邻算法,这是一种懒惰算法,可提供较高的准确性。 所提出的方法将有助于分析补充学生,同时教师可以分析大概有多少学生将获得补充,并决定他/她在教书时应该给予多少额外的关注。
  • 基于值差度量和聚类优化的K最近邻算法在银行客户行为预测中的应用.pdf
  • k最近邻算法(kNN)是一个十分简单的分类算法,该算法包括两个步骤:(1)在给定的搜索训练集上按一定距离度量,寻找一个k的值。(2)在这个kNN算法当中,根据大多数分为一致的类来进行分类。kNN算法具有的非参数...
  • KNN-K最近邻算法 什么是KNN算法 KNN算法是寻找最近的K个数据,推测新数据的分类 算法原理 通用步骤 计算距离(常用有欧几里得距离、马氏距离) 升序排序 取前K个 加权平均 K的选取 K太大:会导致分类模糊 K太小...
  • K最近邻的算法的原理;在分类任务中的应用;在回归分析中的应用;使用K最近邻算法对酒的分类进行分类。
  • Python之K最近邻算法

    千次阅读 2019-04-15 10:48:35
    K最近邻(k-nearest neighbours,KNN)算法: 是指给定一个训练数据集,将新输入的实例,在训练数据集中找到与该实例最邻近的K个实例(K表示指定的最近邻的数量,K个邻居), 这K个实例的多数属于某个类,就把该...
  • 输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,433
精华内容 8,973
关键字:

k最近邻算法