最近鄰#
- class sklearn.neighbors.NearestNeighbors(*, n_neighbors=5, radius=1.0, algorithm='auto', leaf_size=30, metric='minkowski', p=2, metric_params=None, n_jobs=None)[原始碼]#
用於實現鄰近搜尋的非監督式學習器。
更多資訊請參閱使用者指南。
於版本 0.9 新增。
- 參數:
- n_neighborsint,預設值=5
用於
kneighbors
查詢時預設使用的鄰居數量。- radiusfloat,預設值=1.0
用於
radius_neighbors
查詢時預設使用的參數空間範圍。- algorithm{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’},預設值=’auto’
用於計算最近鄰居的演算法
注意:對稀疏輸入進行擬合將會覆寫此參數的設定,並使用暴力搜尋。
- leaf_sizeint,預設值=30
傳遞給 BallTree 或 KDTree 的葉節點大小。這可能會影響建構和查詢的速度,以及儲存樹所需的記憶體。最佳值取決於問題的性質。
- metricstr 或可呼叫的,預設值=’minkowski’
用於距離計算的度量。預設值為 “minkowski”,當 p = 2 時會產生標準的歐幾里得距離。請參閱 scipy.spatial.distance 的文件以及
distance_metrics
中列出的度量,以取得有效的度量值。如果 metric 為 “precomputed”,則假設 X 為距離矩陣,並且在擬合期間必須為方形。X 可以是一個 稀疏圖,在這種情況下,只會考慮 “非零” 元素作為鄰居。
如果 metric 是可呼叫的函式,它會將兩個表示 1D 向量的陣列作為輸入,並且必須返回一個表示這些向量之間距離的值。這適用於 Scipy 的度量,但效率不如將度量名稱作為字串傳遞。
- pfloat(正數),預設值=2
來自 sklearn.metrics.pairwise.pairwise_distances 的 Minkowski 度量參數。當 p = 1 時,這相當於使用 manhattan_distance (l1);當 p = 2 時,則為 euclidean_distance (l2)。對於任意的 p,則使用 minkowski_distance (l_p)。
- metric_paramsdict,預設值=None
度量函式的額外關鍵字參數。
- n_jobsint,預設值=None
用於鄰近搜尋的並行任務數量。
None
表示 1,除非在joblib.parallel_backend
環境中。-1
表示使用所有處理器。請參閱 詞彙表 以取得更多詳細資訊。
- 屬性:
另請參閱
K 近鄰分類器 (KNeighborsClassifier)
KNeighborsClassifier
:實現 k 最近鄰投票的分類器。半徑近鄰分類器 (RadiusNeighborsClassifier)
RadiusNeighborsClassifier
:實現在給定半徑內鄰居之間投票的分類器。K 近鄰迴歸器 (KNeighborsRegressor)
KNeighborsRegressor
:基於 k 最近鄰居的迴歸。半徑近鄰迴歸器 (RadiusNeighborsRegressor)
RadiusNeighborsRegressor
:基於固定半徑內鄰居的迴歸。球樹 (BallTree)
BallTree
:用於在多維空間中組織點的空間分割資料結構,用於最近鄰居搜尋。
注意
請參閱線上文件中的 最近鄰居,以討論
algorithm
和leaf_size
的選擇。https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm
範例
>>> import numpy as np >>> from sklearn.neighbors import NearestNeighbors >>> samples = [[0, 0, 2], [1, 0, 0], [0, 0, 1]] >>> neigh = NearestNeighbors(n_neighbors=2, radius=0.4) >>> neigh.fit(samples) NearestNeighbors(...) >>> neigh.kneighbors([[0, 0, 1.3]], 2, return_distance=False) array([[2, 0]]...) >>> nbrs = neigh.radius_neighbors( ... [[0, 0, 1.3]], 0.4, return_distance=False ... ) >>> np.asarray(nbrs[0][0]) array(2)
- fit(X, y=None)[原始碼]#
從訓練資料集擬合最近鄰估算器。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣,如果 metric=’precomputed’ 則為 (n_samples, n_samples)
訓練資料。
- y忽略
依慣例,為了 API 的一致性而存在,並未使用。
- 回傳:
- selfNearestNeighbors
擬合後的最近鄰估算器。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請查看 使用手冊 了解路由機制如何運作。
- 回傳:
- routingMetadataRequest
一個封裝路由資訊的
MetadataRequest
。
- get_params(deep=True)[原始碼]#
取得此估算器的參數。
- 參數:
- deepbool,預設為 True
如果為 True,將回傳此估算器和所包含子物件(為估算器)的參數。
- 回傳:
- paramsdict
參數名稱對應到它們的值。
- kneighbors(X=None, n_neighbors=None, return_distance=True)[原始碼]#
尋找一點的 K 個最近鄰居。
回傳每個點的鄰居索引和距離。
- 參數:
- X類陣列或稀疏矩陣,形狀為 (n_queries, n_features),或如果 metric == ‘precomputed’,則為 (n_queries, n_indexed),預設為 None
查詢點或點集合。如果未提供,則回傳每個索引點的鄰居。在這種情況下,查詢點不會被視為自己的鄰居。
- n_neighborsint,預設為 None
每個樣本所需的鄰居數量。預設值為傳遞給建構子的值。
- return_distancebool,預設為 True
是否回傳距離。
- 回傳:
- neigh_dist形狀為 (n_queries, n_neighbors) 的 ndarray
表示到各點長度的陣列,僅當 return_distance=True 時存在。
- neigh_ind形狀為 (n_queries, n_neighbors) 的 ndarray
母體矩陣中最接近點的索引。
範例
在以下範例中,我們從表示資料集的陣列建構一個 NearestNeighbors 類別,並詢問哪個點最接近 [1,1,1]
>>> samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]] >>> from sklearn.neighbors import NearestNeighbors >>> neigh = NearestNeighbors(n_neighbors=1) >>> neigh.fit(samples) NearestNeighbors(n_neighbors=1) >>> print(neigh.kneighbors([[1., 1., 1.]])) (array([[0.5]]), array([[2]]))
如您所見,它會回傳 [[0.5]] 和 [[2]],這表示該元素距離 0.5,並且是樣本的第三個元素(索引從 0 開始)。您也可以查詢多個點
>>> X = [[0., 1., 0.], [1., 0., 1.]] >>> neigh.kneighbors(X, return_distance=False) array([[1], [2]]...)
- kneighbors_graph(X=None, n_neighbors=None, mode='connectivity')[原始碼]#
計算 X 中點的 k-鄰居(加權)圖。
- 參數:
- X形狀為 (n_queries, n_features) 的類陣列或稀疏矩陣,或如果 metric == ‘precomputed’,則為 (n_queries, n_indexed),預設為 None
查詢點或點集合。如果未提供,則回傳每個索引點的鄰居。在這種情況下,查詢點不會被視為自己的鄰居。對於
metric='precomputed'
,形狀應為 (n_queries, n_indexed)。否則形狀應為 (n_queries, n_features)。- n_neighborsint,預設為 None
每個樣本的鄰居數量。預設值為傳遞給建構子的值。
- mode{‘connectivity’, ‘distance’},預設為 ‘connectivity’
回傳矩陣的類型:’connectivity’ 將回傳包含 1 和 0 的連通性矩陣,在 ‘distance’ 中,邊是點之間的距離,距離類型取決於 NearestNeighbors 類別中選擇的 metric 參數。
- 回傳:
- A形狀為 (n_queries, n_samples_fit) 的稀疏矩陣
n_samples_fit
是擬合資料中的樣本數。A[i, j]
給出連接i
到j
的邊的權重。該矩陣為 CSR 格式。
另請參閱
NearestNeighbors.radius_neighbors_graph
計算 X 中點的鄰居(加權)圖。
範例
>>> X = [[0], [3], [1]] >>> from sklearn.neighbors import NearestNeighbors >>> neigh = NearestNeighbors(n_neighbors=2) >>> neigh.fit(X) NearestNeighbors(n_neighbors=2) >>> A = neigh.kneighbors_graph(X) >>> A.toarray() array([[1., 0., 1.], [0., 1., 1.], [1., 0., 1.]])
- radius_neighbors(X=None, radius=None, return_distance=True, sort_results=False)[原始碼]#
找出在給定半徑內的點或點的鄰居。
傳回查詢陣列的點周圍,大小為
radius
的球體內,資料集中每個點的索引和距離。邊界上的點也會包含在結果中。結果點 *不一定* 會依據與查詢點的距離排序。
- 參數:
- X{類陣列, 稀疏矩陣},形狀為 (n_samples, n_features),預設值為 None
查詢點或點集合。如果未提供,則回傳每個索引點的鄰居。在這種情況下,查詢點不會被視為自己的鄰居。
- radius浮點數,預設值為 None
要傳回的鄰居的距離上限。預設值為傳遞至建構子的值。
- return_distancebool,預設為 True
是否回傳距離。
- sort_results布林值,預設值為 False
如果為 True,則距離和索引會在傳回之前依據距離遞增排序。如果為 False,則結果可能不會排序。如果
return_distance=False
,則設定sort_results=True
會導致錯誤。於 0.22 版本新增。
- 回傳:
- neigh_dist形狀為 (n_samples,) 的陣列的 ndarray
表示每個點距離的陣列,僅在
return_distance=True
時存在。距離值會根據metric
建構子參數計算。- neigh_ind形狀為 (n_samples,) 的陣列的 ndarray
一個由近似最近點的索引陣列組成的陣列,這些點來自母體矩陣,且位於查詢點周圍大小為
radius
的球體內。
注意
因為每個點的鄰居數量不一定相等,多個查詢點的結果無法放入標準的資料陣列中。為了效率,
radius_neighbors
會傳回物件陣列,其中每個物件都是一個索引或距離的一維陣列。範例
在以下範例中,我們從表示資料集的陣列建構一個 NeighborsClassifier 類別,並詢問哪個點最接近 [1, 1, 1]。
>>> import numpy as np >>> samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]] >>> from sklearn.neighbors import NearestNeighbors >>> neigh = NearestNeighbors(radius=1.6) >>> neigh.fit(samples) NearestNeighbors(radius=1.6) >>> rng = neigh.radius_neighbors([[1., 1., 1.]]) >>> print(np.asarray(rng[0][0])) [1.5 0.5] >>> print(np.asarray(rng[1][0])) [1 2]
傳回的第一個陣列包含所有距離小於 1.6 的點的距離,而傳回的第二個陣列包含它們的索引。一般來說,可以同時查詢多個點。
- radius_neighbors_graph(X=None, radius=None, mode='connectivity', sort_results=False)[原始碼]#
計算 X 中點的鄰居(加權)圖。
鄰域限制在距離小於半徑的點。
- 參數:
- X{類陣列, 稀疏矩陣},形狀為 (n_samples, n_features),預設值為 None
查詢點或點集合。如果未提供,則回傳每個索引點的鄰居。在這種情況下,查詢點不會被視為自己的鄰居。
- radius浮點數,預設值為 None
鄰域的半徑。預設值為傳遞至建構子的值。
- mode{‘connectivity’, ‘distance’},預設為 ‘connectivity’
回傳矩陣的類型:’connectivity’ 將回傳包含 1 和 0 的連通性矩陣,在 ‘distance’ 中,邊是點之間的距離,距離類型取決於 NearestNeighbors 類別中選擇的 metric 參數。
- sort_results布林值,預設值為 False
如果為 True,則結果的每一行中,非零項目將按距離遞增排序。如果為 False,則非零項目可能不會排序。僅與 mode='distance' 一起使用。
於 0.22 版本新增。
- 回傳:
- A形狀為 (n_queries, n_samples_fit) 的稀疏矩陣
n_samples_fit
是擬合資料中的樣本數。A[i, j]
給出連接i
到j
的邊的權重。該矩陣為 CSR 格式。
另請參閱
K 近鄰圖 (kneighbors_graph)
計算 X 中點的 k-鄰居(加權)圖。
範例
>>> X = [[0], [3], [1]] >>> from sklearn.neighbors import NearestNeighbors >>> neigh = NearestNeighbors(radius=1.5) >>> neigh.fit(X) NearestNeighbors(radius=1.5) >>> A = neigh.radius_neighbors_graph(X) >>> A.toarray() array([[1., 0., 1.], [0., 1., 0.], [1., 0., 1.]])