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