Urutkan label K-means dari rendah ke tinggi berdasarkan data

Saya memiliki serangkaian data "tekanan". Saya melakukan 3 cluster K-means dengan scikit. Saya memerlukan label yang menetapkan cluster setiap data untuk diurutkan dari rendah ke tinggi, sehingga nilai 'tekanan rendah' ​​memiliki label lebih rendah (0), dan nilai tekanan tertinggi memiliki label tertinggi (2). Saya menetapkan label ke kerangka data

Ini adalah kode yang saya gunakan:

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

person Davitens    schedule 15.04.2020    source sumber
comment
Apakah ini data fitur tunggal?   -  person gnodab    schedule 15.04.2020


Jawaban (1)


Kesesuaian standar. Hasil di pusat-pusat yang tidak teratur.

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)

keluaran:

[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]

Menggunakan

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)

keluaran:


[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