私はここ数日、最適な密度クラスタリング ツールを探しながら 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 を介して渡すと同じ結果が得られることを確認できます。