【问题标题】:Changing label names of Kmean clusters更改 Kmean 集群的标签名称
【发布时间】:2020-12-21 04:03:48
【问题描述】:

我正在通过 python 中的 sklearn 进行 kmean 聚类。我想知道如何更改 kmean 集群的生成标签名称。例如:

data          Cluster
0.2344         1
1.4537         2
2.4428         2
5.7757         3

而我想实现的目标

data          Cluster
0.2344         black
1.4537         red
2.4428         red
5.7757         blue

我不是直接通过打印设置1 -> black; 2 -> red。我想知道是否可以在默认情况下在 kmean 聚类模型中设置不同的聚类名称。

【问题讨论】:

    标签: machine-learning scikit-learn cluster-analysis k-means


    【解决方案1】:

    没有
    无法更改默认标签。
    您必须使用字典分别映射它们。 您可以查看文档here 中的所有可用方法。
    没有可用的方法或属性允许您更改默认标签。

    使用字典的解决方案:

    # Code
    a = [0,0,1,1,2,2]
    mapping = {0:'black', 1:'red', 2:'blue'}
    a = [mapping[i] for i in a]
    
    # Output
    ['black', 'black', 'red', 'red', 'blue', 'blue']
    

    如果您更改数据或集群数量: 首先我们将看到可视化:
    代码:
    导入和生成随机数据:

    from sklearn.cluster import KMeans
    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.random.uniform(100, size =(10,2))
    

    应用 Kmeans 算法

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

    这里,第 1 行是簇 0 的质心,第 2 行是簇 1 的质心,依此类推。

    可视化质心和数据

    plt.scatter(x[:,0],x[:,1])
    plt.scatter(arr[:,0], arr[:,1])
    

    您会得到一个如下所示的图表: .

    如您所见,您可以访问质心和训练数据。如果您的训练数据和集群数量保持不变,那么这些质心不会真正改变。

    但如果您添加更多的训练数据或更多数量的集群,那么您将不得不根据生成的质心创建新的映射。

    【讨论】:

    • 投票,那么如果通过向kmean模型输入更多数据来生成新集群,我该如何处理,因为集群标签会改变?例如 a = [1,2,2,3] 并且输出簇可能会更改为 [4,2,2,3,1]。因此,在这种情况下映射可能不起作用
    • 我已根据您的评论更新了我的答案。您必须记住,这些标签仅用于表示目的,绝不会在实际算法中使用。因此,即使您交换映射字典中的标签,也不会对实际算法本身产生影响。如果您有数据并且它们有标签,那么您应该寻找监督学习算法。
    • 如果这回答了您满意的问题,请考虑接受并支持它。请参阅How does accepting work? 了解更多信息。
    猜你喜欢
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2020-05-15
    • 1970-01-01
    • 2018-06-10
    • 2019-02-19
    • 1970-01-01
    相关资源
    最近更新 更多