KNeighborsClassifier#

class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, *, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None)[原始碼]#

實作 k 最近鄰投票的分類器。

請在使用者指南中閱讀更多內容。

參數:
n_neighborsint, default=5

預設用於 kneighbors 查詢的鄰居數量。

weights{‘uniform’, ‘distance’}, callable or None, default=’uniform’

預測中使用的權重函數。可能的值

  • ‘uniform’:均勻權重。每個鄰域中的所有點的權重相等。

  • ‘distance’:依據距離的倒數為點加權。在此情況下,查詢點的較近鄰居將比更遠的鄰居具有更大的影響。

  • [callable]:使用者定義的函數,該函數接受距離陣列,並返回包含權重的相同形狀的陣列。

請參閱標題為最近鄰分類的範例,其中顯示 weights 參數對決策邊界產生的影響。

algorithm{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, default=’auto’

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

  • ‘ball_tree’ 將使用 BallTree

  • ‘kd_tree’ 將使用 KDTree

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

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

注意:在稀疏輸入上擬合將覆蓋此參數的設定,並使用暴力法。

leaf_sizeint, default=30

傳遞給 BallTree 或 KDTree 的葉節點大小。這會影響建構和查詢的速度,以及儲存樹所需的記憶體。最佳值取決於問題的性質。

pfloat, default=2

閔可夫斯基度量的冪參數。當 p = 1 時,相當於使用 manhattan_distance (l1);當 p = 2 時,相當於 euclidean_distance (l2)。對於任意 p,使用 minkowski_distance (l_p)。預期此參數為正數。

metricstr or callable, default=’minkowski’

用於距離計算的度量。預設值為「minkowski」,當 p = 2 時,會產生標準歐幾里得距離。請參閱scipy.spatial.distance的文件和distance_metrics中列出的有效度量值。

如果度量為「precomputed」,則假設 X 是距離矩陣,並且在擬合期間必須是平方矩陣。 X 可能是稀疏圖,在這種情況下,只能將「非零」元素視為鄰居。

如果度量是可呼叫函數,則它將兩個表示 1D 向量的陣列作為輸入,並且必須返回一個指示這些向量之間距離的值。這適用於 Scipy 的度量,但效率不如以字串形式傳遞度量名稱。

metric_paramsdict, default=None

度量函數的其他關鍵字引數。

n_jobsint, default=None

用於鄰居搜尋的並行執行作業數。None 表示 1,除非在joblib.parallel_backend 內容中。-1 表示使用所有處理器。請參閱詞彙表以取得更多詳細資料。不影響 fit 方法。

屬性:
classes_形狀為 (n_classes,) 的陣列

分類器已知的類別標籤

effective_metric_str 或 callable

所使用的距離度量。它將與 metric 參數相同,或是其同義詞,例如,如果 metric 參數設定為「minkowski」且 p 參數設定為 2,則為「euclidean」。

effective_metric_params_dict

度量函數的其他關鍵字引數。對於大多數度量,將與 metric_params 參數相同,但如果 effective_metric_ 屬性設定為「minkowski」,則也可能包含 p 參數值。

n_features_in_int

擬合期間看到的特徵數量。

在 0.24 版本中新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

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

在 1.0 版本中新增。

n_samples_fit_int

擬合資料中的樣本數。

outputs_2d_bool

y 在擬合期間的形狀為 (n_samples, ) 或 (n_samples, 1) 時為 False,否則為 True。

參閱

半徑鄰域分類器 (RadiusNeighborsClassifier)

基於固定半徑內鄰居的分類器。

KNeighborsRegressor

基於 k 最近鄰的迴歸。

半徑鄰域迴歸器 (RadiusNeighborsRegressor)

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

最近鄰 (NearestNeighbors)

用於實作鄰居搜尋的非監督學習器。

註解

請參閱線上文件中的最近鄰居,以了解關於 algorithmleaf_size 選擇的討論。

警告

關於最近鄰居演算法,如果發現兩個鄰居,鄰居 k+1k,具有相同的距離但標籤不同,則結果將取決於訓練資料的順序。

https://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm

範例

>>> X = [[0], [1], [2], [3]]
>>> y = [0, 0, 1, 1]
>>> from sklearn.neighbors import KNeighborsClassifier
>>> neigh = KNeighborsClassifier(n_neighbors=3)
>>> neigh.fit(X, y)
KNeighborsClassifier(...)
>>> print(neigh.predict([[1.1]]))
[0]
>>> print(neigh.predict_proba([[0.9]]))
[[0.666... 0.333...]]
fit(X, y)[原始碼]#

從訓練資料集擬合 k 最近鄰分類器。

參數:
X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣,或如果 metric='precomputed' 則為 (n_samples, n_samples)

訓練資料。

y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列或稀疏矩陣

目標值。

回傳值:
selfKNeighborsClassifier

擬合後的 k 最近鄰分類器。

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 類別中選定的度量參數。

回傳值:
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.]])
predict(X)[原始碼]#

預測所提供資料的類別標籤。

參數:
X形狀為 (n_queries, n_features) 的{類陣列,稀疏矩陣},或如果 metric == 'precomputed' 則為 (n_queries, n_indexed),或 None

測試樣本。如果為 None,則會回傳所有索引點的預測;在此情況下,點不會被視為自己的鄰居。

回傳值:
y形狀為 (n_queries,) 或 (n_queries, n_outputs) 的 ndarray

每個資料樣本的類別標籤。

predict_proba(X)[原始碼]#

回傳測試資料 X 的機率估計值。

參數:
X形狀為 (n_queries, n_features) 的{類陣列,稀疏矩陣},或如果 metric == 'precomputed' 則為 (n_queries, n_indexed),或 None

測試樣本。如果為 None,則會回傳所有索引點的預測;在此情況下,點不會被視為自己的鄰居。

回傳值:
p形狀為 (n_queries, n_classes) 的 ndarray,或者如果 n_outputs > 1 則為此類陣列的 n_outputs 清單。

輸入樣本的類別機率。類別會按字典順序排列。

score(X, y, sample_weight=None)[原始碼]#

回傳給定測試資料和標籤的平均準確度。

在多標籤分類中,這是子集準確度,這是一個嚴格的度量,因為您需要每個樣本正確預測每個標籤集。

參數:
X形狀為 (n_samples, n_features) 或 None 的類陣列

測試樣本。如果為 None,則會使用所有索引點的預測;在此情況下,點不會被視為自己的鄰居。這表示 knn.fit(X, y).score(None, y) 隱式執行留一法交叉驗證程序,並且等效於 cross_val_score(knn, X, y, cv=LeaveOneOut()),但通常快得多。

y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列

X 的真實標籤。

sample_weight形狀為 (n_samples,) 的類陣列,預設值=None

樣本權重。

回傳值:
scorefloat

self.predict(X) 相對於 y 的平均準確度。

set_params(**params)[原始碼]#

設定此估算器的參數。

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

參數:
**paramsdict

估算器參數。

回傳值:
self估算器實例

估算器實例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') KNeighborsClassifier[原始碼]#

請求傳遞至 score 方法的中繼資料。

請注意,此方法僅在 enable_metadata_routing=True 時才相關(請參閱 sklearn.set_config)。請參閱 使用者指南,了解路由機制如何運作。

每個參數的選項如下:

  • True:請求中繼資料,並在提供時傳遞至 score。如果未提供中繼資料,則會忽略該請求。

  • False:不請求中繼資料,且元估計器不會將其傳遞至 score

  • None:不請求中繼資料,且如果使用者提供中繼資料,元估計器會引發錯誤。

  • str:中繼資料應使用此指定的別名,而不是原始名稱,傳遞至元估計器。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 會保留現有的請求。這可讓您變更某些參數的請求,而不用變更其他參數。

在 1.3 版本中新增。

注意

此方法僅在將此估計器用作元估計器的子估計器時才相關,例如在 Pipeline 內使用。否則,它不會產生任何效果。

參數:
sample_weightstr、True、False 或 None,預設值 = sklearn.utils.metadata_routing.UNCHANGED

用於 score 中的 sample_weight 參數的中繼資料路由。

回傳值:
self物件

已更新的物件。