KDTree#
- class sklearn.neighbors.KDTree#
用於快速廣義 N 點問題的 KDTree
請參閱使用者指南以了解更多資訊。
- 參數:
- 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
的情況下。- metric字串或 DistanceMetric64 物件,預設值='minkowski'
用於距離計算的度量。預設值為「minkowski」,當 p = 2 時會產生標準歐幾里得距離。KDTree 的有效度量列表由屬性
valid_metrics
給定。請參閱 scipy.spatial.distance 的文件以及distance_metrics
中列出的度量,以取得有關任何距離度量的更多資訊。- 其他關鍵字會傳遞至距離度量類別。
- 注意:KDTree 不支援度量參數中的可呼叫函式
- 和 Ball Tree。函式呼叫的負擔會導致非常差的效能。
- 屬性:
- data記憶體檢視
訓練資料
- valid_metrics: 字串列表
有效的距離度量列表。
範例
查詢 k 個最近鄰居
>>> import numpy as np >>> from sklearn.neighbors import KDTree >>> rng = np.random.RandomState(0) >>> X = rng.random_sample((10, 3)) # 10 points in 3 dimensions >>> tree = KDTree(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]
封存和解封存樹狀結構。請注意,樹狀結構的狀態會儲存在封存操作中:解封存時不需要重建樹狀結構。
>>> import numpy as np >>> import pickle >>> rng = np.random.RandomState(0) >>> X = rng.random_sample((10, 3)) # 10 points in 3 dimensions >>> tree = KDTree(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 = KDTree(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 = KDTree(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 = KDTree(X) >>> tree.two_point_correlation(X, r) array([ 30, 62, 278, 580, 820])
- get_arrays()#
取得資料和節點陣列。
- 傳回:
- arrays: 陣列的元組
用於儲存樹狀結構資料、索引、節點資料和節點邊界的陣列。
- get_n_calls()#
取得呼叫次數。
- 傳回:
- n_calls: 整數
距離計算呼叫的次數
- get_tree_stats()#
取得樹狀結構狀態。
- 傳回:
- tree_stats: 整數的元組
(修剪次數、葉子數、分割數)
- 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字串,預設值=”gaussian”
指定要使用的核函數。選項為 - 'gaussian' - 'tophat' - 'epanechnikov' - 'exponential' - 'linear' - 'cosine'。預設值為 kernel = 'gaussian'
- atol浮點數,預設值=0
指定所需的結果絕對容差。如果真實結果為
K_true
,則傳回的結果K_ret
滿足abs(K_true - K_ret) < atol + rtol * K_ret
。預設值為零(即機器精確度)。- rtol浮點數,預設值=1e-8
指定所需的結果相對容差。如果真實結果為
K_true
,則傳回的結果K_ret
滿足abs(K_true - K_ret) < atol + rtol * K_ret
。預設值為1e-8
(即機器精確度)。- breadth_first布林值,預設值=False
如果為 True,則使用廣度優先搜尋。如果為 False(預設值),則使用深度優先搜尋。對於緊湊核函數和/或高容差,廣度優先通常會更快。
- return_log布林值,預設值=False
傳回結果的對數。對於窄核函數,這可能比傳回結果本身更準確。
- 傳回:
- density形狀為 X.shape[:-1] 的 ndarray
(對數)密度評估的陣列
- query(X, k=1, return_distance=True, dualtree=False, breadth_first=False)#
查詢樹狀結構以取得 k 個最近鄰居
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
要查詢的點陣列
- k整數,預設值=1
要傳回的最近鄰居數量
- return_distance布林值,預設值=True
如果為 True,則傳回距離和索引的元組 (d, i);如果為 False,則傳回陣列 i
- dualtree布林值,預設值=False
如果為 True,則針對查詢點使用雙樹形式:為查詢點建立樹狀結構,並使用這對樹狀結構來有效率地搜尋此空間。當點數增加時,這可以帶來更好的效能。
- breadth_first布林值,預設值=False
如果為 True,則以廣度優先方式查詢節點。否則,以深度優先方式查詢節點。
- sort_results布林值,預設值=True
如果為 True,則會在傳回時排序每個點的距離和索引,使第一列包含最近的點。否則,會以任意順序傳回鄰居。
- 傳回:
- i如果 return_distance == False
- (d,i)如果 return_distance == True
- d形狀為 X.shape[:-1] + (k,) 的 ndarray,dtype=double
每個條目都給出對應點的鄰居距離列表。
- i形狀為 X.shape[:-1] + (k,) 的 ndarray,dtype=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,dtype=int
每個條目都給出對應點的距離 r 內的鄰居數量。
- ind形狀為 X.shape[:-1] 的 ndarray,dtype=object
每個元素都是一個 numpy 整數數組,其中列出對應點的鄰居索引。請注意,與 k 近鄰查詢的結果不同,預設情況下,返回的鄰居不會按距離排序。
- dist形狀為 X.shape[:-1] 的 ndarray,dtype=object
每個元素都是一個 numpy double 數組,其中列出 i 中索引的對應距離。
- reset_n_calls()#
將呼叫次數重設為 0。
- two_point_correlation(X, r, dualtree=False)#
計算兩點相關函數
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
要查詢的點陣列。最後一個維度應與訓練資料的維度一致。
- r類數組 (array-like)
一維距離數組
- dualtree布林值,預設值=False
如果為 True,則使用雙樹演算法。否則,使用單樹演算法。對於大型 N,雙樹演算法可以具有更好的擴展性。
- 傳回:
- countsndarray
counts[i] 包含距離小於或等於 r[i] 的點對數量