import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import DBSCAN from sklearn.datasets import make_blobs from .plot_helpers import discrete_scatter, cm3 def plot_dbscan(): X, y = make_blobs(random_state=0, n_samples=12) dbscan = DBSCAN() clusters = dbscan.fit_predict(X) clusters fig, axes = plt.subplots(3, 4, figsize=(11, 8), subplot_kw={'xticks': (), 'yticks': ()}) # Plot clusters as red, green and blue, and outliers (-1) as white colors = [cm3(1), cm3(0), cm3(2)] markers = ['o', '^', 'v'] # iterate over settings of min_samples and eps for i, min_samples in enumerate([2, 3, 5]): for j, eps in enumerate([1, 1.5, 2, 3]): # instantiate DBSCAN with a particular setting dbscan = DBSCAN(min_samples=min_samples, eps=eps) # get cluster assignments clusters = dbscan.fit_predict(X) print("min_samples: %d eps: %f cluster: %s" % (min_samples, eps, clusters)) if np.any(clusters == -1): c = ['w'] + colors m = ['o'] + markers else: c = colors m = markers discrete_scatter(X[:, 0], X[:, 1], clusters, ax=axes[i, j], c=c, s=8, markers=m) inds = dbscan.core_sample_indices_ # vizualize core samples and clusters. if len(inds): discrete_scatter(X[inds, 0], X[inds, 1], clusters[inds], ax=axes[i, j], s=15, c=colors, markers=markers) axes[i, j].set_title("min_samples: %d eps: %.1f" % (min_samples, eps)) fig.tight_layout()