Hook — দোকানে ক্রেতার দল
একটি shopping mall এ ক্রেতারা আপনাআপনি কিছু group এ পড়ে — কেউ student, কেউ family, কেউ premium shopper। কেউ আগে থেকে label করে দেয়নি। এই “লুকানো group” বের করাই Clustering এর কাজ।
Concept — তিনটি প্রধান algorithm
- K-Means — পরিচিত K এর জন্য centroid-based।
- DBSCAN — density-based, K লাগে না, noise detect করে।
- Hierarchical (Agglomerative) — dendrogram, যেকোনো level এ cut।
Math — K-Means Objective
Alternating optimization: (১) প্রতি point কে nearest centroid এ assign, (২) প্রতি cluster এর centroid update। যতক্ষণ না convergence।
Elbow Method
K বাড়ালে inertia কমতে থাকে। যেখানে কমার হার হঠাৎ ধীর হয় — সেটাই সম্ভাব্য K।
Silhouette Score
Real-world Use
- Customer segmentation।
- Document/topic clustering।
- Image compression (color quantization)।
- Anomaly detection (DBSCAN)।
Code — তিনটি algorithm এক জায়গায়
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons, make_blobs
from sklearn.cluster import KMeans, DBSCAN, AgglomerativeClustering
from sklearn.preprocessing import StandardScaler
X, _ = make_moons(n_samples=400, noise=0.08, random_state=42)
X = StandardScaler().fit_transform(X)
algos = {
"K-Means (k=2)": KMeans(n_clusters=2, n_init=10, random_state=42),
"DBSCAN": DBSCAN(eps=0.25, min_samples=5),
"Agglomerative": AgglomerativeClustering(n_clusters=2, linkage="ward"),
}
fig, ax = plt.subplots(1, 3, figsize=(12, 4))
for i, (name, algo) in enumerate(algos.items()):
labels = algo.fit_predict(X)
ax[i].scatter(X[:, 0], X[:, 1], c=labels, cmap="viridis", s=10)
ax[i].set_title(name)
plt.show()Elbow + Silhouette
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from sklearn.datasets import make_blobs
X, _ = make_blobs(n_samples=500, centers=4, random_state=42)
for k in range(2, 9):
km = KMeans(n_clusters=k, n_init=10, random_state=42).fit(X)
print(f"k={k} inertia={km.inertia_:.1f} silhouette={silhouette_score(X, km.labels_):.3f}")Common Mistakes
Scaling ছাড়া clustering — বড় scale এর feature dominate করে cluster বানিয়ে দেয়।
- K এর জন্য random guess — Elbow/Silhouette দেখো।
- Non-spherical data এ K-Means চাপানো — DBSCAN চেষ্টা করো।
- DBSCAN এ eps tune না করা — সব noise হয়ে যেতে পারে।
- Cluster কে label এর মত interpret করা — মানে domain knowledge দিয়ে দিতে হয়।
Practice Tasks
- Task 1: make_moons এ K-Means vs DBSCAN visually তুলনা।
- Task 2: Mall customer dataset এ ৫ cluster বের করো ও describe।
- Task 3: Hierarchical এর dendrogram (scipy) plot করো।
Mini Project — Image Color Compression
একটি image এর সব pixel কে RGB vector হিসাবে নিয়ে K-Means (k=16) চালাও। প্রতিটি pixel কে তার nearest centroid দিয়ে replace করে compressed image বানাও। Original vs compressed তুলনা করো।
Summary
Clustering = label ছাড়া group খুঁজে বের করা। K-Means দ্রুত, DBSCAN noise-aware, Hierarchical interpretable।