球樹#

class sklearn.neighbors.BallTree#

用於快速廣義 N 點問題的球樹

請參閱使用者指南中的更多資訊。

參數:
X類陣列,形狀為 (n_samples, n_features)

n_samples 為資料集中點的數量,n_features 為參數空間的維度。注意:如果 X 是 C 連續雙精度陣列,則不會複製資料。否則,將建立內部複本。

leaf_size正整數,預設值為 40

切換為暴力搜尋的點數。更改 leaf_size 不會影響查詢結果,但會顯著影響查詢速度以及儲存建構樹所需的記憶體。儲存樹所需的記憶體量大致與 n_samples / leaf_size 成正比。對於指定的 leaf_size,葉節點保證滿足 leaf_size <= n_points <= 2 * leaf_size,除非在 n_samples < leaf_size 的情況下。

metricstr 或 DistanceMetric64 物件,預設為 ‘minkowski’

用於距離計算的度量。預設為 “minkowski”,當 p = 2 時會產生標準的歐幾里得距離。BallTree 的有效度量清單由屬性 valid_metrics 給出。有關任何距離度量的更多資訊,請參閱 scipy.spatial.distance 的文件以及 distance_metrics 中列出的度量。

其他關鍵字會傳遞給距離度量類別。
注意:KDTree 不支援 metric 參數中的可呼叫函數。
而 Ball Tree 也不支援。函數呼叫的開銷將導致效能非常差。
屬性:
data記憶體視圖

訓練資料

valid_metrics: 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 操作中:在 unpickle 後不需要重建樹。

>>> 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 的元組

(修剪次數、葉節點數、分割次數)

kernel_density(X, h, kernel='gaussian', atol=0, rtol=1E-8, breadth_first=True, return_log=False)#

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

參數:
X類陣列,形狀為 (n_samples, n_features)

要查詢的點陣列。最後一個維度應與訓練資料的維度相符。

hfloat

核心的頻寬

kernelstr,預設為 “gaussian”

指定要使用的核心。選項為 - ‘gaussian’ - ‘tophat’ - ‘epanechnikov’ - ‘exponential’ - ‘linear’ - ‘cosine’。預設核心為 ‘gaussian’

atolfloat,預設為 0

指定結果的所需絕對容差。如果真實結果為 K_true,則傳回的結果 K_ret 滿足 abs(K_true - K_ret) < atol + rtol * K_ret。預設值為零(即機器精度)。

rtolfloat,預設為 1e-8

指定結果的所需相對容差。如果真實結果為 K_true,則傳回的結果 K_ret 滿足 abs(K_true - K_ret) < atol + rtol * K_ret。預設值為 1e-8(即機器精度)。

breadth_firstbool,預設為 False

如果為 True,則使用廣度優先搜尋。如果為 False(預設),則使用深度優先搜尋。廣度優先通常對於緊湊核心和/或高容差更快。

return_logbool,預設為 False

傳回結果的對數。對於窄核心,這可能比傳回結果本身更準確。

回傳:
densityndarray,形狀為 X.shape[:-1]

(對數)密度評估的陣列

query(X, k=1, return_distance=True, dualtree=False, breadth_first=False)#

查詢樹以取得 k 個最近鄰居

參數:
X類陣列,形狀為 (n_samples, n_features)

要查詢的點陣列

kint,預設為 1

要傳回的最近鄰居數

return_distancebool,預設為 True

如果為 True,則傳回距離和索引的元組 (d, i)。如果為 False,則傳回陣列 i

dualtreebool,預設值=False

若為 True,則對查詢使用雙樹形式:會為查詢點建立一棵樹,並使用這對樹來有效率地搜尋此空間。當點的數量變多時,這可以帶來更好的效能。

breadth_firstbool,預設為 False

若為 True,則以廣度優先的方式查詢節點。否則,以深度優先的方式查詢節點。

sort_resultsbool,預設值=True

若為 True,則在返回時,每個點的距離和索引都會被排序,因此第一欄包含最近的點。否則,鄰居會以任意順序返回。

回傳:
i若 return_distance == False
(d,i)若 return_distance == True
d形狀為 X.shape[:-1] + (k,) 的 ndarray,資料類型為 double

每個條目都給出對應點的鄰居距離列表。

i形狀為 X.shape[:-1] + (k,) 的 ndarray,資料類型為 int

每個條目都給出對應點的鄰居索引列表。

query_radius(X, r, return_distance=False, count_only=False, sort_results=False)#

查詢樹狀結構中半徑 r 內的鄰居

參數:
X類陣列,形狀為 (n_samples, n_features)

要查詢的點陣列

r返回鄰居的距離範圍

r 可以是單一值,或者如果每個點需要不同的半徑,則可以是形狀為 x.shape[:-1] 的值陣列。

return_distancebool,預設值=False

若為 True,則返回每個點到鄰居的距離;若為 False,則僅返回鄰居。請注意,與 query() 方法不同,在這裡設定 return_distance=True 會增加計算時間。並非所有距離都需要明確計算以用於 return_distance=False。預設情況下,結果不會排序:請參閱 sort_results 關鍵字。

count_onlybool,預設值=False

若為 True,則僅返回距離 r 內的點數;若為 False,則返回距離 r 內所有點的索引。如果 return_distance==True,則設定 count_only=True 將會導致錯誤。

sort_resultsbool,預設值=False

若為 True,則在返回之前對距離和索引進行排序。若為 False,則結果不會排序。如果 return_distance == False,則設定 sort_results = True 將會導致錯誤。

回傳:
count若 count_only == True
ind若 count_only == False 且 return_distance == False
(ind, dist)若 count_only == False 且 return_distance == True
count形狀為 X.shape[:-1] 的 ndarray,資料類型為 int

每個條目都給出對應點距離 r 內的鄰居數量。

ind形狀為 X.shape[:-1] 的 ndarray,資料類型為 object

每個元素都是一個 numpy 整數陣列,列出對應點的鄰居索引。請注意,與 k 近鄰查詢的結果不同,預設情況下,返回的鄰居不會按距離排序。

dist形狀為 X.shape[:-1] 的 ndarray,資料類型為 object

每個元素都是一個 numpy 雙精度陣列,列出 i 中索引對應的距離。

reset_n_calls()#

將呼叫次數重設為 0。

two_point_correlation(X, r, dualtree=False)#

計算雙點相關函數

參數:
X類陣列,形狀為 (n_samples, n_features)

要查詢的點陣列。最後一個維度應與訓練資料的維度相符。

r類陣列 (array-like)

一維距離陣列

dualtreebool,預設值=False

若為 True,則使用雙樹演算法。否則,使用單樹演算法。對於較大的 N 值,雙樹演算法可能具有更好的縮放性。

回傳:
countsndarray

counts[i] 包含距離小於或等於 r[i] 的點對數量