0

So I have been trying to apply the DBSCAN method to cluster my dataset, I want to get the silhouette_Score to compare with my other model, however, after I do the DBSCAN, it return the error:

ValueError: Number of labels is 1. Valid values are 2 to n_samples - 1 (inclusive)

Does anyone know what causes me this error?

My code:

epsilon = [1,1.25,1.5,1.75, 2,2.25,2.5,2.75, 3,3.25,3.5,3.75, 4]
min_samples = [58]


sil_avg = []
max_value = [0,0,0,0]

for i in range(len(epsilon)):
for j in range(len(min_samples)):

    db = DBSCAN(min_samples = min_samples[j], eps =epsilon[i]).fit(dff)
    #cluster_labels=dbscan.fit_predict(data) 
    core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
    core_samples_mask[db.core_sample_indices_] = True
    labels = db.labels_

    # Number of clusters in labels, ignoring noise if present.
    n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
    n_noise_ = list(labels).count(-1)


    silhouette_avg = metrics.silhouette_score(dff, labels)
    if silhouette_avg > max_value[3]:
        max_value=(epsilon[i], min_samples[j], n_clusters_, silhouette_avg)
    sil_avg.append(silhouette_avg)

print("epsilon=", max_value[0], 
  "\nmin_sample=", max_value[1],
  "\nnumber of clusters=", max_value[2],
  "\naverage silhouette score= %.4f" % max_value[3])

0 Answers0