球樹#
- 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] 的點對數量