1

私はここでELKIに新しいです。SLINKを自分のデータで実行しようとしています - ELKI

  1. 私は特定の距離測定のためのガウアーでSLINKを実行する必要が{int xpto; String customer; int another, ...}

  2. のような数値とカテゴリ変数を持つインスタンスMyInstanceのリストを持っている:ここで私が何をしようとしています何を行きますカスタムのこのリスト全体のためのケースは、私は次のようでしたチュートリアルと記事を読んだ後

オブジェクト:

独自のカスタムオブジェクト
  • 私が作成した -
    1. 私はインスタンスのそれぞれが1つのオブジェクトのみを持っているのに、私はFeatureVectorを実装して独自のカスタムデータ型を作成したDB
    2. にデータをロードするためにデータベース接続を作成しますSimpleTypeInformation(MyDataType.class)

    私が持っている問題は、私はそれが関係

    を得ることに私にnullポインタ例外を与えるアルゴリズムを実行しようとすると、 de.lmu.ifi.dbs.elkiでde.lmu.ifi.dbs.elki.database.AbstractDatabase.getRelation(AbstractDatabase.java:118) におけるスレッド "メイン" のjava.lang.NullPointerExceptionにおける

    例外。 main.TestingELKI.main(TestingELKI.java:104)でalgorithm.AbstractAlgorithm.run(AbstractAlgorithm.java:81) は

    あなたはここで助けてくださいことはできますか?私は本当に今デシベル関係に

    public class MyDatabaseConnection implements DatabaseConnection { 
    
        private List<MyInstance> m_data; 
        private int m_size; 
    
        public MyDatabaseConnection(ArrayList<MyInstance> data, int size) { 
         m_data = data; 
         m_size = size; 
        } 
    
        @Override 
        public MultipleObjectsBundle loadData() { 
         MultipleObjectsBundle b = new MultipleObjectsBundle(); 
         int mind = 1; 
         int maxd = 1; 
         List<MyDataType> vecs = new ArrayList<>(m_size); 
         for(int i = 0; i < m_size; i++) { 
          vecs.add(new MyDataType(m_data.get(i))); 
         } 
         SimpleTypeInformation<MyDataType> type = new SimpleTypeInformation(MyDataType.class); 
         b.appendColumn(type, vecs); 
         return b; 
        } 
    } 
    
    public class MyDataType implements FeatureVector { 
    
        MyInstance m_instance; 
    
        public static final MyDataType.Factory FACTORY = new MyDataType.Factory(); 
    
        public MyDataType(MyInstance instance) { 
         m_instance = instance; 
        } 
    
        @Override 
        public int getDimensionality() { 
         // TODO Auto-generated method stub 
         return 1; 
        } 
    
        @Override 
        public Object getValue(int arg0) { 
         // TODO Auto-generated method stub 
         if (arg0 == 1) { 
          return m_instance; 
         } else { 
          System.out.println("OOOOPPPPPPPSSSSS!"); 
          return null; 
         } 
        } 
    
    
        public static class Factory implements FeatureVector.Factory { 
    
         @Override 
         public ByteBufferSerializer getDefaultSerializer() { 
          // TODO Auto-generated method stub 
          return null; 
         } 
    
         @Override 
         public Class getRestrictionClass() { 
          // TODO Auto-generated method stub 
          return MyDataType.class; 
         } 
    
         @Override 
         public FeatureVector newFeatureVector(Object arg0, ArrayAdapter arg1) { 
          // TODO Auto-generated method stub 
          return new MyDataType(new MyInstance("0","0")); 
         } 
        } 
    } 
    
    MAIN 
    // create my database connection 
         // load data into database 
         DatabaseConnection dbc = new MyDatabaseConnection(data, size); 
         Database db = new StaticArrayDatabase(dbc, null); 
         db.initialize(); 
    
         Relation<FeatureVector> labels = db.getRelation(TypeUtil.ANY); 
    
         // now set the right distance function 
         MyDistance dist = new MyDistance(); 
         SLINK algorithm = new SLINK(dist); 
    
         Result res = algorithm.run(db); 
    
  • +0

    MyDataType-> MyInstanceはハックのようです。 MyInstanceで直接作業することはできませんか?また、あなたの距離関数はここにはありません - 多分あなたのエラーはそこにありますか? –

    +0

    あなたの迅速な答えに感謝します。私はちょうどあなたがここで参照したことをしました:a)MyInstanceのみを使用するようにハッキングを変更しましたb)MyInstanceクラスのみを使用するように距離関数を再構築しました...距離関数でgetInputTypeRestrictionが新しいSimpleTypeInformation(MyInstance 。クラス);本当に助けに感謝します。大きな感謝 –

    答えて

    1

    を得ることと間違って何あなたはFeatureVectorから継承する必要はありませんありません。ボクシングオブジェクトを避ける - これは高価です - ちょうどMyInstanceを使用してください。

    表示されているエラーは、距離関数を正しく実装していない可能性が高いためです。

    ほとんどの場合、距離関数は正しい入力タイプ情報を指定していませんか?入力タイプnullを入力すると、NullPointerExceptionが表示されます。

    +0

    あなたの迅速な答えに感謝します。私はちょうどあなたがここで参照したことをしました:a)MyInstanceのみを使用するようにハッキングを変更しましたb)MyInstanceクラスのみを使用するように距離関数を再構築しました...距離関数でgetInputTypeRestrictionが新しいSimpleTypeInformation(MyInstance 。クラス);本当に助けに感謝します。大きな感謝 –

    +0

    @j_looking_answersうまくいけば、彼の答えを受け入れるべきです。 –

    関連する問題