我在Python中使用sklearn进行K-means聚类。我想知道如何更改生成的K-means聚类标签名称。例如:
data Cluster0.2344 11.4537 22.4428 25.7757 3
我希望达到以下效果:
data Cluster0.2344 black1.4537 red2.4428 red5.7757 blue
我并不是指通过打印直接设置1 -> black; 2 -> red
。我想知道是否可以在K-means聚类模型中默认设置不同的聚类名称。
回答:
否
没有办法更改默认标签。
您必须使用字典单独映射它们。您可以在文档中查看所有可用方法这里。
没有一种可用方法或属性允许您更改默认标签。
使用字典的解决方案:
# 代码a = [0,0,1,1,2,2]mapping = {0:'black', 1:'red', 2:'blue'}a = [mapping[i] for i in a]# 输出['black', 'black', 'red', 'red', 'blue', 'blue']
如果您更改数据或聚类数量:首先我们来看一下可视化:
代码:
导入和生成随机数据:
from sklearn.cluster import KMeansimport numpy as npimport matplotlib.pyplot as pltx = np.random.uniform(100, size =(10,2))
应用K-means算法
kmeans = KMeans(n_clusters=3, random_state=0).fit(x)
获取聚类中心
arr = kmeans.cluster_centers_
您的聚类中心看起来像这样:
array([[23.81072765, 77.21281171], [ 8.6140551 , 23.15597377], [93.37177176, 32.21581703]])
这里,第一行是聚类0的中心,第二行是聚类1的中心,依此类推。
可视化中心和数据:
plt.scatter(x[:,0],x[:,1])plt.scatter(arr[:,0], arr[:,1])
如您所见,您可以访问中心点以及训练数据。如果您的训练数据和聚类数量是恒定的,这些中心点不会真正改变。
但是,如果您添加更多训练数据或增加聚类数量,那么您将需要根据生成的中心点创建新的映射。