BallTree#
- class sklearn.neighbors.BallTree#
快速广义N点问题的BallTree算法
阅读更多的 User Guide .
- 参数:
- X形状类似阵列(n_samples,n_features)
n_samples是数据集中的点的数量,n_features是参数空间的维度。注意:如果X是double的C连续数组,那么数据将不会被复制。否则,将制作内部副本。
- leaf_size正整数,默认值=40
切换到暴力的点数。更改leaf_size不会影响查询的结果,但会显着影响查询的速度和存储构建的树所需的内存。 存储树所需的内存量大约为n_samples / leaf_size。针对指定
leaf_size
,叶节点保证满足leaf_size <= n_points <= 2 * leaf_size
,除非n_samples < leaf_size
.- metric字符串或DistanceMetric 64对象,默认=' minkowski '
用于距离计算的指标。默认值是“minkowski”,当p = 2时,它会产生标准的欧几里得距离。BallTree的有效指标列表由属性
valid_metrics
. See the documentation of scipy.spatial.distance 以及中列出的指标distance_metrics
有关任何距离指标的更多信息。- Additional keywords are passed to the distance metric class.
- Note: Callable functions in the metric parameter are NOT supported for KDTree
- and Ball Tree. Function call overhead will result in very poor performance.
- 属性:
- data内存视图
训练数据
- valid_metrics: list of str
有效距离指标列表。
示例
查询k近邻
>>> import numpy as np >>> from sklearn.neighbors import BallTree >>> rng = np.random.RandomState(0) >>> X = rng.random_sample((10, 3)) # 10 points in 3 dimensions >>> tree = BallTree(X, leaf_size=2) >>> dist, ind = tree.query(X[:1], k=3) >>> print(ind) # indices of 3 closest neighbors [0 3 1] >>> print(dist) # distances to 3 closest neighbors [ 0. 0.19662693 0.29473397]
Pickle和Unpickle一棵树。 请注意,树的状态保存在pickle操作中:不需要在解pickle时重新构建树。
>>> import numpy as np >>> import pickle >>> rng = np.random.RandomState(0) >>> X = rng.random_sample((10, 3)) # 10 points in 3 dimensions >>> tree = BallTree(X, leaf_size=2) >>> s = pickle.dumps(tree) >>> tree_copy = pickle.loads(s) >>> dist, ind = tree_copy.query(X[:1], k=3) >>> print(ind) # indices of 3 closest neighbors [0 3 1] >>> print(dist) # distances to 3 closest neighbors [ 0. 0.19662693 0.29473397]
查询给定半径内的邻居
>>> import numpy as np >>> rng = np.random.RandomState(0) >>> X = rng.random_sample((10, 3)) # 10 points in 3 dimensions >>> tree = BallTree(X, leaf_size=2) >>> print(tree.query_radius(X[:1], r=0.3, count_only=True)) 3 >>> ind = tree.query_radius(X[:1], r=0.3) >>> print(ind) # indices of neighbors within distance 0.3 [3 0 1]
计算高斯核密度估计:
>>> import numpy as np >>> rng = np.random.RandomState(42) >>> X = rng.random_sample((100, 3)) >>> tree = BallTree(X) >>> tree.kernel_density(X[:3], h=0.1, kernel='gaussian') array([ 6.94114649, 7.83281226, 7.2071716 ])
计算两点自相关函数
>>> import numpy as np >>> rng = np.random.RandomState(0) >>> X = rng.random_sample((30, 3)) >>> r = np.linspace(0, 1, 5) >>> tree = BallTree(X) >>> tree.two_point_correlation(X, r) array([ 30, 62, 278, 580, 820])
- get_arrays()#
获取数据和节点阵列。
- 返回:
- 数组:数组的数组
用于存储树数据、索引、节点数据和节点边界的数组。
- get_n_calls()#
获取通话次数。
- 返回:
- n_calls:int
距离计算呼叫次数
- get_tree_stats()#
获取树状态。
- 返回:
- tree_stats:int的tuple
(修剪数、叶片数、拆分数)
- kernel_density(X, h, kernel='gaussian', atol=0, rtol=1E-8, breadth_first=True, return_log=False)#
使用树创建时指定的距离度量,用给定核计算X点的核密度估计。
- 参数:
- X形状类似阵列(n_samples,n_features)
要查询的点数组。 最后一个维度应该与训练数据的维度相匹配。
- h浮子
内核的带宽
- kernel字符串,默认=“高斯”
指定要使用的内核。 选项是-“高斯”-“tophat”-“epanechnikov”-“指数”-“线性”-“cos”默认为core =“高斯”
- atolfloat,默认=0
指定所需的结果绝对公差。如果真实的结果是
K_true
,然后返回的结果K_ret
满足abs(K_true - K_ret) < atol + rtol * K_ret
默认值为零(即机器精度)。- rtolfloat,默认= 1 e-8
指定所需的结果相对公差。如果真实的结果是
K_true
,然后返回的结果K_ret
满足abs(K_true - K_ret) < atol + rtol * K_ret
默认值为1e-8
(i.e.机器精度)。- breadth_first布尔,默认=假
如果为True,请使用广度优先搜索。 如果为假(默认),请使用深度优先搜索。 对于紧凑的内核和/或高公差,广度优先通常更快。
- return_log布尔,默认=假
返回结果的对数。 这比返回窄内核的结果本身更准确。
- 返回:
- density形状X的nd数组。形状 [:-1]
(log)密度评估的数组
- query(X, k=1, return_distance=True, dualtree=False, breadth_first=False)#
查询树中的k个最近邻居
- 参数:
- X形状类似阵列(n_samples,n_features)
要查询的点数组
- kint,默认=1
要返回的最近邻数
- return_distance布尔,默认=True
如果为True,则返回距离和索引的数组(d,i)如果为False,则返回数组i
- dualtree布尔,默认=假
如果为True,则对查询使用双树形式:为查询点构建树,并使用树对来有效地搜索该空间。 随着点数的增加,这可以带来更好的性能。
- breadth_first布尔,默认=假
如果为True,则以广度优先的方式查询节点。否则,请以深度优先的方式查询节点。
- sort_results布尔,默认=True
如果为True,则返回时对每个点的距离和索引进行排序,以便第一列包含最近的点。否则,邻居将以任意顺序返回。
- 返回:
- iif return_distance == False
- (d,i)如果Return_Distance == True
- d形状X的nd数组。形状 [:-1] + (k,),dstyle =double
每个条目都给出了到相应点邻居的距离列表。
- i形状X的nd数组。形状 [:-1] + (k,),dype =int
每个条目都给出了相应点的邻居的索引列表。
- query_radius(X, r, return_distance=False, count_only=False, sort_results=False)#
向树查询半径r内的邻居
- 参数:
- X形状类似阵列(n_samples,n_features)
要查询的点数组
- r邻居返回的距离
r可以是单个值,也可以是形状为x的值数组。形状 [:-1] 如果每个点需要不同的半径。
- return_distance布尔,默认=假
如果为True,则返回每个点邻近点的距离如果为False,则仅返回邻近点注意,与select()方法不同,这里设置Return_Distance=True会增加计算时间。 对于Return_Distance=False,并非所有距离都需要显式计算。 默认情况下,结果不排序:请参阅
sort_results
关键字- count_only布尔,默认=假
如果为True,则仅返回距离r内点的计数如果为False,则返回距离r内所有点的索引如果Return_distance==True,则设置count_only=True将导致错误。
- sort_results布尔,默认=假
如果为True,距离和指数将在返回之前进行排序。 如果为假,则不会对结果进行排序。 如果Return_Distance == False,则设置sort_results = True将导致错误。
- 返回:
- count如果计数_only == True
- ind如果计数_only == False且返回_距离== False
- (ind, dist)如果计数_only == False且返回_距离== True
- count形状X的nd数组。形状 [:-1] ,dype =int
每个条目给出了相应点距离r内的邻居数量。
- ind形状X的nd数组。形状 [:-1] ,dype =对象
每个元素都是一个numpy integer数组,列出了相应点的邻居的索引。 请注意,与k邻居查询的结果不同,返回的邻居默认不按距离排序。
- dist形状X的nd数组。形状 [:-1] ,dype =对象
每个元素都是一个numpy双数组,列出了与i中的索引对应的距离。
- reset_n_calls()#
将呼叫数重置为0。
- two_point_correlation(X, r, dualtree=False)#
计算两点相关函数
- 参数:
- X形状类似阵列(n_samples,n_features)
要查询的点数组。 最后一个维度应该与训练数据的维度相匹配。
- r阵列状
一维距离数组
- dualtree布尔,默认=假
如果为True,请使用二元树算法。 否则,请使用单树算法。 双树算法对于大N具有更好的扩展性。
- 返回:
- countsndarray
计数 [i] 包含距离小于或等于r的点对的数量 [i]