I am using clustering for my data. Since the DBSCAN algorithm will also tell me an estimate of clusters that I can use, I have used DBSCAN. I have tried for the eps=[0.123,1,2] and min_smaples=[2,10,...60]. The print satatement in the below code prints 714 which is equal to the number of data-samples(rows). The code looks like:

dbscan = DBSCAN(eps=1, min_samples = 4)
clusters = dbscan.fit_predict(df)
plt.scatter(df.iloc[:, 0], df.iloc[:, 1], c=clusters, cmap="plasma")
plt.xlabel("Feature 0")
plt.ylabel("Feature 1")

Sample plots for some of the different min_samples is shown below:

EPS=1, MIN_SAMPLES=2 enter image description here enter image description here enter image description here

The parameters for the above plots are given below in the same pattern.


None of these plots are making sense to me from a clustering perspective. From this, I am forced to conclude that I cannot use clustering for the given data or I am doing it wrong. So, I need help with insights into the weird appearance of the above plots.

Any help is appreciated


Dont try to visually confirm it.

You are plotting your clustering resutls in ONLY two dimensions and you expect that all of the information is in these two dimesnions. That is very unlikely. If you plot 3 dimensions you will see even more seperability and it will make a bit more sense. In any case you need a metric for example Silhouette that tells you how well you clustered. Visualisation is just a sanity check if you know your features already.

  • 1
    $\begingroup$ The silhouette score was -0.19. I have used OPTICS also and there is no improvement. So, do I conclude that the data is so close that the model is not able to separate them? K-means also gave a score of 0.17. $\endgroup$
    – Eswar
    Dec 23 '19 at 13:16
  • $\begingroup$ Well at the moment, there is all sorts of pre-processing, agumentations and transformations that you can use $\endgroup$
    – Noah Weber
    Dec 23 '19 at 13:27
  • 1
    $\begingroup$ Silhouette does not work for non-convex clusters, and does not handle noise well, hence it is not a good measure to use with DBSCAN. $\endgroup$ Dec 24 '19 at 7:38
  • $\begingroup$ Can you send me a reference please regarding non-convex $\endgroup$
    – Noah Weber
    Dec 24 '19 at 8:05

Don't try to find parameters by brute force.

Instead, analyze your data. The choice of minpts is application driven - how noisy your data is, how many points you require for a point to be considered important. Based on this, you can choose epsilon based on the k-distance plot.

Try projecting your data into different views when you have multiple dimensions.

Also try different preprocessing. You seem to have scaled your data to 0:1, but is this the right scaling to capture similarity? If your distance does not capture similarity, then DBSCAN will not work because it relies on your distance function...


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.