KMeans#

class sklearn.cluster.KMeans(n_clusters=8, *, init='k-means++', n_init='auto', max_iter=300, tol=0.0001, verbose=0, random_state=None, copy_x=True, algorithm='lloyd')[原始碼]#

K-均值群集。

詳情請參閱使用者指南

參數:
n_clustersint,預設值=8

要形成的群集數量以及要產生的質心數量。

有關如何為 n_clusters 選擇最佳值的範例,請參閱使用輪廓分析選擇 KMeans 群集中的群集數量

init{‘k-means++’, ‘random’},可呼叫或形狀為 (n_clusters, n_features) 的類陣列,預設值=’k-means++’

初始化方法

  • ‘k-means++’:根據點對整體慣性的貢獻的經驗機率分佈,使用採樣選擇初始群集質心。此技術可加速收斂。實作的演算法為「greedy k-means++」。它與原始 k-means++ 的不同之處在於,它在每個採樣步驟進行多次試驗,並在其中選擇最佳質心。

  • ‘random’:從資料中隨機選擇 n_clusters 個觀測值(列)作為初始質心。

  • 如果傳遞陣列,則其形狀應為 (n_clusters, n_features) 並給定初始中心。

  • 如果傳遞可呼叫物件,則應接受 X、n_clusters 和隨機狀態參數,並傳回初始化。

有關如何使用不同 init 策略的範例,請參閱標題為手寫數字資料上的 K-均值群集示範的範例。

n_init‘auto’ 或 int,預設值=’auto’

k-均值演算法使用不同質心種子運行的次數。最終結果是根據慣性,連續運行 n_init 次的最佳輸出。建議對稀疏高維問題進行多次運行(請參閱使用 k-means 群集稀疏資料)。

n_init='auto' 時,運行的次數取決於 init 的值:如果使用 init='random'init 是可呼叫物件,則為 10 次;如果使用 init='k-means++'init 是類陣列,則為 1 次。

新增於 1.2 版:新增 n_init 的 'auto' 選項。

於 1.4 版變更:n_init 的預設值變更為 'auto'

max_iterint,預設值=300

單次運行 k-均值演算法的最大迭代次數。

tolfloat,預設值=1e-4

相對於兩次連續迭代的群集中心差異的 Frobenius 範數的相對容差,宣告收斂。

verboseint,預設值=0

詳細模式。

random_stateint、RandomState 實例或 None,預設值=None

決定質心初始化的隨機數產生。使用 int 使隨機性確定。請參閱詞彙表

copy_xbool,預設值=True

當預先計算距離時,先對資料進行中心化,在數值上更為準確。如果 copy_x 為 True (預設值),則不會修改原始資料。如果為 False,則原始資料會被修改,並在函式傳回之前放回,但減去然後加入資料均值可能會引入小的數值差異。請注意,如果原始資料不是 C 連續的,則即使 copy_x 為 False,也會建立複本。如果原始資料為稀疏資料,但不是 CSR 格式,則即使 copy_x 為 False,也會建立複本。

algorithm{“lloyd”, “elkan”},預設值=”lloyd”

要使用的 K-均值演算法。經典 EM 式演算法為 "lloyd""elkan" 變體在某些具有明確定義群集的資料集上可能更有效率,方法是使用三角不等式。但由於分配了形狀為 (n_samples, n_clusters) 的額外陣列,因此會更消耗記憶體。

於 0.18 版變更:新增 Elkan 演算法

於 1.1 版變更:將 “full” 重新命名為 “lloyd”,並棄用 “auto” 和 “full”。將 “auto” 變更為使用 “lloyd” 而不是 “elkan”。

屬性:
cluster_centers_形狀為 (n_clusters, n_features) 的 ndarray

群集中心的座標。如果演算法在完全收斂之前停止(請參閱 tolmax_iter),則這些座標將與 labels_ 不一致。

labels_形狀為 (n_samples,) 的 ndarray

每個點的標籤

inertia_float

樣本到其最近群集中心的平方距離之和,如果提供,則由樣本權重加權。

n_iter_int

運行的迭代次數。

n_features_in_int

fit期間看到的特徵數量。

新增於 0.24 版。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

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

新增於 1.0 版。

另請參閱

MiniBatchKMeans

使用迷你批次增量更新中心位置的替代線上實作。對於大型學習(例如 n_samples > 10k),MiniBatchKMeans 可能比預設的批次實作快得多。

備註

k-均值問題是使用 Lloyd 或 Elkan 的演算法解決。

平均複雜度由 O(k n T) 給定,其中 n 是樣本數,T 是迭代次數。

最壞情況下的複雜度由 O(n^(k+2/p)) 給定,其中 n = n_samples,p = n_features。如需更多詳細資訊,請參閱「k-均值方法有多慢?」D. Arthur 和 S. Vassilvitskii - SoCG2006。

在實務上,k-means 演算法速度非常快(是現有最快的群集演算法之一),但它會陷入局部最小值。這就是為什麼多次重新啟動它會很有用的原因。

如果演算法在完全收斂之前停止(由於 tolmax_iter),則 labels_cluster_centers_ 將不一致,也就是說,cluster_centers_ 將不是每個群集中點的平均值。此外,估算器將在最後一次迭代後重新分配 labels_,以使 labels_ 與訓練集上的 predict 一致。

範例

>>> from sklearn.cluster import KMeans
>>> import numpy as np
>>> X = np.array([[1, 2], [1, 4], [1, 0],
...               [10, 2], [10, 4], [10, 0]])
>>> kmeans = KMeans(n_clusters=2, random_state=0, n_init="auto").fit(X)
>>> kmeans.labels_
array([1, 1, 1, 0, 0, 0], dtype=int32)
>>> kmeans.predict([[0, 0], [12, 3]])
array([1, 0], dtype=int32)
>>> kmeans.cluster_centers_
array([[10.,  2.],
       [ 1.,  2.]])

有關 K-Means 常見問題以及如何解決這些問題的範例,請參閱k-means 假設的示範

有關如何使用 K-Means 來群集文字文件的示範,請參閱使用 k-means 群集文字文件

有關 K-Means 和 MiniBatchKMeans 之間的比較,請參閱範例K-Means 和 MiniBatchKMeans 群集演算法的比較

有關 K-Means 和 BisectingKMeans 之間的比較,請參閱範例二分 K-Means 與常規 K-Means 的效能比較

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

計算 k-means 群集。

參數:
X形狀為 (n_samples, n_features) 的類陣列(array-like)、稀疏矩陣(sparse matrix)

要群集的訓練實例。必須注意的是,資料將被轉換為 C 排序,如果給定的資料不是 C 連續的,這將導致記憶體複製。如果傳遞稀疏矩陣,如果它不是 CSR 格式,則會進行複製。

y已忽略

未使用,為符合 API 慣例而在此處呈現。

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

X 中每個觀察值的權重。如果為 None,則所有觀察值都會被賦予相等的權重。如果 init 是可呼叫的或使用者提供的陣列,則在初始化期間不會使用 sample_weight

在 0.20 版本中新增。

回傳:
self物件

已擬合的估算器。

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

計算群集中心並預測每個樣本的群集索引。

方便的方法;等效於呼叫 fit(X),然後呼叫 predict(X)。

參數:
X形狀為 (n_samples, n_features) 的類陣列(array-like)、稀疏矩陣(sparse matrix)

要轉換的新資料。

y已忽略

未使用,為符合 API 慣例而在此處呈現。

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

X 中每個觀察值的權重。如果為 None,則所有觀察值都會被賦予相等的權重。

回傳:
labels形狀為 (n_samples,) 的 ndarray

每個樣本所屬群集的索引。

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

計算群集並將 X 轉換為群集距離空間。

等效於 fit(X).transform(X),但實作效率更高。

參數:
X形狀為 (n_samples, n_features) 的類陣列(array-like)、稀疏矩陣(sparse matrix)

要轉換的新資料。

y已忽略

未使用,為符合 API 慣例而在此處呈現。

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

X 中每個觀察值的權重。如果為 None,則所有觀察值都會被賦予相等的權重。

回傳:
X_new形狀為 (n_samples, n_clusters) 的 ndarray

在新的空間中轉換的 X。

get_feature_names_out(input_features=None)[原始碼]#

取得轉換的輸出特徵名稱。

輸出特徵名稱將以小寫類別名稱作為前綴。例如,如果轉換器輸出 3 個特徵,則輸出特徵名稱為:["class_name0", "class_name1", "class_name2"]

參數:
input_features字串或 None 的類陣列,預設值=None

僅用於驗證 fit 中看到的名稱的特徵名稱。

回傳:
feature_names_out字串物件的 ndarray

已轉換的特徵名稱。

get_metadata_routing()[原始碼]#

取得此物件的中繼資料路由。

請查看使用者指南,了解路由機制如何運作。

回傳:
routingMetadataRequest

封裝路由資訊的MetadataRequest

get_params(deep=True)[原始碼]#

取得此估算器的參數。

參數:
deepbool,預設值=True

如果為 True,將傳回此估算器和其中包含的子物件(即估算器)的參數。

回傳:
paramsdict

對應至其值的參數名稱。

predict(X)[原始碼]#

預測 X 中每個樣本所屬的最接近群集。

在向量量化文獻中,cluster_centers_ 稱為碼簿,而 predict 傳回的每個值都是碼簿中最接近碼的索引。

參數:
X形狀為 (n_samples, n_features) 的類陣列(array-like)、稀疏矩陣(sparse matrix)

要預測的新資料。

回傳:
labels形狀為 (n_samples,) 的 ndarray

每個樣本所屬群集的索引。

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

X 在 K-means 目標上的值的相反數。

參數:
X形狀為 (n_samples, n_features) 的類陣列(array-like)、稀疏矩陣(sparse matrix)

新資料。

y已忽略

未使用,為符合 API 慣例而在此處呈現。

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

X 中每個觀察值的權重。如果為 None,則所有觀察值都會被賦予相等的權重。

回傳:
scorefloat

X 在 K-means 目標上的值的相反數。

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

要求傳遞至 fit 方法的中繼資料。

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

每個參數的選項為

  • True:要求中繼資料,如果提供,則傳遞至 fit。如果未提供中繼資料,則會忽略此要求。

  • False:不要求中繼資料,且元估算器不會將其傳遞至 fit

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

  • str:中繼資料應以給定的別名而不是原始名稱傳遞至元估算器。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 會保留現有的要求。這可讓您變更部分參數的要求,而不是其他參數的要求。

在 1.3 版本中新增。

注意

只有當此估算器用作元估算器的子估算器時,此方法才相關,例如在Pipeline 中使用。否則,它沒有任何作用。

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

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

回傳:
self物件

已更新的物件。

set_output(*, transform=None)[原始碼]#

設定輸出容器。

請參閱 介紹 set_output API 以了解如何使用此 API 的範例。

參數:
transform{“default”, “pandas”, “polars”}, 預設值=None

設定 transformfit_transform 的輸出格式。

  • "default":轉換器的預設輸出格式

  • "pandas":DataFrame 輸出

  • "polars":Polars 輸出

  • None:轉換設定保持不變

1.4 版本新增: 新增了 "polars" 選項。

回傳:
self估計器實例

估計器實例。

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

設定此估計器的參數。

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

參數:
**paramsdict

估計器參數。

回傳:
self估計器實例

估計器實例。

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

要求傳遞給 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物件

已更新的物件。

transform(X)[原始碼]#

將 X 轉換為叢集距離空間。

在新空間中,每個維度都是到叢集中心的距離。 請注意,即使 X 是稀疏的,transform 返回的陣列通常也會是密集的。

參數:
X形狀為 (n_samples, n_features) 的類陣列(array-like)、稀疏矩陣(sparse matrix)

要轉換的新資料。

回傳:
X_new形狀為 (n_samples, n_clusters) 的 ndarray

在新的空間中轉換的 X。