0

私はここ数日、最適な密度クラスタリング ツールを探しながら ELKI を探し続け、試してみることにしました。DBSCANの場合、ファイル「3clusters-and-noise-2d.csv」をクラスター化するテストを正常に再現し、各クラスターのクラスターメタデータとポイントをすべてgithub(最新バージョン)のELKIコードを介して出力することもできましたIN java (私は cli または ui ツールにはあま​​り興味がありません)。

ここで、書き込みと読み取りのオーバーヘッドを削減するために、ファイルを介してインポートする代わりに、ある種の内部 Java 構造を使用してデータベースを作成したいと考えています。

提供されたでは、これを行うことができますが、ファイルの最初の列に対してのみです。

私の質問は基本的に、同じデータがJavaに既に存在する場合に、ファイルを介して作成された同じデータベースを作成する方法ですか?

とった!

したがって、いくつかの調整の後、基本的に行うことは、各行がポイントを表し、次元と同じ数の列を持つ double の 2 次元配列を使用することです...ファイルを読み取らずにデータベースを作成するには、基本的に次のように ArrayAdapterDatabaseConnection を使用します。

    double[][] data = new double[NUM_OF_POINTS][NUM_OF_DIMENSIONS]; 
    //populate data according to your app
    DatabaseConnection dbc = new ArrayAdapterDatabaseConnection(data);
    Database db = new StaticArrayDatabase(dbc, null);
    db.initialize();

    //dbscan algorithm setup
    params = new ListParameterization();
    params.addParameter(DBSCAN.Parameterizer.EPSILON_ID, 0.04);
    params.addParameter(DBSCAN.Parameterizer.MINPTS_ID, 20);
    DBSCAN<DoubleVector> dbscan = ClassGenericsUtil.parameterizeOrAbort(DBSCAN.class, params);

    //run DBSCAN on database
    Clustering<Model> result = dbscan.run(db);

これを「3clusters-and-noise-2d.csv」データセットでテストしましたが、ファイルまたは arrayadapter を介して渡すと同じ結果が得られることを確認できます。

4

1 に答える 1

0

完全な例は、ELKI ソースにあります。

http://elki.dbs.ifi.lmu.de/browser/elki/elki/src/main/java/tutorial/javaapi/PassingDataToELKI.java

ランダムなデータを生成し、k-means を実行します。DBIDsまた、データ ポイントに確実にマッピングする方法も示します。

于 2015-07-24T07:54:34.713 に答える