BisectingKMeans#
- class sklearn.cluster.BisectingKMeans(n_clusters=8, *, init='random', n_init=1, random_state=None, max_iter=300, verbose=0, tol=0.0001, copy_x=True, algorithm='lloyd', bisecting_strategy='biggest_inertia')[原始碼]#
二分 K 平均分群法。
請參閱使用者指南以了解更多。
在 1.1 版中新增。
- 參數:
- n_clustersint,預設值為 8
要形成的分群數量,同時也是要產生的質心數量。
- init{‘k-means++’、‘random’} 或可呼叫的函式,預設值為 ‘random’
初始化方法
‘k-means++’:以智慧方式選擇 k 平均分群法的初始分群中心,以加速收斂。請參閱 k_init 中的「注意事項」章節以了解更多詳細資訊。
‘random’:從資料中隨機選擇
n_clusters
個觀測值(列)作為初始質心。如果傳入可呼叫的函式,則該函式應採用引數 X、n_clusters 和一個隨機狀態,並傳回初始化。
- n_initint,預設值為 1
內部 k 平均演算法在每次二分法中,使用不同的質心種子運行的次數。這將會產生每次二分法中,根據慣性獲得的最佳 n_init 連續運行結果。
- random_stateint、RandomState 實例或 None,預設值為 None
決定內部 K 平均分群法中質心初始化的隨機數生成。使用 int 使隨機性具有確定性。請參閱詞彙表。
- max_iterint,預設值為 300
每次二分法中,內部 k 平均演算法的最大迭代次數。
- verboseint,預設值為 0
詳細模式。
- tolfloat,預設值為 1e-4
關於兩個連續迭代的分群中心差異的 Frobenius 範數的相對容忍度,以宣告收斂。用於每次二分法中的內部 k 平均演算法,以選擇最佳分群。
- 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)
的陣列,因此會更佔用記憶體。- bisecting_strategy{“biggest_inertia”, “largest_cluster”},預設值為“biggest_inertia”
定義應如何執行二分法
「biggest_inertia」表示 BisectingKMeans 將始終檢查所有計算的分群,以尋找具有最大 SSE(平方誤差總和)的分群,並將其二分。此方法專注於精確度,但在執行時間方面可能成本較高(特別是對於大量資料點)。
「largest_cluster」- BisectingKMeans 將始終分割先前計算的所有分群中,分配給它最大點數量的分群。這應比按 SSE(「biggest_inertia」)選擇更快,並且在大多數情況下可能會產生相似的結果。
- 屬性:
- cluster_centers_形狀為 (n_clusters, n_features) 的 ndarray
分群中心的座標。如果演算法在完全收斂之前停止(請參閱
tol
和max_iter
),則這些將與labels_
不一致。- labels_形狀為 (n_samples,) 的 ndarray
每個點的標籤。
- inertia_float
樣本到其最接近的分群中心的平方距離總和,如果提供,則按樣本權重加權。
- n_features_in_int
在 fit 期間看到的特徵數量。
- feature_names_in_形狀為 (
n_features_in_
,) 的 ndarray 在 fit 期間看到的特徵名稱。僅當
X
具有全都是字串的特徵名稱時才定義。
另請參閱
KMeans
K 平均演算法的原始實作。
注意事項
當 n_cluster 小於 3 時,由於該案例不必要的計算,可能會效率低下。
範例
>>> from sklearn.cluster import BisectingKMeans >>> import numpy as np >>> X = np.array([[1, 1], [10, 1], [3, 1], ... [10, 0], [2, 1], [10, 2], ... [10, 8], [10, 9], [10, 10]]) >>> bisect_means = BisectingKMeans(n_clusters=3, random_state=0).fit(X) >>> bisect_means.labels_ array([0, 2, 0, 2, 0, 2, 1, 1, 1], dtype=int32) >>> bisect_means.predict([[0, 0], [12, 3]]) array([0, 2], dtype=int32) >>> bisect_means.cluster_centers_ array([[ 2., 1.], [10., 9.], [10., 1.]])
若要比較 BisectingKMeans 和 K-Means,請參閱範例 二分 K 平均分群法與規則 K 平均分群法效能比較。
- fit(X, y=None, sample_weight=None)[原始碼]#
計算二分 k 平均分群法。
- 參數:
- X形狀為 (n_samples, n_features) 的 {array-like, sparse matrix}
要分群的訓練實例。
注意
資料將轉換為 C 排序,如果給定的資料不是 C 連續的,則會導致記憶體複製。
- y已忽略
未使用,此處按照慣例為了 API 的一致性而存在。
- sample_weight形狀為 (n_samples,) 的 array-like,預設值為 None
X 中每個觀測值的權重。如果為 None,則會為所有觀測值分配相等的權重。如果
init
為可呼叫的函式,則在初始化期間不會使用sample_weight
。
- 傳回:
- 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,) 的 array-like,預設值為 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,) 的 array-like,預設值為 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)[原始碼]#
取得此估算器的參數。
- 參數:
- deep布林值,預設為 True
如果為 True,將返回此估算器和所包含的子物件(為估算器)的參數。
- 傳回:
- params字典
參數名稱對應到它們的值。
- 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)[原始碼]#
與 K-means 目標上的 X 值相反。
- 參數:
- X形狀為 (n_samples, n_features) 的 {array-like, sparse matrix}
新數據。
- y已忽略
未使用,此處按照慣例為了 API 的一致性而存在。
- sample_weight形狀為 (n_samples,) 的 array-like,預設值為 None
X 中每個觀測值的權重。如果為 None,則所有觀測值都會被賦予相同的權重。
- 傳回:
- score浮點數
與 K-means 目標上的 X 值相反。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') BisectingKMeans [原始碼]#
請求傳遞到
fit
方法的中繼資料。請注意,只有當
enable_metadata_routing=True
時,此方法才相關(請參閱sklearn.set_config
)。請參閱使用者指南,了解路由機制如何運作。每個參數的選項如下
True
:請求中繼資料,如果提供,則會將其傳遞給fit
。如果未提供中繼資料,則會忽略請求。False
:不請求中繼資料,且元估算器不會將其傳遞給fit
。None
:不請求中繼資料,且如果使用者提供,則元估算器會引發錯誤。str
:中繼資料應使用此給定的別名,而不是原始名稱,傳遞給元估算器。
預設值 (
sklearn.utils.metadata_routing.UNCHANGED
) 會保留現有的請求。這可讓您變更某些參數的請求,而不用變更其他參數。在 1.3 版本中新增。
注意
只有當此估算器用作元估算器的子估算器時,此方法才相關,例如在
Pipeline
中使用。否則,它沒有任何作用。- 參數:
- sample_weight字串、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$') BisectingKMeans [原始碼]#
請求傳遞給
score
方法的中繼資料。請注意,只有當
enable_metadata_routing=True
時,此方法才相關(請參閱sklearn.set_config
)。請參閱使用者指南,了解路由機制如何運作。每個參數的選項如下
True
:請求中繼資料,並在提供時傳遞給score
。如果未提供中繼資料,則會忽略該請求。False
:不請求中繼資料,並且 meta-estimator 不會將其傳遞給score
。None
:不請求中繼資料,且如果使用者提供,則元估算器會引發錯誤。str
:中繼資料應使用此給定的別名,而不是原始名稱,傳遞給元估算器。
預設值 (
sklearn.utils.metadata_routing.UNCHANGED
) 會保留現有的請求。這可讓您變更某些參數的請求,而不用變更其他參數。在 1.3 版本中新增。
注意
只有當此估算器用作元估算器的子估算器時,此方法才相關,例如在
Pipeline
中使用。否則,它沒有任何作用。- 參數:
- sample_weight字串、True、False 或 None,預設為 sklearn.utils.metadata_routing.UNCHANGED
用於
score
中sample_weight
參數的中繼資料路由。
- 傳回:
- self物件
更新後的物件。