2016-11-02 17 views
0

이미 클러스터를 계산했으며이 클러스터링에 대한 평가를 수행하기 위해 ELKI 라이브러리 만 사용하려고합니다.Java에서 ELKI를 사용하여 사전 계산 된 클러스터링

그래서 나는이 양식에 데이터가 :

  1. 2 데이터베이스를 작성하십시오 결과 레이블 및 참조 레이블 :

    double [][] data; 
    String [] reference_labels, result_labels; 
    
    DatabaseConnection dbc1 = new ArrayAdapterDatabaseConnection(data, result_labels); 
    Database db1 = new StaticArrayDatabase(dbc1, null); 
    
    DatabaseConnection dbc2 = new ArrayAdapterDatabaseConnection(data, reference_labels); 
    Database db2 = new StaticArrayDatabase(dbc2, null); 
    
  2. 을에

    0.234 0.923 cluster_1 true_cluster1 
    0.543 0.874 cluster_2 true_cluster3 
    ... 
    

    내가 시도 각 데이터베이스에 대해 ByLabel 클러스터링 수행 :

    조치를 clusterings을 비교하고 얻기를위한
    Clustering<Model> clustering1 = new ByLabelClustering().run(db1); 
    Clustering<Model> clustering2 = new ByLabelClustering().run(db2); 
    
  3. 사용 ClusterContingencyTable을 :

    ClusterContingencyTable ct = new ClusterContingencyTable(true, false); 
    ct.process(clustering1, clustering2); 
    PairCounting paircount = ct.getPaircount(); 
    

문제는 measuers 계산되지 않은 것입니다.
ContingencyTable 및 PairCounting의 소스 코드를 살펴 보았는데 클러스터링이 다른 데이터베이스에서 왔고 데이터베이스가 레이블 관계를 1 개만 가질 수있는 경우 작동하지 않는 것으로 보입니다.
ELKI에서이를 수행 할 수있는 방법이 있습니까?

답변

1

클래스 ByLabelClustering 클래스를 쉽게 수정하거나 직접 구현하여 첫 번째 레이블 만 사용하거나 두 번째 레이블 만 사용할 수 있습니다. 하나의 데이터베이스 만 사용할 수 있습니다.

가 아니면 3 매개 변수 생성자를 사용

DatabaseConnection dbc1 = new ArrayAdapterDatabaseConnection(data, result_labels, 0); 
Database db1 = new StaticArrayDatabase(dbc1, null); 

DatabaseConnection dbc2 = new ArrayAdapterDatabaseConnection(data, reference_labels, 0); 
Database db2 = new StaticArrayDatabase(dbc2, null); 

생체 인식 신분증 명 시스템이 동일한 지 그래서. 그렇다면 ClusterContingencyTable가 작동합니다.

기본적으로 ELKI는 을 계속 사용합니다.은 개체를 열거하므로 첫 번째 데이터베이스의 ID는 1..n이고 두 번째 n + 1..2n입니다. 그러나 클러스터링을 비교하기 위해서는 서로 다른 집합이 아닌 동일한 객체가 포함되어야합니다.

+0

3 매개 변수 생성자를 사용하여 트릭을 수행했습니다. 답장을 보내 주셔서 감사합니다. –