I am implementing a project that should cluster geographic points. The OPTICS algorithm seems to be a very good solution. As input, only 2 parameters are required (MinPts and Epsilon), which, respectively, represent the minimum number of points needed to be considered as a cluster, and the distance value used for comparison if two points are in the same cluster.
My problem is that due to the huge variety of points I canโt install a fixed epsilon. Just look at the image below.
The same structure of the dots, but on a different scale will result in very different ones. Suppose to set MinPts = 2 and epsilon = 1 km. On the left, the algorithm will create 2 clusters (red and blue), but on the right it will create one cluster containing all the points (red), but I would like to get 2 clusters even on the right.
So my question is: is there a way to dynamically calculate the epsilon value to get this result?
UPDATE June 5, 2012 15.15: I thought I was using an implementation of the OPTICS algorithm from the javaml library, but it seems that this is actually an implementation of the DBSCAN algorithm. So now the question is: does anyone know a Java-based OPTICS implementation of the algorithm?
Thank you very much and sorry for my bad english.
Marco
source share