使用 Elki 创建树状图
Create Dendrogram with Elki
我想为聚类结果绘制树状图。现在我正在使用 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;
}
AGNES
class (相反,我建议使用 AnderbergHierarchicalClustering
代替,它更快但给出完全相同的结果) returns 标准中的聚类形式称为 "pointer hierarchy" (PointerHierarchyRepresentationResult
)。 i 和 j 在高度 h 处的合并表示为从 i 到 j 的指针,高度为 h。之后,j 表示合并后的集群。这种基本形式是由 Sibson 等人介绍的。 1973 年使用 SLINK 算法。
特别是它包含 y
信息 (getParentDistanceStore
)、合并(由 getParentStore
给出),并且它可以计算排列可视化点的顺序 getPositions
.
您可能想看看 DendrogramVisualization
的代码,它负责在 GUI 中创建 SVG 树状图。
我想为聚类结果绘制树状图。现在我正在使用 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;
}
AGNES
class (相反,我建议使用 AnderbergHierarchicalClustering
代替,它更快但给出完全相同的结果) returns 标准中的聚类形式称为 "pointer hierarchy" (PointerHierarchyRepresentationResult
)。 i 和 j 在高度 h 处的合并表示为从 i 到 j 的指针,高度为 h。之后,j 表示合并后的集群。这种基本形式是由 Sibson 等人介绍的。 1973 年使用 SLINK 算法。
特别是它包含 y
信息 (getParentDistanceStore
)、合并(由 getParentStore
给出),并且它可以计算排列可视化点的顺序 getPositions
.
您可能想看看 DendrogramVisualization
的代码,它负责在 GUI 中创建 SVG 树状图。