K均值#

sklearn.cluster.k_means(X, n_clusters, *, sample_weight=None, init='k-means++', n_init='auto', max_iter=300, verbose=False, tol=0.0001, random_state=None, copy_x=True, algorithm='lloyd', return_n_iter=False)[原始碼]#

執行 K-means 分群演算法。

請參閱使用者指南以了解更多資訊。

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

要進行分群的觀測值。必須注意的是,資料將被轉換為 C 順序,如果給定的資料不是 C 連續的,這將導致記憶體複製。

n_clusters整數 (int)

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

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

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

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

初始化的方法

  • 'k-means++':以智慧的方式選擇 K-means 分群的初始群集中心,以加速收斂。有關更多詳細資訊,請參閱 k_init 中的 Notes 區段。

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

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

  • 如果傳遞可呼叫物件,它應該接受參數 Xn_clusters 和隨機狀態,並回傳初始化。

n_init‘auto’ 或 int,預設值為 “auto”

K-means 演算法將使用不同質心種子執行的次數。最終結果將是以慣性 (inertia) 而言,n_init 次連續執行中的最佳輸出。

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

在 1.2 版本中新增: 新增 n_init 的 ‘auto’ 選項。

在 1.4 版本中變更: n_init 的預設值變更為 'auto'

max_iter整數 (int),預設值為 300

K-means 演算法要執行的最大迭代次數。

verbose布林值 (bool),預設值為 False

詳細模式。

tol浮點數 (float),預設值為 1e-4

關於兩個連續迭代的群集中心差異的 Frobenius 範數 (Frobenius norm) 的相對容差,以宣告收斂。

random_state整數 (int)、RandomState 實例或 None,預設值為 None

決定質心初始化的隨機數生成。使用整數使隨機性具有確定性。請參閱詞彙表

copy_x布林值 (bool),預設值為 True

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

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

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

在 0.18 版本中變更: 新增 Elkan 演算法

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

return_n_iter布林值 (bool),預設值為 False

是否回傳迭代次數。

回傳值:
centroid形狀為 (n_clusters, n_features) 的 ndarray

在 K-means 最後一次迭代時找到的質心。

label形狀為 (n_samples,) 的 ndarray

label[i] 是第 i 個觀測值最接近的質心的代碼或索引。

inertia浮點數 (float)

慣性準則的最終值(訓練集中所有觀測值到最近質心的平方距離總和)。

best_n_iter整數 (int)

對應最佳結果的迭代次數。僅當 return_n_iter 設定為 True 時才會傳回。

範例

>>> import numpy as np
>>> from sklearn.cluster import k_means
>>> X = np.array([[1, 2], [1, 4], [1, 0],
...               [10, 2], [10, 4], [10, 0]])
>>> centroid, label, inertia = k_means(
...     X, n_clusters=2, n_init="auto", random_state=0
... )
>>> centroid
array([[10.,  2.],
       [ 1.,  2.]])
>>> label
array([1, 1, 1, 0, 0, 0], dtype=int32)
>>> inertia
16.0