我想在星火上做一些DBSCAN。我目前发现了两个实现:
我已经测试了第一个在其github中给出的sbt配置,但是:
代码:
val model = DBSCAN.fit(eps, minPoints, values, parallelism)
有人设法对第一个图书馆做了些什么吗?
有人测试过第二个吗?
发布于 2017-05-04 15:13:47
请试试埃尔基。因为这是Java,所以应该很容易从Scala调用。
ELKI进行了很好的优化,通过索引,它将扩展到相当大的数据集。
我们试图在我们的基准测试研究中包括其中一个星火实现--但是它内存不足(而且它是唯一一个内存不足的实现……星火和马乌特的k-手段也是最慢的):
汉斯-彼得·克里格尔,埃里希·舒伯特和亚瑟·齐梅克。 运行时评估的(黑色)艺术:我们是比较算法还是实现? 知识和信息系统(知识和信息系统)。2016年,1-38
Neukirchen教授在本技术报告中对DBSCAN的并行实现进行了基准测试:
赫尔穆特·纽基兴 大数据和高性能计算范式DBSCAN空间聚类实现的调查与性能评估
显然,他让一些星火的实现工作起来了,但注意到:
其结果是毁灭性的: Apache的实现没有一个接近HPC实现。特别是在较大(但仍相当小)的数据集上,大多数数据集完全失败,甚至没有提供正确的结果--。
在此之前:
当我们在使用集群的所有可用内核的同时运行任何"Spark“实现时,我们经历了内存不足的异常。
(另外,"Spark“在928个核上花费了2406秒,ELKI在一个核上为较小的基准值花费了997秒-另一个Spark实现也不太好,特别是它没有返回正确的结果.)
“星火上的DBSCAN”没有崩溃,而是返回了完全错误的集群。 虽然“星火上的DBSCAN”完成得更快,但它提供了完全错误的集群结果。由于DBSCAN实现的DBSCAN实现的运行次数已经达到了最大的核心数,因此我们没有使用较低数量的内核执行测量。
您可以将double[][]
数组包装为ELKI数据库:
// Adapter to load data from an existing array.
DatabaseConnection dbc = new ArrayAdapterDatabaseConnection(data);
// Create a database (which may contain multiple relations!)
Database db = new StaticArrayDatabase(dbc, null);
// Load the data into the database (do NOT forget to initialize...)
db.initialize();
// Squared Euclidean is faster than Euclidean.
Clustering<Model> c = new DBSCAN<NumberVector>(
SquaredEuclideanDistanceFunction.STATIC, eps*eps, minpts).run(db);
for(Cluster<KMeansModel> clu : c.getAllClusters()) {
// Process clusters
}
还请参阅:Java示例 (特别是如何将DBID映射回行索引)。为了获得更好的性能,将索引工厂(如new CoverTree.Factory(...)
)作为第二个参数传递给StaticArrayDatabase
构造函数。
发布于 2018-03-09 07:34:41
我成功地在我的project.Actually中使用了第二个库(project.Actually),我不能按如下方式使用它:
libraryDependencies += "org.alitouka" % "spark_dbscan_2.10" % "0.0.4"
resolvers += "Aliaksei Litouka's repository" at "http://alitouka-public.s3-website-us-east-1.amazonaws.com/"
相反,我下载代码并更新它以激发2.2.1 version.Besides,其中一些库应该是added.Finally,将代码添加到我的项目中,它可以工作!
发布于 2018-02-09 08:59:19
我测试了https://github.com/irvingc/dbscan-on-spark,可以说它消耗了大量的内存。对于分布平滑的400 K数据集,我使用了-Xmx12084m,即使在这种情况下,它的工作时间也太长(>20分钟)。另外,它只是二维的。我用的是maven,而不是sbt。
我还测试了第二个实现。这仍然是我发现的最好的。遗憾的是,提交人自2015年以来不再支持这一观点。它真的花了一些时间来提高版本的火花和解决版本冲突。我需要它部署到aws上。
https://stackoverflow.com/questions/36090906
复制相似问题