2015-05-05 32 views
0

我试图从高维数据集中检测稠密子空间。为此,我想使用ELKI库。但是ELKI库的文档和例子很少。在ELKI中使用CLIQUE进行子空间聚类

我尝试了以下事项

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] 

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

请帮忙。提前致谢。

+0

“did not worked”不是很精确。发生了什么?你期望会发生什么?它在MiniGUI中工作吗?我主要使用MiniGUI。 –

+0

感谢您的回复,并对不准确的问题抱歉。我编辑了这个问题。 –

+0

我从来没有用CLIQUE得到过非常好的结果。我认为它只适用于合成数据。此外,它可能只适用于连续数据,高维数据和更大的数据集。如果我记得正确的话,它的确基于一些维度是均匀噪音的概念。但我不认为这是一种值得尝试的方法 - 它确实从来没有用于我的数据集。 –

回答

2

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

元素可以同时在0到多个簇中。如果你严格选择你的参数(并且CLIQUE参数似乎很难选择),你会得到奇怪的结果。就你而言,它似乎是11个簇,尽管你的数据集只有5个元素。

基本上什么聚类告诉你是:

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

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

元素[5]是簇

元素[3,1]簇(仅其中x = 8元件)(它们都具有Y = 2)

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

元素[5]是一个簇(仅与Y元素= 4)

在X,Y子空间,每个元素是独立的,和它自己的集群。

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

TAU = 0.1(5分中的10%):超过0.5分的任何东西都是一个集群......换句话说,就是一切。这就是为什么你会得到这个结果 - 你问的。