【问题标题】:Evaluate clustering performance评估集群性能
【发布时间】:2020-01-13 01:26:10
【问题描述】:
  1. 我的原始数据如下:

    df =
    
            long lat long lat long lat long lat 
    
        1   11   6   15   19  23   27  30   34
        2   12   7   16   20  24   28  31   35
        3   13   8   17   21  25   29  32   36
        ...
        96  14   9   18   22  26   30  33   37
    

    其中:1,2,3,..,96 的列是“taxi_id”。这意味着我们有96汽车。

    其他列表示汽车的位置,假设它们是一对。

    示例:带有标签1 的出租车的位置为(11,6)(15,19)(23,27)(30,34)

  2. 所以,我需要对它们进行聚类以查看最常用的轨迹 这些出租车司机。

    为此,我计算了“一些”距离矩阵,然后计算了它的相似度矩阵并将最终矩阵应用于Affinity Propagation

  3. 亲和传播代码:

    from sklearn.cluster import AffinityPropagation
    
    af = AffinityPropagation(preference=-6).fit(X)
    cluster_centers_indices = af.cluster_centers_indices_
    labels = af.labels_ 
    
    # Some code to calculate number of clusters (3 in this case)
    # Some code to check which "taxi_id" related to clusters
    
  4. 最终数据如下:

    final_df = 
    
                   long    lat
            1      11      22
        0   2      33      44
            3      55      66
            ...    ...     ...
            45     12      13
        2   46     14      15
            47     16      17
    

我想评估我的聚类。我不知道怎么做。我没有预测任何事情,那么我该如何使用sklearn 评估指标呢?我什至找不到逻辑(究竟要评估什么)?也许两个集群(CD)之间的距离?您有任何想法或解决方案代码如何进行吗?

【问题讨论】:

    标签: python cluster-computing evaluation


    【解决方案1】:

    clusteval 库可以使用。该库包含五种可用于评估聚类的方法; 剪影dbindex导数、*dbscan *和hdbscan

    pip install clusteval
    

    我会建议您使用 dbscan:

    # Import library
    from clusteval import clusteval
    
    # Set parameters
    ce = clusteval(method='dbscan')
    
    # Fit to find optimal number of clusters using dbscan
    out = ce.fit(df.values)
    
    # Make plot of the cluster evaluation
    ce.plot()
    
    # Make scatter plot. Note that the first two coordinates are used for plotting.
    ce.scatter(df.values)
    

    【讨论】:

      【解决方案2】:

      我什至找不到逻辑(究竟要评估什么)?也许两个集群之间的距离(CD)?

      您是对的,一种方法是测量集群中所有集群点之间的距离。这个想法是针对不同数量的集群对其进行测试,在您的情况下,oyu 只有 3 个集群 (0-2)。

      例如,剪影得分就是其中一种技术。

      https://en.wikipedia.org/wiki/Silhouette_(clustering)

      您有任何想法或解决方案代码如何进行吗?

      这里有很多关于stackoverflow的解决方案: How to use silhouette score in k-means clustering from sklearn library?

      另一种可能是适合您的肘部方法: Sklearn kmeans equivalent of elbow method

      他们试图回答的所有这些方法的问题:我应该选择多少个集群?如果您预先知道要拥有的集群数量,这可以帮助您判断集群的风险和质量。

      【讨论】:

      • 感谢您的想法。实际上,我打算通过sklearn 申请RandomizedSearchCV。但我发现它是用于监督学习的。关于簇数,找到了评估方法,然后我将创建一个循环来更改主要参数的值,这会影响我的簇数(在 Affinity Propagation 的情况下的偏好和阻尼),我将在相同的循环。
      猜你喜欢
      • 2019-05-01
      • 1970-01-01
      • 2012-06-08
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 2012-08-08
      相关资源
      最近更新 更多