sklearn.neighbors.BallTree?

class sklearn.neighbors.BallTree(X, leaf_size=40, metric='minkowski', **kwargs)

BallTree用于快速廣義N-point問題

參數 說明
X array-like of shape (n_samples, n_features)
n_samples是數據集中的點數,n_features是參數空間的維數。 注意:如果X是C連續的雙精度數組,則不會復制數據。 否則,將進行內部復制。
leaf_size positive int, default=40
轉換為蠻力點的點數。 更改leaf_size不會影響查詢的結果,但是會顯著影響查詢的速度以及存儲構造的樹所需的內存。 存儲樹比例尺所需的內存量約為n_samples / leaf_size。 對于指定的leaf_size,請確保葉子節點滿足leaf_size <= n_points <= 2 * leaf_size,除非n_samples <leaf_size。
metric str or DistanceMetric object
樹使用的距離度量。 默認值=“ minkowski”,其中p = 2(即歐氏度量)。
有關可用度量的列表,請參見DistanceMetric類的文檔。
ball_tree.valid_metrics給出了對BallTree有效的度量的列表。
其他關鍵字將傳遞到距離度量標準類。
注意:KDTree和Ball Tree 中不支持metric參數中的可調用函數。
函數調用開銷將導致非常差的性能。
屬性 說明
data memory view
訓練數據

示例 查詢k-最近鄰

>>> import numpy as np
>>> rng = np.random.RandomState(0)
>>> X = rng.random_sample((103))  # 10 points in 3 dimensions
>>> tree = BallTree(X, leaf_size=2)              # doctest: +SKIP
>>> dist, ind = tree.query(X[:1], k=3)                # doctest: +SKIP
>>> print(ind)  # indices of 3 closest neighbors
[0 3 1]
>>> print(dist)  # distances to 3 closest neighbors
0.          0.19662693  0.29473397]

請注意,樹的狀態是在pickle操作中保存的:解開時不需要重建樹。

>>> import numpy as np
>>> import pickle
>>> rng = np.random.RandomState(0)
>>> X = rng.random_sample((103))  # 10 points in 3 dimensions
>>> tree = BallTree(X, leaf_size=2)        # doctest: +SKIP
>>> s = pickle.dumps(tree)                     # doctest: +SKIP
>>> tree_copy = pickle.loads(s)                # doctest: +SKIP
>>> dist, ind = tree_copy.query(X[:1], k=3)     # doctest: +SKIP
>>> 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((103))  # 10 points in 3 dimensions
>>> tree = BallTree(X, leaf_size=2)     # doctest: +SKIP
>>> print(tree.query_radius(X[:1], r=0.3, count_only=True))
3
>>> ind = tree.query_radius(X[:1], r=0.3)  # doctest: +SKIP
>>> 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((1003))
>>> tree = BallTree(X)                # doctest: +SKIP
>>> 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((303))
>>> r = np.linspace(015)
>>> tree = BallTree(X)                # doctest: +SKIP
>>> tree.two_point_correlation(X, r)
array([ 30,  62278580820])

方法

方法 說明
get_arrays() 獲取數據和節點數組。
get_n_calls() 獲取通話數量。
get_tree_stats() 獲取樹狀態。
kernel_density(, X, h[, kernel, atol, …]) 使用在樹創建時指定的距離度量,使用給定的內核計算點X處的內核密度估計。
query(X[, k, return_distance, dualtree, …]) 查詢樹中最近的k個臨近點
query_radius(X, r[, return_distance, …]) 查詢樹中半徑為r的臨近點
reset_n_calls() 將會話次數重置為0。
two_point_correlation(X, r[, dualtree]) 計算兩點相關函數
__init__(, /, *args, **kwargs)

初始化self, 請參閱help(type())以獲得準確的說明.

get_arrays()

獲取數據和節點數組。

返回值 說明
arrays: tuple of array
用于存儲樹數據,索引,節點數據和節點邊界的數組。
get_tree_stats()

獲取樹狀態

返回值 說明
tree_stats tuple of int
(修剪數量,葉子數量,分割數量)
kernel_density(, X, h, kernel='gaussian', atol=0, rtol=1E-8, breadth_first=True, return_log=False)

使用在樹創建時指定的距離度量,使用給定的內核計算點X處的內核密度估計。

參數 說明
X array-like of shape (n_samples, n_features)
要查詢的點數組。 最后維度應與訓練數據的維度匹配。
h float
內核的寬度
kernel str, default=”gaussian”
指定要使用的內核。 選項為-'gaussian'-'tophat'-'epanechnikov'-'exponential'-'linear'-'cosine'默認為kernel ='gaussian'
atol, rtol float, default=0, 1e-8
指定結果的所需相對和絕對公差。 如果真實結果為K_true,則返回的結果K_ret滿足abs(K_true-K_ret)<atol + rtol * K_ret兩者的默認值為零(即機器精度)。
breadth_first bool, default=False
如果為True,則使用廣度優先搜索。 如果為False(默認),則使用深度優先搜索。 對于緊湊的內核和/或高公差,廣度優先通常更快。
return_log bool, default=False
回結果的對數。 這比返回狹窄內核的結果本身更準確。
返回值 說明
density ndarray of shape X.shape[:-1]
(對數)密度評估的數組
query(X, k=1, return_distance=True, dualtree=False, breadth_first=False)

查詢樹中最近的k個臨近點

參數 說明
X array-like of shape (n_samples, n_features)
要查詢的點數組
k int, default=1
要返回的最近臨近點的數量
return_distance bool, default=True
如果為True,則返回距離和索引的元組(d,i);如果為False,則返回數組i
dualtree bool, default=False
如果為True,則對查詢使用雙樹形式:對查詢點構建一棵樹,并使用這對樹來有效地搜索該空間。 隨著點數的增加,這可以導致更好的性能。
breadth_first bool, default=False
如果為True,則以廣度優先的方式查詢節點。 否則,以深度優先的方式查詢節點。
sort_results bool, default=True
如果為True,則在返回時對每個點的距離和索引進行排序,以便第一列包含最近的點。 否則,將以任意順序返回臨近點。
返回值 說明
i: if return_distance == False
(d,i): if return_distance == True
d: ndarray of shape X.shape[:-1] + k, dtype=double<br> 每個條目都列出了到相應點的臨近點的距離列表。
i indarray of shape X.shape[:-1] + k, dtype=int<br> 每個條目給出相應點的鄰近點的索引列表。
query_radius(X, r, return_distance=False, count_only=False, sort_results=False)

查詢樹中半徑為r的臨近點

參數 說明
X array-like of shape (n_samples, n_features)
要查詢的點數組
r distance within which neighbors are returned
r可以是單個值,也可以是形狀為x.shape [:-1]的值的數組,如果每個點都需要不同的半徑。
return_distance bool, default=False
如果為True,則返回到每個點的臨近點的距離;如果為False,則僅返回臨近點的注意。請注意,與query()方法不同,此處設置return_distance = True會增加計算時間。 對于return_distance = False,并非所有距離都需要顯式計算。 默認情況下,結果未排序:請參見sort_results關鍵字。
count_only bool, default=False
如果為True,則僅返回距離r內的點的計數;如果為False,則返回距離r內所有點的索引。如果return_distance == True,則設置count_only = True將導致錯誤。
sort_results bool, default=False
如果為True,則距離和索引將在返回之前進行排序。 如果為False,則不會對結果進行排序。 如果return_distance == False,則將sort_results = True設置將導致錯誤。
返回值 說明
- count:if count_only == True
ind:if count_only == False and return_distance == False
(ind, dist):if count_only == False and return_distance == True
count: ndarray of shape X.shape[:-1], dtype=int
每個條目給出在對應點的距離r內的臨近點數。
ind: ndarray of shape X.shape[:-1], dtype=object
每個元素都是一個numpy整數數組,列出相應點的臨近點的索引。 請注意,與k臨近點查詢的結果不同,默認情況下,返回的鄰近點不按距離排序。
dist: ndarray of shape X.shape[:-1], dtype=object
每個元素都是一個numpy雙數組,列出與i中的索引相對應的距離。
reset_n_calls()

將會話次數重置為0。

two_point_correlation(X, r, dualtree=False)

計算兩點相關函數

參數 說明
X array-like of shape (n_samples, n_features)
要查詢的點數組。 最后維度應與訓練數據的維度匹配。
r array-like
一維距離數組
dualtree bool, default=False
如果為True,則使用雙樹算法。 否則,請使用單樹算法。 雙樹算法可以針對較大的N具有更好的縮放比例。
返回值 說明
counts ndarray
counts [i]包含距離小于或等于r [i]的點對的數量