通過查找表轉換標籤是實現您想要的簡單方法。
首先我產生了一些模擬數據:
import numpy as np
np.random.seed(1000)
n = 38
X_morning = np.random.uniform(low=.02, high=.18, size=38)
X_afternoon = np.random.uniform(low=.05, high=.20, size=38)
X_night = np.random.uniform(low=.025, high=.175, size=38)
X = np.vstack([X_morning, X_afternoon, X_night]).T
然後我對數據進行聚類:
from sklearn.cluster import KMeans
k = 4
kmeans = KMeans(n_clusters=k, random_state=0).fit(X)
最後我用與NumPy的argsort
創建一個查找表是這樣的:
idx = np.argsort(kmeans.cluster_centers_.sum(axis=1))
lut = np.zeros_like(idx)
lut[idx] = np.arange(k)
樣品運行:
In [70]: kmeans.cluster_centers_.sum(axis=1)
Out[70]: array([ 0.3214523 , 0.40877735, 0.26911353, 0.25234873])
In [71]: idx
Out[71]: array([3, 2, 0, 1], dtype=int64)
In [72]: lut
Out[72]: array([2, 3, 1, 0], dtype=int64)
In [73]: kmeans.labels_
Out[73]: array([1, 3, 1, ..., 0, 1, 0])
In [74]: lut[kmeans.labels_]
Out[74]: array([3, 0, 3, ..., 2, 3, 2], dtype=int64)
idx
顯示從最低到最高消耗級別排序的集羣中心標籤。 lut[kmeans.labels_]
爲0
/3
的公寓屬於具有最低/最高消費級別的羣集。
我認爲你最好的選擇是在註釋後標註標籤。 – GWW