在 ELKI 中使用 CLIQUE 进行子空间聚类

Subspace clustering using CLIQUE in ELKI

我正在尝试从高维数据集中检测密集子空间。为此,我想使用 ELKI 库。但是ELKI库的文档和例子很少

我尝试了以下-

    Database db=makeSimpleDatabase("D:/sample.csv", 600);

    ListParameterization params = new ListParameterization();
    params.addParameter(CLIQUE.TAU_ID, "0.1");
    params.addParameter(CLIQUE.XSI_ID, 20);

    // setup algorithm
    CLIQUE<DoubleVector> clique = ClassGenericsUtil.parameterizeOrAbort(CLIQUE.class, params);

    // run CLIQUE on database
    Clustering<SubspaceModel<DoubleVector>> result = clique.run(db);

    for(Cluster<?> cl : result.getToplevelClusters()) {
        System.out.println(cl.getIDs());
    }

我给出了以下输入-

2,2
2,3
5,2
5,3
8,4

结果是-

[2, 1]
[4, 3]
[5]
[3, 1]
[4, 2]
[5]
[1]
[2]
[3]
[4]
[5]

我希望输出作为分组到子空间的输入数据点。 可能是我选择了错误的值或以错误的方式设置了参数。

请帮忙。提前致谢。

请注意,CLIQUE 会生成 重叠 个集群。

元素可以同时在0到多个簇中。如果参数选择不当(CLIQUE 参数似乎真的很难选择),您会得到奇怪的结果。在你的例子中,它似乎是 11 个集群,尽管你的数据集只有 5 个元素。

本质上,聚类告诉您的是:

元素 [2,1] 簇(它们都有 x=2)

元素 [4,3] 簇(它们都有 x=5)

元素 [5] 是一个簇(只有 x=8 的元素)

元素 [3,1] 簇(它们都有 y=2)

元素 [4,2] 簇(它们都有 y=3)

元素 [5] 是一个簇(只有 y=4 的元素)

在 x,y 子空间中,每个元素都是独立的,并且有自己的簇。

为这个脆弱的算法选择更好的参数。

TAU = 0.1(5 分的 10%):任何超过 0.5 分的东西都是一个簇……换句话说,所有东西。这就是为什么你得到这个结果 - 你要求它。