使用 Elki 创建树状图

Create Dendrogram with Elki

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

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

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

因此我的问题:

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

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;
}

AGNES class (相反,我建议使用 AnderbergHierarchicalClustering 代替,它更快但给出完全相同的结果) returns 标准中的聚类形式称为 "pointer hierarchy" (PointerHierarchyRepresentationResult)。 i 和 j 在高度 h 处的合并表示为从 i 到 j 的指针,高度为 h。之后,j 表示合并后的集群。这种基本形式是由 Sibson 等人介绍的。 1973 年使用 SLINK 算法。

特别是它包含 y 信息 (getParentDistanceStore)、合并(由 getParentStore 给出),并且它可以计算排列可视化点的顺序 getPositions.

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