Отображение кластеризации k-средних - PullRequest
0 голосов
/ 02 мая 2020

Я использую K-Means кластеризацию sklearn и хочу заменить вычисленные метки кластера K-Means на значения центроидов, используя обученную модель K-Means.

Код, который я использую, выглядит следующим образом:

# Initialize K-Means clustering model-
kmeans_conv1 = KMeans(n_clusters = 5)

# Train model on training data (compute k-means clustering)-
kmeans_conv1.fit(conv1_nonzero.reshape(-1, 1))

# number of clusters used-
kmeans_conv1.n_clusters
# 5

# Get centroids-
kmeans_conv1.cluster_centers_
'''
array([[-0.05669265],
       [ 0.06742188],
       [-0.08835593],
       [ 0.03749201],
       [ 0.0896403 ]], dtype=float32)
'''


# Clustered labels of each data point-
kmeans_conv1.labels_

set(kmeans_conv1.labels_)                                             
Out[142]: {0, 1, 2, 3, 4}

# Get clustered label for each data point-
clustered_labels = kmeans_conv1.labels_

В настоящее время я использую условия if-else для сопоставления меток со значениями центроида как:

new_clusters = []


for clabel in clustered_labels:
    if clabel == 0:
        new_clusters.append(kmeans_conv1.cluster_centers_[0][0])
    elif clabel == 1:
        new_clusters.append(kmeans_conv1.cluster_centers_[1][0])
    elif clabel == 2:
        new_clusters.append(kmeans_conv1.cluster_centers_[2][0])
    elif clabel == 3:
        new_clusters.append(kmeans_conv1.cluster_centers_[3][0])
    elif clabel == 4:
        new_clusters.append(kmeans_conv1.cluster_centers_[4][0])

В конце я хочу получить список 'new_clusters' или np.array переменная, которая будет содержать значения центроида вместо меток кластера.

Однако, есть ли лучший способ добиться этого без использования условий if-else?

Ответы [ 2 ]

2 голосов
/ 02 мая 2020

Этого достаточно:

for clabel in clustered_labels:
    new_clusters.append(
        kmeans_conv1.cluster_centers_[clabel][0]
    )
0 голосов
/ 02 мая 2020

Нашел этот метод:

# First conv layer condition-
cond_conv1 = [clustered_labels == 0, clustered_labels == 1, clustered_labels == 2, clustered_labels == 3, clustered_labels == 4]

# values-
val_conv1 = kmeans_conv1.cluster_centers_[:, 0]

# Get new clustered value weights-
new_weights_conv1 = np.select(cond_conv1, val_conv1)
...