为什么我们需要拟合k最近邻分类器?


Answers:


9

从概念上讲

拟合分类器意味着将数据集作为输入,然后输出分类器,该分类器是从可能的分类器空间中选择的。在许多情况下,通过一组参数来标识分类器(即与其他可能的分类器区分开)。通常通过解决优化问题或某些其他数值过程来选择参数。但是,在knn的情况下,分类器由训练数据本身识别。因此,在抽象级别上,拟合knn分类器仅需要存储训练集。

在实施层面

在新数据点上评估knn分类器需要在训练集中搜索其最近的邻居,这在训练集中较大时可能是一项昂贵的操作。正如RUser所提到的,有多种技巧可以加快搜索速度,通常可通过基于训练集创建各种数据结构来起作用。一般的想法是,分类新点所需的一些计算工作实际上是跨点通用的。因此,这项工作可以提前完成,然后重新使用,而不是针对每个新实例重复进行。使用这些技巧的knn实施将在培训阶段完成这项工作。例如,scikit-learn可以在fit()函数调用期间构造kd树或球树。

ķ

ķ


11

您可以以一种懒惰的方式实现它,并且在发现语言时可以进行不错的锻炼。(例如请参阅我的博客文章之一)。但是您也可以为数据建立索引,以进行预测(快得多)。

如果要素空间的维度为1,则根据此要素对点进行排序将有助于您更快地找到邻居(例如,使用示例二分式搜索)。在较大的维度上,排序没有自然的概括,但是您可以使用(按示例)四叉树为点建立索引。

查看源代码,您可以看到scikit learning中已实现了各种方法。并且有一些研究正在不断改进这些最近的邻居查询。


5

尽管其他回答者提出的观点肯定是有效且有趣的,但我想从严格的软件工程角度出发再指出一件事:

为了使其与他们的API一致

sklearn的Estimators除其他事项外,还应具有一种fit采用一个或两个类似于数组的方法(取决于它是有监督/无监督的估计器)以及许多实现特定的细节(Source)。

因此,即使knn的fit方法绝对绝不做任何事情,它也可能仍然存在,因为knn是估算器,而sklearn的开发人员以及他们贡献的代码都希望估算器具有一种fit方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.