如何在 ELKI 中使用现有数据

Posted

技术标签:

【中文标题】如何在 ELKI 中使用现有数据【英文标题】:How to use existing data in ELKI 【发布时间】:2015-10-14 00:36:51 【问题描述】:

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

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

在example 中,只要我能够做到这一点,但仅限于文件的第一列。

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

知道了!

所以经过一些调整后,基本上你所做的是使用二维数组,其中每行代表一个点,并且你的列数与你的维度一样多......要在不读取文件的情况下创建数据库,你基本上使用 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 传递它们时得到相同的结果。

【问题讨论】:

您到底尝试了什么?这对我来说很好。 从 .csv 导入数据时使用 dbscan 非常棒!但是我不想从文件中导入数据,而是假设相同的数据集已经在 java 中的某些数据结构中可用,我将如何通过数据库连接将它传递给 dbscan 算法? 分享你写的代码。 double[][]你是怎么炼成的? 【参考方案1】:

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

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

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

【讨论】:

以上是关于如何在 ELKI 中使用现有数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 ELKI 和 Mongodb

KMeans 在 ELKI 中的使用,综合示例

使用 ELKI 的距离函数

OPTICS 聚类算法的 ELKI 实现只检测到一个聚类

构建ELKI当前发展状态的推荐方式是啥?

如何使用 Python 在现有 AVRO 文件中追加数据