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’
用於計算最近鄰居的演算法
注意:在稀疏輸入上擬合將覆蓋此參數的設定,並使用暴力法。
- 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)
用於實作鄰居搜尋的非監督學習器。
註解
請參閱線上文件中的最近鄰居,以了解關於
algorithm
和leaf_size
選擇的討論。警告
關於最近鄰居演算法,如果發現兩個鄰居,鄰居
k+1
和k
,具有相同的距離但標籤不同,則結果將取決於訓練資料的順序。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]
給出連接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.]])
- 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物件
已更新的物件。