2016-11-02 6 views
0

すでにクラスタを計算していて、ELKIライブラリのみを使用してこのクラスタリングの評価を実行したいとします。JavaでのELKIを使用した事前計算クラスタリングの評価

だから私は、この形式のデータを持っている:

0.234 0.923 cluster_1 true_cluster1 
0.543 0.874 cluster_2 true_cluster3 
... 

私がしようとした:結果のラベルを持つと参照ラベルを持つ:

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); 
    1. は、2つのデータベースを作成します。各データベースのByLabelクラスタリングを実行します。

      の措置をクラスタリングを比較し、取得するための
      Clustering<Model> clustering1 = new ByLabelClustering().run(db1); 
      Clustering<Model> clustering2 = new ByLabelClustering().run(db2); 
      
    2. 使用ClusterContingencyTableを:

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

    問題はmeasuersが計算されていないということです。
    ContingencyTableとPairCountingのソースコードを調べました。クラスタリングが異なるデータベースから来ていて、データベースのラベル関係が1つしかない場合は動作しないようです。
    ELKIでこれを行う方法はありますか?

  • 答えて

    1

    ByLabelClusteringクラスを簡単に修正(または独自に実装)して、最初のラベルのみを使用するか、2番目のラベルのみを使用することができます。 1つのデータベースしか使用できません。

    それとも、3パラメータのコンストラクタを使用します。DBIDをが同じになるように

    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になり、2番目のn + 1..2nになります。しかし、クラスタリングを比較するには、同じオブジェクトを含む必要があります。

    +0

    3パラメータのコンストラクタを使用して、トリックを行いました。返信ありがとうございます。 –

    関連する問題