MeanShift#

class sklearn.cluster.MeanShift(*, bandwidth=None, seeds=None, bin_seeding=False, min_bin_freq=1, cluster_all=True, n_jobs=None, max_iter=300)[來源]#

使用平面核的均值漂移分群。

均值漂移分群旨在發現樣本平滑密度中的「斑點」。它是一種基於質心的演算法,其工作原理是將質心的候選點更新為給定區域內點的均值。然後在後處理階段篩選這些候選點,以消除接近重複的點,從而形成最終的質心集。

使用分箱技術進行播種,以提高可擴展性。

有關如何使用 MeanShift 分群的範例,請參閱:均值漂移分群演算法的演示

使用者指南中閱讀更多資訊。

參數:
bandwidthfloat,預設值=None

平面核中使用的頻寬。

如果未提供,頻寬將使用 sklearn.cluster.estimate_bandwidth 估計;有關可擴展性的提示,請參閱該函式的文檔(另請參閱下面的「註釋」)。

seeds形狀為 (n_samples, n_features) 的類陣列,預設為 None

用於初始化核心的種子。如果未設定,則種子將通過 clustering.get_bin_seeds 計算,其中頻寬為網格大小,其他參數使用預設值。

bin_seedingbool,預設為 False

如果為 True,則初始核心位置不是所有點的位置,而是點的離散化版本的位置,其中點被分箱到一個粗糙度對應於頻寬的網格上。將此選項設定為 True 將加速演算法,因為將初始化更少的種子。預設值為 False。如果 seeds 參數不為 None,則忽略此選項。

min_bin_freqint,預設為 1

為了加速演算法,僅接受至少具有 min_bin_freq 個點的分箱作為種子。

cluster_allbool,預設為 True

如果為 True,則所有點都會被分群,即使是那些不在任何核心範圍內的孤立點。孤立點會被分配到最近的核心。如果為 False,則孤立點會被賦予叢集標籤 -1。

n_jobsint,預設為 None

用於計算的任務數量。以下任務受益於平行化:

  • 搜尋用於頻寬估計和標籤分配的最近鄰居。請參閱 NearestNeighbors 類的 docstring 中的詳細資訊。

  • 所有種子的爬山最佳化。

有關更多詳細資訊,請參閱詞彙表

None 表示 1,除非在 joblib.parallel_backend 內容中。-1 表示使用所有處理器。 有關更多詳細資訊,請參閱詞彙表

max_iterint,預設為 300

在叢集操作終止(針對該種子點)之前,每個種子點的最大迭代次數(如果尚未收斂)。

在 0.22 版中新增。

屬性:
cluster_centers_形狀為 (n_clusters, n_features) 的 ndarray

叢集中心的座標。

labels_形狀為 (n_samples,) 的 ndarray

每個點的標籤。

n_iter_int

在每個種子上執行的最大迭代次數。

在 0.22 版中新增。

n_features_in_int

fit 期間看到的特徵數量。

在 0.24 版中新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

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

在 1.0 版中新增。

另請參閱

KMeans

K-Means 叢集。

註釋

可擴展性

因為此實作使用平坦核心和球樹來查找每個核心的成員,所以在較低維度中,複雜度將趨向於 O(T*n*log(n)),其中 n 是樣本數,T 是點數。在較高維度中,複雜度將趨向於 O(T*n^2)。

可以使用更少的種子來提高可擴展性,例如,在 get_bin_seeds 函式中使用較高的 min_bin_freq 值。

請注意,estimate_bandwidth 函式的可擴展性遠不如均值漂移演算法,如果使用它,它將成為瓶頸。

參考文獻

Dorin Comaniciu 和 Peter Meer,“均值漂移:一種針對特徵空間分析的穩健方法”。 IEEE 模式分析和機器智慧交易。2002 年。第 603-619 頁。

範例

>>> from sklearn.cluster import MeanShift
>>> import numpy as np
>>> X = np.array([[1, 1], [2, 1], [1, 0],
...               [4, 7], [3, 5], [3, 6]])
>>> clustering = MeanShift(bandwidth=2).fit(X)
>>> clustering.labels_
array([1, 1, 1, 0, 0, 0])
>>> clustering.predict([[0, 0], [5, 5]])
array([1, 0])
>>> clustering
MeanShift(bandwidth=2)
fit(X, y=None)[原始碼]#

執行叢集。

參數:
X形狀為 (n_samples, n_features) 的類陣列

要叢集的樣本。

y已忽略

未使用,為了 API 的一致性而存在。

傳回:
self物件

已擬合的實例。

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

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

參數:
X形狀為 (n_samples, n_features) 的類陣列

輸入資料。

y已忽略

未使用,為了 API 的一致性而存在。

**kwargsdict

要傳遞給 fit 的引數。

在 1.4 版中新增。

傳回:
labels形狀為 (n_samples,) 的 ndarray,dtype=np.int64

叢集標籤。

get_metadata_routing()[原始碼]#

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

請檢查 使用者指南,了解路由機制如何運作。

傳回:
routingMetadataRequest

一個封裝路由資訊的 MetadataRequest

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

取得此估算器的參數。

參數:
deepbool,預設值為 True

若為 True,將回傳此估算器及其包含的子物件(亦為估算器)的參數。

傳回:
paramsdict

參數名稱對應到它們的值。

predict(X)[原始碼]#

預測 X 中每個樣本所屬的最接近群集。

參數:
X形狀為 (n_samples, n_features) 的類陣列

要預測的新資料。

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

每個樣本所屬群集的索引。

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

設定此估算器的參數。

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

參數:
**paramsdict

估算器參數。

傳回:
self估算器實例

估算器實例。