如何在 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 中使用现有数据的主要内容,如果未能解决你的问题,请参考以下文章