譜聚類#

class sklearn.cluster.SpectralClustering(n_clusters=8, *, eigen_solver=None, n_components=None, random_state=None, n_init=10, gamma=1.0, affinity='rbf', n_neighbors=10, eigen_tol='auto', assign_labels='kmeans', degree=3, coef0=1, kernel_params=None, n_jobs=None, verbose=False)[原始碼]#

將聚類應用於正規化拉普拉斯矩陣的投影。

實際上,當個別群集的結構高度非凸時,或更普遍地說,當群集的中心和擴散的度量不適合描述完整的群集時(例如當群集是 2D 平面上的嵌套圓時),譜聚類非常有用。

如果親和力矩陣是圖的鄰接矩陣,則可以使用此方法找到正規化的圖割 [1], [2]

在呼叫 fit 時,會使用核心函數(例如具有歐幾里得距離 d(X, X) 的高斯(又稱 RBF)核心)建構親和力矩陣

np.exp(-gamma * d(X,X) ** 2)

或 k 個最近鄰居連通性矩陣。

或者,可以透過設定 affinity='precomputed' 來指定使用者提供的親和力矩陣。

請在 使用者指南 中閱讀更多內容。

參數:
n_clustersint,預設值為 8

投影子空間的維度。

eigen_solver{‘arpack’、‘lobpcg’、‘amg’},預設值為 None

要使用的特徵值分解策略。AMG 需要安裝 pyamg。它在非常大的稀疏問題上可能更快,但也可能導致不穩定。如果為 None,則使用 'arpack'。有關 'lobpcg' 的更多詳細資訊,請參閱 [4]

n_componentsint,預設值為 None

用於頻譜嵌入的特徵向量數量。如果為 None,則預設為 n_clusters

random_stateint、RandomState 實例,預設值為 None

用於 lobpcg 特徵向量分解初始化(當 eigen_solver == 'amg' 時)和 K 平均初始化時使用的虛擬亂數產生器。使用 int 使結果在呼叫之間具有確定性(請參閱詞彙表)。

注意

當使用 eigen_solver == 'amg' 時,也必須使用 np.random.seed(int) 來固定全域 numpy 種子,以獲得確定性結果。有關更多資訊,請參閱 pyamg/pyamg#139

n_initint,預設值為 10

k 平均演算法將使用不同的質心種子執行的次數。最終結果將是慣性方面 n_init 連續運行的最佳輸出。僅當 assign_labels='kmeans' 時使用。

gammafloat,預設值為 1.0

rbf、poly、sigmoid、laplacian 和 chi2 核心的核心係數。對於 affinity='nearest_neighbors'affinity='precomputed'affinity='precomputed_nearest_neighbors' 會忽略。

affinitystr 或可呼叫物件,預設值為 'rbf'
如何建構親和力矩陣。
  • ‘nearest_neighbors’:透過計算最近鄰居圖來建構親和力矩陣。

  • ‘rbf’:使用徑向基函數 (RBF) 核心建構親和力矩陣。

  • ‘precomputed’:將 X 解釋為預先計算的親和力矩陣,其中較大的值表示實例之間具有更高的相似性。

  • ‘precomputed_nearest_neighbors’:將 X 解釋為預先計算的距離稀疏圖,並從每個實例的 n_neighbors 個最近鄰居建構二元親和力矩陣。

  • pairwise_kernels 支援的核心之一。

應僅使用產生相似性分數(隨相似性增加的非負值)的核心。此屬性不會由聚類演算法檢查。

n_neighborsint,預設值為 10

使用最近鄰居方法建構親和力矩陣時要使用的鄰居數量。對於 affinity='rbf' 會忽略。

eigen_tolfloat,預設值為 “auto”

拉普拉斯矩陣特徵值分解的停止條件。如果 eigen_tol="auto",則傳遞的容差將取決於 eigen_solver

  • 如果 eigen_solver="arpack",則 eigen_tol=0.0

  • 如果 eigen_solver="lobpcg"eigen_solver="amg",則 eigen_tol=None,這會設定底層 lobpcg 求解器以根據其啟發法自動解析值。詳細資訊請參閱 scipy.sparse.linalg.lobpcg

請注意,當使用 eigen_solver="lobpcg"eigen_solver="amg" 時,tol<1e-5 的值可能會導致收斂問題,應避免使用。

在 1.2 版本中新增:新增「auto」選項。

assign_labels{‘kmeans’、‘discretize’、‘cluster_qr’},預設值為 ‘kmeans’

在嵌入空間中指定標籤的策略。在拉普拉斯嵌入後,有兩種方法可以指定標籤。k 平均是一種常見的選擇,但它對初始化很敏感。離散化是另一種方法,它對隨機初始化不太敏感 [3]。cluster_qr 方法 [5] 直接從譜聚類中的特徵向量提取群集。與 k 平均和離散化相比,cluster_qr 沒有調整參數,也不會運行任何迭代,但無論在品質和速度方面都可能優於 k 平均和離散化。

在 1.1 版本中變更:新增新的標記方法「cluster_qr」。

degreefloat, 預設值=3

多項式核函數的次數。其他核函數會忽略此參數。

coef0float, 預設值=1

多項式和 sigmoid 核函數的零係數。其他核函數會忽略此參數。

kernel_paramsdict of str to any, 預設值=None

作為可呼叫物件傳遞的核函數的參數(關鍵字引數)和值。其他核函數會忽略此參數。

n_jobsint, 預設值=None

affinity='nearest_neighbors'affinity='precomputed_nearest_neighbors' 時要執行的平行任務數量。鄰居搜尋將會平行執行。None 表示 1,除非在 joblib.parallel_backend 環境中。-1 表示使用所有處理器。請參閱詞彙表以瞭解更多詳細資訊。

verbosebool, 預設值=False

詳細模式。

在 0.24 版本中新增。

屬性:
affinity_matrix_形狀為 (n_samples, n_samples) 的類陣列

用於聚類的親和力矩陣。僅在呼叫 fit 後可用。

labels_形狀為 (n_samples,) 的 ndarray

每個點的標籤

n_features_in_int

fit 期間看到的特徵數量。

在 0.24 版本中新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

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

在 1.0 版本中新增。

另請參閱

sklearn.cluster.KMeans

K-均值聚類。

sklearn.cluster.DBSCAN

具有雜訊的應用程式的基於密度的空間聚類。

注意事項

一個距離矩陣,其中 0 表示相同的元素,而高值表示非常不相似的元素,可以透過應用高斯(又稱 RBF、熱)核函數轉換為適合該演算法的親和力/相似性矩陣

np.exp(- dist_matrix ** 2 / (2. * delta ** 2))

其中 delta 是一個自由參數,表示高斯核函數的寬度。

另一種方法是採用點的 k 近鄰連通性矩陣的對稱版本。

如果安裝了 pyamg 套件,則會使用它:這會大大加快計算速度。

參考文獻

範例

>>> from sklearn.cluster import SpectralClustering
>>> import numpy as np
>>> X = np.array([[1, 1], [2, 1], [1, 0],
...               [4, 7], [3, 5], [3, 6]])
>>> clustering = SpectralClustering(n_clusters=2,
...         assign_labels='discretize',
...         random_state=0).fit(X)
>>> clustering.labels_
array([1, 1, 1, 0, 0, 0])
>>> clustering
SpectralClustering(assign_labels='discretize', n_clusters=2,
    random_state=0)
fit(X, y=None)[原始碼]#

從特徵或親和力矩陣執行譜聚類。

參數:
X形狀為 (n_samples, n_features) 或 (n_samples, n_samples) 的 {類陣列, 稀疏矩陣}

要聚類的訓練實例,如果 affinity='precomputed',則為實例之間的相似度/親和力,如果 affinity='precomputed_nearest_neighbors',則為實例之間的距離。如果提供的稀疏矩陣格式不是 csr_matrixcsc_matrixcoo_matrix,則會將其轉換為稀疏的 csr_matrix

y已忽略

不使用,此處僅為 API 的一致性而存在。

回傳值:
self物件

估計器的已擬合實例。

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

X 上執行譜聚類並回傳叢集標籤。

參數:
X形狀為 (n_samples, n_features) 或 (n_samples, n_samples) 的 {類陣列, 稀疏矩陣}

要聚類的訓練實例,如果 affinity='precomputed',則為實例之間的相似度/親和力,如果 affinity='precomputed_nearest_neighbors',則為實例之間的距離。如果提供的稀疏矩陣格式不是 csr_matrixcsc_matrixcoo_matrix,則會將其轉換為稀疏的 csr_matrix

y已忽略

不使用,此處僅為 API 的一致性而存在。

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

叢集標籤。

get_metadata_routing()[原始碼]#

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

請檢查使用手冊,瞭解路由機制如何運作。

回傳值:
routingMetadataRequest

封裝路由資訊的MetadataRequest

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

取得此估計器的參數。

參數:
deepbool, 預設值=True

如果為 True,則會回傳此估計器及其所包含的子物件(為估計器)的參數。

回傳值:
paramsdict

對應到其值的參數名稱。

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

設定此估計器的參數。

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

參數:
**paramsdict

估計器參數。

回傳值:
self估計器實例

估計器實例。