【问题标题】:Create Dendrogram with Elki使用 Elki 创建树状图
【发布时间】:2019-12-26 19:05:42
【问题描述】:

我想为聚类结果绘制树状图。现在我正在使用 ELKI 0.7.5 中的 ElkiBuilder 进行集群。

在最好的情况下,我想直接绘制树状图。

如果这不可能,我想从聚类中提取信息(距离),以使用另一个库创建树状图(例如,使用 newick 格式)

因此我的问题:

  • 是否可以使用 ELKI 创建树状图?

  • 是否可以访问在聚类期间计算的距离? (两个聚类合并时使用的距离)

现在我正在使用以下代码进行聚类:

public Clustering<?> createClustering() {
    double[][] distanceMatrix = new double[][]{
            {0.0, 1.0, 3.0},
            {1.0, 0.0, 4.0},
            {3.0, 4.0, 0.0}
    };
    int noOfClusters = 2;
    // Adapter to load data from an existing array.
    DatabaseConnection dbc = new ArrayAdapterDatabaseConnection(distanceMatrix);
    // Create a database (which may contain multiple relations!)
    Database db = new StaticArrayDatabase(dbc, null);
    // Load the data into the database (do NOT forget to initialize...)
    db.initialize();

    Clustering<?> clustering = new ELKIBuilder<>(CutDendrogramByNumberOfClusters.class) //
            .with(CutDendrogramByNumberOfClusters.Parameterizer.MINCLUSTERS_ID, noOfClusters) //
            .with(AbstractAlgorithm.ALGORITHM_ID, AnderbergHierarchicalClustering.class) //
            .with(AGNES.Parameterizer.LINKAGE_ID, WardLinkage.class)
            .build().run(db);
    return clustering;
}

【问题讨论】:

  • ELKI 的 UI 可以显示树状图。显然,这需要合并距离。所以它当然是可能的。也许您只需要多探索一下图书馆? CutDendrogram... 类可能使用树状图,但通过切割返回平面分区,所以也许这不是您想要使用的类?

标签: java hierarchical-clustering dendrogram elki


【解决方案1】:

AGNES 类(我建议改用AnderbergHierarchicalClustering,它速度更快但结果完全相同)以称为“指针层次结构”(PointerHierarchyRepresentationResult)的标准形式返回聚类。 i 和 j 在高度 h 处的合并表示为从 i 到 j 的指针,高度为 h。之后,j 表示合并后的集群。这种基本形式是由 Sibson 等人介绍的。 1973 年的 SLINK 算法。

特别是它包含y 信息(getParentDistanceStore)、合并(由getParentStore 提供),它可以计算顺序来排列可视化点getPositions

你可能想看看DendrogramVisualization的代码,它负责在GUI中创建SVG树状图。

【讨论】:

  • 感谢您的回复。老实说,我在编程方面不是很有经验,所以我很难理解库是如何工作的。 - 如何从我的聚类变量中获取 PointerHierarchyRepresentationResult? - 我是否只需将我的设置从 gui 转换为 ElkiBuilder 即可执行相同的任务(导入 distanceMatrix、运行 Anderberg、提取集群并绘制树状图)?如果是,你能告诉我怎么做,或者我在哪里可以找到关于如何做的信息? - 是否可以将 ID 添加到树状图的叶子中?非常感谢您的帮助!
  • 从主要算法中获取,而不是从“cut”提取算法中获取。但是,如果您需要两者,它可能会将指针结果作为子结果附加。我不认为当前的可视化工具可以为树状图添加标签,因为这不是非常可扩展的,而且我们对更大的数据更感兴趣,因为你无论如何都无法读取它们。但对于小型数据集,这将是一个不错的功能。在许多情况下,使用脚本从命令行运行 ELKI 会更容易,例如用-resulthandler ExportVisualizations 比从Java“驱动”一系列实验。
  • (很大程度上是因为脚本编写比 Java 更容易处理这些事情,而且使用 java -jar elki.jar cli -dbc.in file -algorithm alg ... 可以从命令行脚本、Makefile 等很好地运行 ELKI)
猜你喜欢
  • 2013-05-02
  • 2014-02-13
  • 2011-07-02
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 2013-08-04
相关资源
最近更新 更多