Clustering হলো Machine Learning এর একটি Unsupervised Learning পদ্ধতি যেখানে আমরা data points গুলোকে তাদের similarity এর ভিত্তিতে বিভিন্ন groups বা clusters এ ভাগ করি।
Clustering ব্যবহার করা হয় যখন:
- ✅ Target Variable নেই - Dataset এ কোনো label বা output column থাকে না
- ✅ Pattern খুঁজতে হয় - Data এর মধ্যে hidden structure বা grouping আছে কিনা জানতে
- ✅ Exploratory Analysis - Data সম্পর্কে insight পেতে চাই কিন্তু কি খুঁজবো জানি না
Example Use Cases:
- 🛒 Customer Segmentation - গ্রাহকদের আচরণ অনুযায়ী group করা
- 📰 Document Clustering - Similar topics এর articles group করা
- 🧬 Gene Analysis - Similar genetic patterns identify করা
- 🖼️ Image Compression - Similar colors group করা
K-Means algorithm এর মূল উদ্দেশ্য:
Data points গুলোকে 'k' সংখ্যক clusters এ এমনভাবে ভাগ করা যাতে একই cluster এর points একে অপরের কাছাকাছি থাকে এবং ভিন্ন cluster এর points যতটা সম্ভব দূরে থাকে।
Mathematical Goal:
- প্রতিটা cluster এর একটা centroid (কেন্দ্র বিন্দু) থাকে
- K-Means চেষ্টা করে প্রতিটা point কে তার nearest centroid এ assign করতে
- Goal হলো intra-cluster distance minimize করা (cluster এর ভেতরের distance কমানো)
| Aspect | Supervised Learning | Unsupervised Learning (Clustering) |
|---|---|---|
| Labels | আছে (Target variable) | নেই |
| Goal | Predict করা | Pattern খুঁজে বের করা |
| Examples | Classification, Regression | Clustering, Dimensionality Reduction |
| Output | Known categories | Discovered groups |
Clustering আমাদের দেয় data এর natural structure বুঝার ক্ষমতা, যেখানে আগে থেকে কোনো answer বা label জানা নেই। এটি data exploration এবং insight generation এর জন্য অত্যন্ত powerful tool।
K-Means algorithm টি খুবই elegant এবং simple, কিন্তু এর initial choices এর প্রতি বেশ sensitive। চলুন step-by-step বুঝি কিভাবে এটি কাজ করে।
সবার আগে ঠিক করতে হয় আমরা কতগুলো clusters চাই।
k = 5 # আমরা 5টি গ্রুপে ভাগ করতে চাইকিভাবে k নির্বাচন করবো?
- 📊 Elbow Method ব্যবহার করে
- 📈 Silhouette Score দেখে
- 🧠 Business knowledge/Domain expertise দিয়ে
k সংখ্যক random points কে initial centroids হিসেবে select করা হয়।
🎯 K-Means++ Method (Better Initialization):
এটি intelligent way তে centroids choose করে:
- প্রথম centroid: Random একটা point
- পরবর্তী centroids: যতটা সম্ভব আগের centroids থেকে দূরে
- এতে করে convergence দ্রুত হয় এবং better results পাওয়া যায়
KMeans(n_clusters=5, init="k-means++", random_state=42)কেন K-Means++ ভালো?
- ✅ Random initialization এর চেয়ে stable results
- ✅ Local minimum এ আটকে যাওয়ার সম্ভাবনা কম
- ✅ Faster convergence
প্রতিটা data point কে তার সবচেয়ে কাছের centroid এর cluster এ assign করা হয়।
**কিভাবে "কাছে" measure করা হয়? **
Euclidean Distance ব্যবহার করে:
Distance = √[(x₂-x₁)² + (y₂-y₁)²]
Example:
Point A = (50, 60)
Centroid 1 = (55, 65) → Distance = 7.07
Centroid 2 = (30, 40) → Distance = 28.28
➡️ Point A যাবে Cluster 1 এ (কাছের centroid)
প্রতিটা cluster এর assigned points গুলোর mean (average) নিয়ে নতুন centroid position calculate করা হয়।
Formula:
New Centroid = (Mean of all X coordinates, Mean of all Y coordinates)
Example:
Cluster 1 এ আছে 3টা points:
Point 1: (20, 30)
Point 2: (25, 35)
Point 3: (30, 40)
New Centroid = ((20+25+30)/3, (30+35+40)/3)
= (25, 35)
কি ঘটে?
- 🎯 Centroid move করে cluster এর dense region এর দিকে
- 📍 যেখানে বেশি points আছে সেদিকে centroid shift হয়
Step 3 এবং Step 4 বারবার repeat করতে থাকো যতক্ষণ না:
- ✅ Centroid positions আর change না হয়
- ✅ Point assignments আর change না হয়
- ✅ Maximum iterations এ পৌঁছে যায় (যেমন 300)
Convergence মানে:
Iteration 1: 50 points changed cluster
Iteration 2: 20 points changed cluster
Iteration 3: 5 points changed cluster
Iteration 4: 0 points changed cluster ✅ CONVERGED!
Centroid সেখানে চলে যায় যেখানে বেশি data points আছে।
প্রথম দিকে points jump করে, শেষে stable হয়ে যায়।
শুধু distance calculation এবং mean দিয়েই complex customer segments বা patterns বের হয়ে আসে!
# Different random states = Different results
KMeans(n_clusters=5, random_state=10) # Result A
KMeans(n_clusters=5, random_state=50) # Result B (may differ!)Solution: K-Means++ initialization ব্যবহার করো।
Algorithm সবসময় global optimum solution নাও দিতে পারে।
Solution: Multiple times run করো different initializations দিয়ে।
k এর value একটু change করলেই সম্পূর্ণ ভিন্ন clusters তৈরি হতে পারে।
Key Point: K-Means mathematically straightforward কিন্তু highly parameter-sensitive!
K-Means minimize করতে চায়:
Minimize: Σ Σ ||xᵢ - cⱼ||²
যেখানে:
xᵢ = i-th data point
cⱼ = j-th centroid
||xᵢ - cⱼ||² = squared Euclidean distance
সহজ ভাষায়:
"প্রতিটা point থেকে তার centroid এর distance এর সমষ্টি যতটা কম করা যায়"
✅ K-Means একটি iterative optimization algorithm
✅ Distance + Mean এই দুটো concept ই যথেষ্ট powerful
✅ K-Means++ initialization অবশ্যই ব্যবহার করা উচিত
✅ Algorithm simple কিন্তু initial choices matter
✅ Convergence guarantee আছে, কিন্তু global optimum নাও হতে পারে
K-Means সফলভাবে implement করতে হলে সঠিক preparation এবং evaluation প্রয়োজন। এর requirements এবং limitations দুটোই বুঝতে হবে।
K-Means distance-based algorithm, তাই feature scaling অত্যন্ত গুরুত্বপূর্ণ।
যদি features এর scale different হয়, তাহলে বড় range এর feature clustering process কে dominate করবে এবং results বিকৃত হবে।
Example Without Scaling:
Feature 1: Annual Income = 15-140 (range = 125)
Feature 2: Spending Score = 1-100 (range = 99)
Distance calculation এ Annual Income বেশি প্রভাব ফেলবে ❌
Solution: StandardScaler ব্যবহার করো
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# এখন সব features এর mean = 0, std = 1 ✅After Scaling:
Feature 1: Mean = 0, Std = 1
Feature 2: Mean = 0, Std = 1
এখন দুটো features সমান গুরুত্ব পাবে ✅
অন্যান্য Scaling Methods:
- MinMaxScaler - Values 0 থেকে 1 এর মধ্যে scale করে
- RobustScaler - Outliers handle করতে ভালো
- Normalizer - Row-wise scaling
এই technique inertia vs k এর graph plot করে optimal clusters সংখ্যা identify করতে সাহায্য করে।
Inertia = প্রতিটা point থেকে তার centroid এর squared distance এর সমষ্টি
Inertia = Σ ||xᵢ - nearest_centroid||²
কম Inertia = ভালো clustering
inertia_values = []
for k in range(1, 11):
kmeans = KMeans(n_clusters=k, init="k-means++", random_state=42)
kmeans.fit(X_scaled)
inertia_values.append(kmeans.inertia_)
# Plot করো
plt.plot(range(1, 11), inertia_values, marker='o')Inertia
|
400|•
|
300| •
|
200| •
| •___
100| •___•___•___•
|________________________
1 2 3 4 5 6 7 8 9 10 (k)
↑
Elbow Point (k=5)
Interpretation:
- k=1 থেকে k=5: Inertia দ্রুত কমছে (significant improvement)
- k=5 এর পর: Inertia আস্তে কমছে (diminishing returns)
- k=5 হলো optimal choice (Elbow point)
✅ যেখানে curve এর slope হঠাৎ change হয়
✅ যেখানে আর বেশি clusters add করলে তেমন benefit নেই
যেহেতু clustering এ true labels নেই, তাই indirect metrics ব্যবহার করতে হয়।
kmeans = KMeans(n_clusters=5)
kmeans.fit(X_scaled)
print("Inertia:", kmeans.inertia_)Lower is Better
✅ Clusters compact (ঘনসন্নিবদ্ধ)
Measure করে একটা point তার নিজের cluster এর কতটা কাছাকাছি এবং অন্য cluster থেকে কতটা দূরে।
from sklearn.metrics import silhouette_score
score = silhouette_score(X_scaled, labels)
print("Silhouette Score:", score)Range: -1 to +1
Score > 0.7 = Excellent clustering ⭐⭐⭐
Score 0.5-0.7 = Good clustering ⭐⭐
Score 0.25-0.5 = Weak clustering ⭐
Score < 0.25 = Poor clustering ❌
আমাদের Project এ:
Silhouette Score: 0.554 ✅ Good Quality
sns.scatterplot(x=X[:,0], y=X[:,1], hue=labels, palette='viridis')
plt.title("Cluster Visualization")কি দেখবে?
- ✅ Clusters visually separated কিনা
- ✅ Similar points একই cluster এ আছে কিনা
- ❌ Overlapping clusters আছে কিনা
সবচেয়ে গুরুত্বপূর্ণ validation!
প্রশ্ন করো:
- 🤔 Clusters কি business sense করে?
- 🤔 প্রতিটা segment এর জন্য actionable strategy তৈরি করা যাবে?
- 🤔 Stakeholders এই segmentation বুঝবে এবং use করবে?
Example:
❌ Cluster 1: Random mixed customers
✅ Cluster 1: High-income low-spenders (Potential premium segment)
দ্বিতীয়টি actionable এবং meaningful!
"A visually appealing cluster plot doesn't guarantee a practically useful model."
✅ Business Objectives - Goals achieve হচ্ছে কিনা?
✅ Domain Knowledge - Industry experts কি বলছে?
✅ Actionability - Results দিয়ে কি practical actions নেওয়া যাবে?
✅ Interpretability - Teams কি easily বুঝতে পারবে?
- ❌ শুধু spherical clusters এ ���াজ করে
- ❌ Outliers দ্বারা প্রভাবিত হয়
- ❌ k আগে থেকে জানতে হয়
- ❌ Different sized clusters handle করতে পারে না
- ❌ Non-convex shapes এ fail করে
- ❌ Initialization sensitive
- ✅ Spherical/circular shaped clusters
- ✅ Similar sized clusters
- ✅ Well-separated data
- ✅ Large datasets (fast & efficient)
- ✅ High-dimensional data (with scaling)
Common Use Cases:
- 🛒 Customer Segmentation - গ্রাহকদের behavior অনুযায়ী group করা
- 🖼️ Image Compression - Similar colors cluster করে file size কমানো
- 📰 Document Clustering - Similar topics এর articles group করা
- 🏥 Medical Diagnosis - Patient risk groups তৈরি করা
- 🌐 Network Security - Anomaly detection
- 📍 Location Services - Delivery zones optimize করা
যখন K-Means suitable না:
| Algorithm | কখন ব্যবহার করবে |
|---|---|
| DBSCAN | Non-spherical clusters, outliers আছে |
| Hierarchical | Cluster hierarchy দেখতে চাও |
✅ K-Means = simple, fast, effective (সঠিক data এর জন্য)
✅ Scaling mandatory - distance-based algorithm
✅ K-Means++ initialization essential
✅ Elbow + Silhouette দিয়ে k select করো
✅ Spherical clusters এ best, non-spherical এ fail
✅ Business validation সবচেয়ে important
✅ সব data এর জন্য suitable না - alternatives জানতে হবে