Сортировка метки K-средних от низкого к высокому на основе данных

У меня есть ряд данных "давление". Я выполнил 3 кластера K-средних с помощью 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