s 提供了针对无监督和受监督的基于邻居的学习方法的功能。监督的基于最邻近的机器学习算法是值:对带标签的数据的分类和对连续数据的预测(回归)。 无监督的最近算法是许多其他学习方法的基础,尤其是流形学习(manifold learning)和频谱聚类(spectral clustering)。
最近邻方法的原理是找到距离新数据点最近的特定数量的训练样本,并从中预测标签。样本数可以是用户定义的常数(knn算法),也可以基于点的局部密度而变化(基于半径的邻居学习)。 距离通常可以是任何度量标准:标准欧几里德距离是最常见的选择,基于邻居的方法被称为非通用机器学习方法,因为它们仅“记住”其所有训练数据(可能转换为快速索引结构,例如Ball Tree或KD Tree)。
尽管最邻近算法十分简单,但它已成功解决了许多分类和回归问题,包括手写数字和卫星图像场景。作为非参数方法,它通常非常适用于在决策边界非常不规则的分类情况下。
一,无监督的最邻近算法无监督的最邻近算法,用于寻找最邻近的数据点,是其他最邻近算法的基础。
无监督的最邻近算法主要有:BallTree,KDTree和基于sklearn.metrics.pairwise中的例程的brute-force算法,用户可以通过关键字'algorithm'来制定寻找最邻近的算法,该关键字的值必须是['auto','ball_tree','kd_tree','brute']之一,当传递默认值“ auto”时,算法会尝试从训练数据中确定最佳的方法。
brute-force 是最原始的计算两个数据点之间的距离的算法,该算法的思想是计算数据集中每两个数据点之间的距离,找出距离最小的数据点。
K-D Tree:K维度树(k-dimensional tree),基于树来查找距离最小的数据点
Ball Tree:球树,KD 树对于低维度 (D<20) 的近邻搜索非常快, 当 D 增长到很大时, 效率变低;这就是所谓的 “维度灾难” 的一种体现;KD 树只能处理欧式距离;为了解决 KD 树在高维上效率低下的问题, ball 树应运而生,同时 Ball tree 可处理一般的距离。
举个例子,通过 NearestNeighbors()函数和algorithm来指定寻找最邻近数据点的算法:
>>> from sklearn.neighbors import NearestNeighbors >>> import numpy as np >>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) >>> nbrs = NearestNeighbors(n_neighbors=2, algorithm='ball_tree').fit(X) >>> distances, indices = nbrs.kneighbors(X)