【问题标题】:How to get name clusters with labels instead of cluster numbers predicted by KMeans?如何获得带有标签的名称集群而不是 KMeans 预测的集群编号?
【发布时间】:2020-09-08 15:43:07
【问题描述】:

我有一个像这样的数据集:

                                  0        1        2        3        4        5
Unnamed: 0                         X        Y        Z        L        a        b
green leaf                   15.4999  20.9143  8.15938  52.8556 -23.6196  34.4027
yellow flower                38.4721  41.3847  4.41641  70.4446 -2.74272  80.3299
green leaf                   8.42304  10.2697  4.58244  38.3222 -11.2275  24.0959
yellow flower                59.1535  65.6835  42.2067  84.8347 -7.73898  28.0364

我使用 L,a,b 列来预测集群分配,并得到结果-y_pred like :

[1 2 1 1 ...]

但是,我想要下面的结果 -

cluster1: green leaf, green leaf, yellow flower
cluster2: yellow flower

我使用的代码是:

    df = np.transpose(pd.read_excel('color_xyz_lab.xlsx'))
    val_all = np.array(df.values[1:,:], dtype=np.float64)
    val_lab = val_all[:,3:6]
    y_pred = KMeans(n_clusters= 4 , random_state=0).fit_predict(val_lab)

【问题讨论】:

    标签: python python-3.x pandas numpy scikit-learn


    【解决方案1】:

    你可以分组然后折叠:

    pd.DataFrame({'a':df.index,'cluster':y_pred}).groupby('cluster').a.agg(','.join).to_dict()
    {1: 'green leaf,green leaf,yellow flower', 2: 'yellow flower'}
    

    【讨论】:

    • 非常感谢,有一个小问题,如何使用制表符使它们清晰,我尝试使用.groupby('cluster').a.agg("\t".join)。 to_dict() 但没有用
    • @4daJKong 你是什么意思它没有工作?结果是否包含\t?如果是这样,那么它确实有效。要使用选项卡将其可视化,您将需要一个 for 循环并打印集群的每个值元素
    • 感谢您的回复。实际上,我的意思是我想要像图表一样的结果,但现在它喜欢一个长字符串,即使它们之间有一些空间,比如黄色花 (keltano),黄色花 (kannusruoho).1,黄色花 (voikukka), ....
    • 不,它不是字符串而是字典。你需要查字典
    猜你喜欢
    • 2019-04-04
    • 2013-07-15
    • 2019-11-12
    • 2017-05-25
    • 1970-01-01
    • 2016-07-20
    • 2020-05-15
    • 2014-03-27
    • 2020-12-21
    相关资源
    最近更新 更多