จัดเรียงป้ายกำกับ K-means จากต่ำไปสูงตามข้อมูล

ฉันมีชุดข้อมูล "ความดัน" ฉันทำ K-mean 3 กลุ่มด้วย scikit ฉันต้องการป้ายกำกับที่กำหนดคลัสเตอร์ของแต่ละข้อมูลให้เรียงลำดับจากต่ำไปสูง ดังนั้นค่า 'ความดันต่ำ' จึงมีป้ายกำกับต่ำกว่า (0) และค่าความดันสูงสุดจะมีป้ายกำกับสูงสุด (2) ฉันกำหนดป้ายกำกับให้กับ datafrae

นี่คือรหัสที่ฉันใช้:

means = KMeans(n_clusters=3,random_state=3425)
dfNS["cB0"] = kmeans.fit_predict(dfNS[["B0"]])

person Davitens    schedule 15.04.2020    source แหล่งที่มา
comment
นี่เป็นข้อมูลฟีเจอร์เดียวใช่ไหม   -  person gnodab    schedule 15.04.2020


คำตอบ (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]
person gnodab    schedule 15.04.2020