我想绘制一个聚类结果的树状图。现在,我正在使用Elki0.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;
}发布于 2019-08-22 09:01:10
AGNES类(相反,我建议使用AnderbergHierarchicalClustering,它要快得多,但给出完全相同的结果)以一个名为“指针层次结构”(PointerHierarchyRepresentationResult)的标准形式返回集群。高度h处的i和j的合并表示为从i到j的指针,其中h是高度。之后,j表示合并的集群。这种基本形式是由Sibson等人介绍的。1973年的SLINK算法。
特别是,它包含y信息(getParentDistanceStore),即合并(由getParentStore提供),它可以计算出排列点的顺序,以便进行可视化getPositions。
您可能想看看DendrogramVisualization的代码,它负责在GUI中创建SVG树状图。
https://stackoverflow.com/questions/57592693
复制相似问题