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])