sklearn.cluster.KMeans?
class sklearn.cluster.KMeans(n_clusters=8, *, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='deprecated', verbose=0, random_state=None, copy_x=True, n_jobs='deprecated', algorithm='auto')
K-均值聚類
在用戶指南中閱讀更多內容。
參數 | 方法 |
---|---|
n_clusters | int, default=8 要形成的簇數以及要生成的質心數。 |
init | {‘k-means++’, ‘random’, ndarray, callable}, default=’k-means++’ 初始化方法: ‘k-means++’:明智地選擇初始聚類中心進行k均值聚類,加快收斂速度.有關詳細信息,請參閱k_init中的Notes部分。 ‘random’:從初始質心的數據中隨機選擇 n_clusters 觀測(行)。如果一個ndarray被傳遞,它應該是形狀的(n_clusters, n_features),并給出初始中心。 如果傳遞了一個可調用函數,它應該接受參數X、n_clusters和一個隨機狀態,并返回一個初始化。 |
max_iter | int, default=300 相對容忍度與Frobenius范數, 連續兩次迭代之間的聚類中心的差異聲明收斂。不建議將其設置為 tol=0 ,因為由于舍入錯誤,可能永遠不會聲明收斂。用一個很小的數字代替。 |
precompute_distances | {‘auto’, True, False}, default=’auto’ 預計算距離(速度更快,但占用更多內存)。 ‘auto’:如果n個樣本n_samples * n_clusters > 1200萬,不預先計算距離。這相當于使用雙精度的每個作業大約100 MB的開銷。 True :總是預先計算距離 False:永遠不要預先計算距離。 自0.23版本起被棄用:在0.22版本中不推薦使用‘precompute_distances’,并將在0.25中刪除。它沒有效果。 |
verbose | int, default=0 詳細模式 |
random_state | int, RandomState instance, default=None 確定用于質心初始化的隨機數生成。使用整數使隨機性確定。見Glossary。 |
copy_x | bool, default=True 當預計算距離時,首先對數據進行中心化比較精確.如果copy_x為True(默認值),則不會修改原始數據。如果為False,則對原始數據進行修改,并在函數返回之前將其放回,但可以通過減去和添加數據均值來引入較小的數值差異。注意,如果原始數據不是C-contiguous的,即使copy_x為False,也會復制。如果原始數據稀疏,但不采用CSR格式,即使copy_x為false,也會復制。 |
n_jobs | int, default=None 用于計算的OpenMP線程數。并行性是在主cython循環上按樣本順序進行的,該循環將每個樣本分配到其最近的中心。 None 或-1 意味著使用所有處理器。從0.23版 n_jobs 開始不推薦使用*:從0.23版*開始不推薦使用,并將在0.25版中刪除。 |
algorithm | {“auto”, “full”, “elkan”}, default=”auto” 表示K-means要使用的算法。經典的EM式算法是“full”的。通過三角不等式,對于具有定義良好的簇的數據,“elkan”變化更為有效。但是,由于分配了一個額外的形狀數組(n_samples, n_clusters),所以內存更多。 目前,“auto”(為向后兼容而保留)選擇了“Elkan”,但它將來可能會改變,以獲得更好的啟發式。 *在版本0.18中更改:*添加了Elkan算法 |
屬性 | 說明 |
---|---|
cluster_centers_ | ndarray of shape (n_clusters, n_features) 簇中心坐標。如果算法在完全收斂之前停止(請參閱 tol 和max_iter ),這些將與labels_ 比配。 |
labels_ | ndarray of shape (n_samples,) 每一點的標簽 |
inertia_ | float 樣本到其最近的聚類中心的平方距離之和。 |
n_iter_ | int 運行的迭代次數 |
另見
替代性在線實施,使用迷你批次對中心位置進行增量更新。對于大規模學習(例如n_samples> 10k),MiniBatchKMeans可能比默認的批處理實現要快得多。
注
k-均值問題采用Lloyd’s算法或Elkan’s算法求解。
平均復雜度為O(KnT),n為樣本數,T為迭代次數。
最壞的情形復雜度由O(n^(k+2/p))給出,n=n_samples,p=n_features。 (D. Arthur and S. Vassilvitskii, ‘How slow is the k-means method?’ SoCG2006)
在實踐中,k均值算法是非常快速的(可用的最快的聚類算法之一),但它是在局部收斂極小。這就是為什么多次重新啟動它是有用的。
如果算法在完全收斂之前停止(因為tol
或max_iter
), labels_
和cluster_centers
將不一致,也就是說,cluster_centers
不會是每個簇中各點的均值。此外,估計器將在最后一次迭代后重新分配 labels_
,使labels_
與訓練集上的預測一致。
示例
>>> 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).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.]])
方法
方法 | 說明 |
---|---|
fit (self, X[, y, sample_weight]) |
計算k-均值聚類 |
fit_predict (self, X[, y, sample_weight]) |
計算聚類中心并預測每個樣本的聚類索引 |
fit_transform (self, X[, y, sample_weight]) |
計算聚類并將X變換成簇距離空間 |
get_params (self[, deep]) |
獲取此估計器的參數 |
predict (self, X[, sample_weight]) |
預測X中每個樣本所屬的最接近的聚類 |
set_params (self, **params) |
設置此估計器的參數 |
transform (self, X) |
將X轉換為簇距離空間 |
__init__(self, n_clusters=8, *, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='deprecated', verbose=0, random_state=None, copy_x=True, n_jobs='deprecated', algorithm='auto')
初始化self。請參閱help(type(self))以獲得準確的說明。
fit(self, X, y=None, sample_weight=None)
計算k-均值聚類
參數 | 說明 |
---|---|
X | {array-like, sparse matrix} of shape (n_samples, n_features), or (n_samples, n_samples) 要聚類的訓練實例。必須注意的是,數據將轉換為C順序,如果給定的數據不是C-連續的,這將導致內存副本。如果一個稀疏矩陣被傳遞,如果它不是CSR格式,它將被復制。 |
y | Ignored 未使用,在此按約定呈現為API一致性。 |
sample_weight | array-like of shape (n_samples,), default=None X中每個觀測值的權重,如果沒有,則所有觀測值都被賦予相同的權重。 |
返回值 | 說明 |
---|---|
self | 擬合的估計器 |
fit_predict(self, X, y=None, sample_weight=None)
計算聚類中心并預測每個樣本的聚類索引
方便方法;等價于調用fit(X)后再predict(X)。
參數 | 說明 |
---|---|
X | {array-like, sparse matrix} of shape (n_samples, n_features) 要轉換的新數據 |
y | Ignored 未使用,在此按約定呈現為API一致性。 |
sample_weight | array-like of shape (n_samples,), default=None X中每個觀測值的權重,如果沒有,則所有觀測值都被賦予相同的權重。 |
返回值 | 說明 |
---|---|
labels | ndarray of shape (n_samples,) 每個樣本所屬的聚類索引 |
fit_transform(self, X, y=None, sample_weight=None)
計算聚類并將X變換成簇距離空間
等效于 fit(X).transform(X),但更有效地實現。
參數 | 說明 |
---|---|
X | {array-like, sparse matrix} of shape (n_samples, n_features) 要轉換的新數據 |
y | Ignored 未使用,在此按約定呈現為API一致性。 |
sample_weight | array-like of shape (n_samples,), default=None X中每個觀測值的權重,如果沒有,則所有觀測值都被賦予相同的權重。 |
返回值 | 說明 |
---|---|
labels | array of shape (n_samples, n_clusters) X在新空間中的變換 |
get_params(self, deep=True)
獲取此估計器的參數
參數 | 說明 |
---|---|
deep | bool, default=True 如果為True,則將返回此估計器的參數和所包含的作為估計量的子對象。 |
返回值 | 說明 |
---|---|
params | mapping of string to any 映射到其值的參數名稱 |
predict(self, X, sample_weight=None)
預測X中每一個樣本所屬的最接近的聚類。
在矢量量化文獻中,cluster_centers_被稱為代碼簿, predict
返回的每個值都是代碼簿中最接近的代碼的索引。
參數 | 說明 |
---|---|
X | {array-like, sparse matrix} of shape (n_samples, n_features) 要轉換的新數據 |
sample_weight | array-like of shape (n_samples,), default=None X中每個觀測值的權重,如果沒有,則所有觀測值都被賦予相同的權重。 |
返回值 | 說明 |
---|---|
labels | ndarray of shape (n_samples,) 每個樣本所屬的聚類索引 |
score(self, X, y=None, sample_weight=None)
K-均值目標上X值的相反
參數 | 說明 |
---|---|
X | {array-like, sparse matrix} of shape (n_samples, n_features) 要轉換的新數據 |
y | Ignored 未使用,在此按約定呈現為API一致性。 |
sample_weight | array-like of shape (n_samples,), default=None X中每個觀測值的權重,如果沒有,則所有觀測值都被賦予相同的權重。 |
返回值 | 說明 |
---|---|
score | float 與K-均值目標上的X值相反. |
set_params(self, **params)
設置此估計器的參數
該方法適用于簡單估計器以及嵌套對象(例如pipelines)。后者具有表單的 <component>__<parameter>
參數,這樣就可以更新嵌套對象的每個組件。
參數 | 說明 |
---|---|
**params | dict 估計器參數 |
返回值 | 說明書 |
---|---|
self | object 估計器實例 |
transform(self, X)
將X轉換成簇距空間。
在新的空間中,每個維度都是到簇中心的距離。請注意,即使X是稀疏的,轉換返回的數組通常也是密集的。
參數 | 說明 |
---|---|
X | {array-like, sparse matrix} of shape (n_samples, n_features) 要轉換的新數據 |
返回值 | 說明 |
---|---|
labels | array of shape (n_samples, n_clusters) X在新空間中的變換 |