为sklearn k-means算法添加标签

6

我正在尝试在Python中使用kmeans。

data = [[1,2,3,4,5],[1,0,3,2,4],[4,3,234,5,5],[23,4,5,1,4],[23,5,2,3,5]]

每个数据都有一个标签。例如:
[1,2,3,4,5] -> Fiat1
[1,0,3,2,4] -> Fiat2
[4,3,234,5,5] -> Mercedes
[23,4,5,1,4] -> Opel
[23,5,2,3,5] -> bmw

kmeans = KMeans(init='k-means++', n_clusters=3, n_init=10)
kmeans.fit(data)

我的目标是在运行KMeans后,获取每个聚类的标签。

以下是一个虚假的例子:

聚类1: Fiat1, Fiat2

聚类2: Mercedes

聚类3: bmw, Opel

我该怎么办?

2个回答

7

代码

from sklearn.cluster import KMeans
import numpy as np

data = np.array([[1,2,3,4,5],[1,0,3,2,4],[4,3,234,5,5],[23,4,5,1,4],[23,5,2,3,5]])
labels = np.array(['Fiat1', 'Fiat2', 'Mercedes', 'Opel', 'BMW'])
N_CLUSTERS = 3

kmeans = KMeans(init='k-means++', n_clusters=N_CLUSTERS, n_init=10)
kmeans.fit(data)
pred_classes = kmeans.predict(data)

for cluster in range(N_CLUSTERS):
    print('cluster: ', cluster)
    print(labels[np.where(pred_classes == cluster)])

输出:

cluster:  0
['Opel' 'BMW']
cluster:  1
['Mercedes']
cluster:  2
['Fiat1' 'Fiat2']

1
如果您将标签放入数组中:
labels=['Fiat1', 'Fiat2', 'Mercedes', 'Opel', 'bmw']

然后,

n_clusters=3
pred_clusters=kmeans.fit(data).labels_
cluster_labels=[[] for i in range(n_clusters)]
for i, j in enumerate(pred_clusters):
    cluster_labels[j].append(labels[i])

会给你:
[['Fiat1', 'Fiat2'], ['Mercedes'], ['Opel', 'bmw']]

这是每个聚类中数据标签的列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接