【问题标题】:automatically determine number of clusters k-means自动确定簇数 k-means
【发布时间】:2015-01-05 17:16:11
【问题描述】:

我想在rapid miner中建立一个集群模型,可以自动定义集群的数量,然后继续k-means算法。 Rapid Miner 有什么方法可以自动确定聚类的 k 吗?

【问题讨论】:

  • 您应该在 rapidminer 论坛上提出此类问题,除非您打算修改 rapdiminer 源代码 - 本网站用于编程问题,而不是用于使用问题。

标签: cluster-analysis data-mining k-means rapidminer


【解决方案1】:

在 k-means 中,k 的值由用户提供。可以使用集群有效性度量(例如 Davies-Bouldin)来评估生成的集群以给出分数。通过改变 k,可以产生不同的集群有效性分数,并且最佳分数(对于 Davies-Bouldin 而言是最小值)将成为最有趣的 k 值的候选者。请点击链接了解如何在 RapidMiner Examples 中完成此操作的详细信息。

有很多与此相关的警告。最重要的一点是,必须有领域专家参与,以检查 k 的值和产生的聚类是否有意义。

【讨论】:

    【解决方案2】:

    确定 K 的一个技巧是首先对您的数据集运行 DBSCAN。从 DBSCAN 中确定聚类的数量,然后使用 K-means 得到聚类中心

    这是一些python代码:

    from sklearn.cluster import DBSCAN #python -m pip install scikit-learn
    import cv2 as cv #python -m pip install opencv-python
    import numpy as np #python -m pip install numpy
    Z=np.array([0.0,1.0,0.25,0.11,0.12,0.27,0.99,1.1,0.05,0.06]) 
    Z=np.unique(Z) #speed up the DBSCAN by considering only unique points
    Z=Z.reshape((-1,1)).astype(np.float32)
    K=int(np.max(DBSCAN(eps=0.05,min_samples=2).fit(Z).labels_))+1
    criteria = (cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER, 10, 1.0)
    _,label,center=cv.kmeans(Z,K,None,criteria,10,cv.KMEANS_RANDOM_CENTERS)
    print(f"\nK={K}")
    print("\nlabel=")
    print(label)
    print("\ncenter=")
    print(center)
    

    代码输出:

    K=4
    
    label=
    [[0]
     [0]
     [0]
     [3]
     [3]
     [1]
     [1]
     [2]
     [2]
     [2]]
    
    center=
    [[0.03666667]
     [0.26      ]
     [1.0300001 ]
     [0.11499999]]
       
    

    【讨论】:

      猜你喜欢
      • 2021-06-18
      • 2014-07-12
      • 2016-12-18
      • 2016-04-14
      • 2016-11-26
      • 2011-07-27
      • 2016-12-03
      • 2013-07-07
      • 2017-08-22
      相关资源
      最近更新 更多