Сортировать K-означает метку от низкого до высокого на основе данных - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть данные серии "давление". Я выполнил 3 кластера K-средних с Scikit. Мне нужна метка, которая назначает кластер для каждой сортировки данных от низкого к высокому, поэтому значения «низкого давления» имеют нижнюю метку (0), а самые высокие значения давления имеют самую высокую метку (2). Я присвоил метки фрейму данных

Это код, который я использовал:

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

1 Ответ

0 голосов
/ 15 апреля 2020

Стандартная посадка. Результаты в неупорядоченных центрах.

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