如何使用ELKI

时间:2015-07-23 15:31:53

标签: java cluster-analysis elki

在搜索最合适的密度聚类工具并决定试用它的这几天,我一直在为ELKI喋喋不休。对于DBSCAN,我成功地重现了将文件“3clusters-and-noise-2d.csv”聚类的测试,并且还设法通过来自github的ELKI代码(最新版本)打印每个集群中的集群元数据和点在java中(我对cli或ui工具并不感兴趣)。

现在,我想使用某种内部java结构来创建数据库,而不是通过文件导入来减少写入和读取开销。

在提供的example中,我可以执行此操作但仅适用于文件的第一列。

我的问题基本上是,当java中已存在相同的数据时,如何创建通过文件创建的同一数据库?

知道了!

所以在经过一些调整之后,基本上你要做的就是使用2d数组的双精度数,其中每一行代表一个点,你的列数与你的维度一样......创建你的数据库而不读取文件,你基本上使用了一个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”数据集对此进行了测试,并且当我通过file或arrayadapter传递它们时,我可以确认得到相同的结果。

1 个答案:

答案 0 :(得分:0)

可以在ELKI来源中找到完整的示例:

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

它生成随机数据并在其上运行k-means。它还显示了如何可靠地将DBIDs映射回您的数据点。