Praktikum 3
Pembuatan Dataset Sintetis
Untuk mempelajari DBSCAN, kita akan membuat dataset sederhana berupa 3 klaster buatan menggunakan fungsi make_blobs
dari Scikit-Learn.
from sklearn.datasets import
from sklearn.preprocessing import
centers = [[1, 1], [-1, -1], [1, -1]]
X, labels_true = (
n_samples=750, centers=centers, cluster_std=0.4, random_state=0
)
X = ().fit_transform(X)
Visualisasikan data yang dihasilkan dengan cara ini:
import matplotlib.pyplot as plt
(X[:, 0], X[:, 1])
()

Compute DBSCAN
Sekarang kita terapkan DBSCAN pada data tersebut.
Label yang ditetapkan oleh DBSCAN
dapat diakses melalui atribut labels_
. Titik data yang dianggap noise akan diberi label khusus.
import numpy as np
from sklearn import metrics
from sklearn.cluster import
db = (eps=0.3, min_samples=10).fit(X)
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)
print("Estimated number of clusters: %d" % n_clusters_)
print("Estimated number of noise points: %d" % n_noise_)
eps=0.3
→ jarak maksimum antar titik untuk dianggap tetangga.
min_samples=10
→ jumlah minimum titik dalam radiuseps
agar dianggap area padat (core sample).Label hasil klasterisasi tersedia di
labels
. Nilai-1
berarti titik tersebut dianggap noise atau outlier.
Estimated number of clusters: 3
Estimated number of noise points: 18
Evaluasi Kualitas Klasterisasi
Karena kita menggunakan dataset sintetis (make_blobs
), kita tahu label aslinya (labels_true
). Ini memungkinkan kita mengukur kualitas DBSCAN dengan berbagai metrik evaluasi.
print(f"Homogeneity: {(labels_true, labels):.3f}")
print(f"Completeness: {(labels_true, labels):.3f}")
print(f"V-measure: {(labels_true, labels):.3f}")
print(f"Adjusted Rand Index: {(labels_true, labels):.3f}")
print(
"Adjusted Mutual Information:"
f" {(labels_true, labels):.3f}"
)
print(f"Silhouette Coefficient: {(X, labels):.3f}")
Homogeneity: 0.953
Completeness: 0.883
V-measure: 0.917
Adjusted Rand Index: 0.952
Adjusted Mutual Information: 0.916
Silhouette Coefficient: 0.626
Homogeneity → apakah tiap klaster hanya berisi satu label asli.
Completeness → apakah semua sampel dengan label asli yang sama masuk ke klaster yang sama.
V-measure → rata-rata harmonik dari homogeneity dan completeness.
Adjusted Rand Index (ARI) → kesesuaian antara klasterisasi dengan label asli.
Adjusted Mutual Information (AMI) → kesamaan informasi antara klasterisasi dengan label asli.
Silhouette Coefficient → seberapa baik data dikelompokkan (nilai mendekati 1 berarti bagus, mendekati 0 berarti berada di batas, negatif berarti salah klaster).
Visualisasi Hasil Klasterisasi
Kita akan memvisualisasikan hasil DBSCAN.
Core sample ditampilkan dengan titik besar.
Non-core sample ditampilkan dengan titik kecil.
Noise ditampilkan dengan warna hitam.
unique_labels = set(labels)
core_samples_mask = (labels, dtype=bool)
core_samples_mask[db.core_sample_indices_] = True
colors = [plt.cm.Spectral(each) for each in (0, 1, len(unique_labels))]
for k, col in zip(unique_labels, colors):
if k == -1:
# Black used for noise.
col = [0, 0, 0, 1]
class_member_mask = labels == k
xy = X[class_member_mask & core_samples_mask]
(
xy[:, 0],
xy[:, 1],
"o",
markerfacecolor=tuple(col),
markeredgecolor="k",
markersize=14,
)
xy = X[class_member_mask & ~core_samples_mask]
(
xy[:, 0],
xy[:, 1],
"o",
markerfacecolor=tuple(col),
markeredgecolor="k",
markersize=6,
)
(f"Estimated number of clusters: {n_clusters_}")
()

👉 Interpretasi visual:
Titik besar berwarna → core samples dalam klaster.
Titik kecil berwarna → non-core samples, tetap termasuk klaster.
Titik hitam → noise/outlier.
Last updated