ELKI 라이브러리를 사용하여 DBSCAN 클러스터링 테스트 응용 프로그램을 구현하려고합니다. 내 데이터 세트는 6 차원이며 약 100.000 개의 개체로 구성됩니다.ELKI DBSCAN with R * -Tree
내 코드에서 R * -Tree ELKI 최적화를 사용하려고했지만 코드를 벤치마킹하면 여전히 O (n^2)와 함께 사용되는 것처럼 보입니다.
이
내가 내 응용 프로그램 내에서 사용하는 코드입니다 :ListParameterization dbscanParams = new ListParameterization();
dbscanParams.addParameter(DBSCAN.Parameterizer.EPSILON_ID, eps);
dbscanParams.addParameter(DBSCAN.Parameterizer.MINPTS_ID, minPts);
dbscanParams.addParameter(DBSCAN.DISTANCE_FUNCTION_ID, EuclideanDistanceFunction.class);
DBSCAN<DoubleVector, DoubleDistance> dbscan = ClassGenericsUtil.parameterizeOrAbort(DBSCAN.class, dbscanParams);
ArrayAdapterDatabaseConnection arrayAdapterDatabaseConnection = new ArrayAdapterDatabaseConnection(featuresMatrix, featuresLabels);
ListParameterization dbparams = new ListParameterization();
dbparams.addParameter(AbstractDatabase.Parameterizer.INDEX_ID, RStarTreeFactory.class);
dbparams.addParameter(RStarTreeFactory.Parameterizer.BULK_SPLIT_ID, SortTileRecursiveBulkSplit.class);
dbparams.addParameter(AbstractDatabase.Parameterizer.DATABASE_CONNECTION_ID, arrayAdapterDatabaseConnection);
dbparams.addParameter(AbstractPageFileFactory.Parameterizer.PAGE_SIZE_ID, pageSize);
Database db = ClassGenericsUtil.parameterizeOrAbort(StaticArrayDatabase.class, dbparams);
db.initialize();
Clustering<Model> result = dbscan.run(db);
위의 코드를 실행하면 이러한 결과에 이르게 :
| NUM_OBJECTS | TIME(ms) |
|-------------|------------|
| 4444 | 1508 |
| 8887 | 5547 |
| 17768 | 23401 |
| 35536 | 103733 |
| 71040 | 426494 |
| 142080 | 1801652 |
시간은 일반 간단한에 System.currentTimeMillis를 사용하여 벤치마킹() dbscan.run (db) 주변. times 칼럼을 보면 트렌드가 nlog (n)과 같지 않고 n^2와 비슷하지만 R * -Tree 최적화로 ELKI DBSCAN을 사용하기 위해 누락 된 부분을 이해할 수 없다는 것을 알 수 있습니다.
도움이나 제안을 해주셔서 감사합니다.
답장을 보내 주셔서 감사합니다. 문제는 정확히 내가 작은 영역에서 응집 된 점들과 함께 데이터 집합을 가지고 있고 R-Tree 최적화 작업을하기에 너무 큰 eps의 값을 사용하고 있다는 것입니다. eps의 가치를 줄이면 R-Tree 최적화 작업이 시작되고 알고리즘이 훨씬 빨라졌습니다. 문제에 대한 명확한 설명에 감사드립니다. –