【问题标题】:Sort K-means label from low to high based on data根据数据对 K-means 标签从低到高排序
【发布时间】:2020-04-15 19:03:08
【问题描述】:
我有一个“压力”的数据系列。我用 scikit 执行了一个 3 簇 K-means。我需要将分配每个数据的集群的标签从低到高排序,因此“低压”值具有较低的标签 (0),而最高压力值具有最高的标签 (2)。我将标签分配给数据帧
这是我使用的代码:
means = KMeans(n_clusters=3,random_state=3425)
dfNS["cB0"] = kmeans.fit_predict(dfNS[["B0"]])
【问题讨论】:
标签:
python
scikit-learn
cluster-analysis
k-means
【解决方案1】:
标准合身。结果是无序中心。
import numpy as np
from sklearn.cluster import KMeans
means = KMeans(n_clusters=3,random_state=3425)
cB0 = means.fit_predict(np.arange(100).reshape(-1, 1))
print(cB0)
输出:
[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
使用
ord_idx=np.argsort(means.cluster_centers_.flatten())
cntrs = np.zeros_like(cB0)-1
for i in np.arange(3):
cntrs[cB0==ord_idx[i]]=i
print(cntrs)
输出:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]