最近鄰#

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’

用於計算最近鄰居的演算法

  • ‘ball_tree’ 將使用 BallTree

  • ‘kd_tree’ 將使用 KDTree

  • ‘brute’ 將使用暴力搜尋。

  • ‘auto’ 將嘗試根據傳遞給 fit 方法的值來決定最適合的演算法。

注意:對稀疏輸入進行擬合將會覆寫此參數的設定,並使用暴力搜尋。

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 表示使用所有處理器。請參閱 詞彙表 以取得更多詳細資訊。

屬性:
effective_metric_str

用於計算與鄰居距離的度量。

effective_metric_params_dict

用於計算與鄰居距離的度量的參數。

n_features_in_int

fit 期間看到的特徵數量。

於版本 0.24 新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit 期間看到的特徵名稱。僅當 X 具有全為字串的特徵名稱時才會定義。

於版本 1.0 新增。

n_samples_fit_int

已擬合資料中的樣本數量。

另請參閱

K 近鄰分類器 (KNeighborsClassifier)

KNeighborsClassifier:實現 k 最近鄰投票的分類器。

半徑近鄰分類器 (RadiusNeighborsClassifier)

RadiusNeighborsClassifier:實現在給定半徑內鄰居之間投票的分類器。

K 近鄰迴歸器 (KNeighborsRegressor)

KNeighborsRegressor:基於 k 最近鄰居的迴歸。

半徑近鄰迴歸器 (RadiusNeighborsRegressor)

RadiusNeighborsRegressor:基於固定半徑內鄰居的迴歸。

球樹 (BallTree)

BallTree:用於在多維空間中組織點的空間分割資料結構,用於最近鄰居搜尋。

注意

請參閱線上文件中的 最近鄰居,以討論 algorithmleaf_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] 給出連接 ij 的邊的權重。該矩陣為 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] 給出連接 ij 的邊的權重。該矩陣為 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.]])
set_params(**params)[原始碼]#

設定此估算器的參數。

此方法適用於簡單的估算器以及巢狀物件(例如 Pipeline)。後者具有 <component>__<parameter> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**params字典

估算器參數。

回傳:
self估算器實例

估算器實例。