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

分群中心的座標。如果演算法在完全收斂之前停止(請參閱 tolmax_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

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$') 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

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

傳回:
self物件

更新後的物件。

transform(X)[原始碼]#

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

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

參數:
X形狀為 (n_samples, n_features) 的 {array-like, sparse matrix}

要轉換的新數據。

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

在新的空間中轉換的 X。