首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sklearn.neighbors.NearestNeighbors - knn用于无监督学习?

sklearn.neighbors.NearestNeighbors - knn用于无监督学习?
EN

Data Science用户
提问于 2018-07-05 20:10:42
回答 2查看 6.6K关注 0票数 4

从基本理论上看,knn是一种有监督的算法,而k-均值是一种无监督的算法。

然而,在Sklearn有一个无监督学习(http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.NearestNeighbors.html#sklearn.neighbors.NearestNeighbors)的KNN的实现。

在SkLearn,这个无监督的knn到底是什么版本?

这是knn算法吗?

  • 如果是的话,它是如何被无监督的,因为根据定义,knn是受监督的?
  • 如果不是,那又是什么呢?
EN

回答 2

Data Science用户

回答已采纳

发布于 2018-07-05 20:39:15

该无监督版本简单地实现了不同的算法,为每个样本寻找最近的邻居(S)。

kNN算法由两个步骤组成:

  1. 计算和存储训练集中每个样本的k个最近邻(“训练”)
  2. 对于未标记的样本,从数据集中检索k个最近邻,并通过k个最近邻之间的多数投票/插值(或类似)预测标签(“预测/查询”)

无监督版本基本上只是第一步,即kNN算法的训练阶段。

(这很有用,因为如果数据集很大,则对所有样本(algorithm='brute')进行成对比较通常是不可行的。因此,为训练阶段实现了两种替代算法,利用先前的比较来减少距离计算的次数。参见文档这里)。)

票数 3
EN

Data Science用户

发布于 2018-07-10 12:37:31

混乱来自Sklearn设计他们的代码的方式。

短答案

您提到的“无监督”版本不是K-最近邻算法(它是实现的这里)。在它的说明中,它只写着:

“实施邻居搜索的无监督学习者。”

为了有效地执行邻居搜索,KNNClassifier实际上使用了这个学习者。Sklearn将它作为一个独立的学习者,因为其他算法,如KMeans,也需要执行邻居搜索。

长答案

有许多算法需要邻域搜索。KNN和K-指的是一些著名的。作为一种设计选择,Sklearn决定将邻居搜索部分作为自己的“学习者”来实现。

要找到一个最近的邻居,你显然可以计算所有成对距离,但它可能不是很有效。这就是为什么会有更聪明的方法来使用特定的数据结构,比如KD树或Ball树(顺便说一句,在高维数据上,Ball树的表现通常比KD树更好)。

如果您fit无监督的NearestNeighbors模型,您将根据为algorithm参数设置的值将数据存储在数据结构中。然后你可以在一个需要邻居搜索的模型中使用这个没有监督的学习者的kneighbors

票数 2
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/34061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档