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

时间:2015-05-05 19:04:42

标签: java cluster-analysis elki clique

我正在尝试从高维数据集中检测密集子空间。为此,我想使用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]

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

请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:2)

请注意,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分的东西都是一个集群......换句话说,就是一切。这就是为什么你得到这个结果 - 你要求它。