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
群集中心的座標。如果演算法在完全收斂之前停止(請參閱
tol
和max_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 演算法速度非常快(是現有最快的群集演算法之一),但它會陷入局部最小值。這就是為什麼多次重新啟動它會很有用的原因。
如果演算法在完全收斂之前停止(由於
tol
或max_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
用於
fit
中sample_weight
參數的中繼資料路由。
- 回傳:
- self物件
已更新的物件。
- set_output(*, transform=None)[原始碼]#
設定輸出容器。
請參閱 介紹 set_output API 以了解如何使用此 API 的範例。
- 參數:
- transform{“default”, “pandas”, “polars”}, 預設值=None
設定
transform
和fit_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物件
已更新的物件。