You are asking two questions: the first is which is a good density-based cluster method. Another is how to set the number of clusters. The typical density-based approach for clustering requires that you set. I will focus the first part of my answer on this algorithm. It has two parameters: eps and minPts. Once you set these parameters, it automatically sets the number of clusters for you.
My first advice is: Use your domain knowledge to set the parameters. Epsilon is a radius. Face it as a minimum cluster size. minPts is a number minimum of points to form a cluster....again, this is a threshold that you have to set by yourself...based on your own needs.
There are some novel methods to set up this parameters automatically...but I think it would be harder for you to understand them instead of just trying to give your input to the method....even so, I leave the reference:
Karami, Amin, and Ronnie Johansson. "Choosing dbscan parameters automatically using differential evolution." International Journal of Computer Applications 91.7 (2014): 1-11.
More important than these parameters...is the distance function that you use for your samples. Choose it carefully...and normalize the values :)
if you just want to perform some automatic clustering method, use for instance the E-M algorithm with the BIC for choosing the best number of clusters from a range of a possibilities (given by you). This a very lazy option which may not provide yu the kind of answer that you are looking for. Even so, you can check it out a very nice implementation of this into the R library [mclust]. I do hope that this helped you.
You are asking two questions: the first is which is a good density-based cluster method. Another is how to set the number of clusters. The typical density-based approach for clustering requires that you set. I will focus the first part of my answer on this algorithm. It has two parameters: eps and minPts. Once you set these parameters, it automatically sets the number of clusters for you.
My first advice is: Use your domain knowledge to set the parameters. Epsilon is a radius. Face it as a minimum cluster size. minPts is a number minimum of points to form a cluster....again, this is a threshold that you have to set by yourself...based on your own needs.
There are some novel methods to set up this parameters automatically...but I think it would be harder for you to understand them instead of just trying to give your input to the method....even so, I leave the reference:
Karami, Amin, and Ronnie Johansson. "Choosing dbscan parameters automatically using differential evolution." International Journal of Computer Applications 91.7 (2014): 1-11.
More important than these parameters...is the distance function that you use for your samples. Choose it carefully...and normalize the values :)
if you just want to perform some automatic clustering method, use for instance the E-M algorithm with the BIC for choosing the best number of clusters from a range of a possibilities (given by you). This a very lazy option which may not provide yu the kind of answer that you are looking for. Even so, you can check it out a very nice implementation of this into the R library [mclust]. I do hope that this helped you.
You may like to read about "Subtractive clustering". It is used when we don't have a clear idea how many clusters there should be for a given set of data. Subtractive clustering, is a fast, one-pass algorithm for estimating the number of clusters and the cluster centres in a set of data. You may like to read the paper attached.
Regarding your question, I would suggest a density based method.
Normally, in density based methods, you do not set a number of clusters, but you configure a threshold density and a minimal number of neighbors.
DBScan works fine to detect clusters with similar density. However, if you want to detect clusters based on the local/neighboring density I suggest Optics or any further improved algorithmn of the Optics family..
I think that a non-supervised method would be perfect for you. In particular, a Kohonen’s maps or self-organizing maps or similar neural networks could be the most suitable tool for your problem.
Please take a look to at the wide range of publications and resources that there are in print and online in this regard, for instance: "Journal of Agricultural and Food Chemistry 2009, 57, 2763", "Journal of Food Engineering 2013 118 400" or "International Journal of Food Science and Technology 2013 48 2528".
DbScan is a good choice but this method has troubles when clusters vary in density. It is also not suitable for high dimensional data even because it becomes quite expensive due to calculation of all pairwise proximities. In this case is maybe better to look in fuzzy methods with proper validity measure.
As has been rightly pointed out, Dbscan is not effective if there are clusters of different densities. OPTICS overcomes this weakness. My experience is that determining two parameters is tricky and may consume time. If you have a fair idea of the parameters then this could solve the problem.
Otherwise grid based clustering algorithm offer an alternative. If you know the bounds of the data space, then grid based algorithms localize each point in a conceptual grid of desired granularity. Then based on the density of points in data space the clusters are returned to the user.
Determining granularity of the grid is not difficult. Make a histogram for each dimension (use R or MATLAB) and use your judgement. You may look at our recent work http://dl.acm.org/citation.cfm?id=2668436
This is a single scan algorithm and has complexity O(n2). Does not require number of clusters.
You can use my own method. k-means clustering with shifting. But here number of clusters is to be provided externally. Find the paper, " A linear time complexity k-means algorithm using cluster shifting". It will be executed in O(n) time whatever may be the data set size.