K-Means Clustering হল একটি জনপ্রিয় আনসুপারভাইজড লার্নিং অ্যালগরিদম যা ডেটাকে ক্লাস্টার বা গ্রুপে বিভক্ত করতে ব্যবহৃত হয়। এখানে ডেটার মধ্যে লুকানো প্যাটার্ন বা সম্পর্ক খুঁজে বের করা হয়, যেখানে প্রতিটি ক্লাস্টারের মধ্যে অন্তর্ভুক্ত ডেটা পয়েন্টগুলি একে অপরের সাথে খুব মিল থাকে এবং ভিন্ন ক্লাস্টারের ডেটা পয়েন্টগুলি একে অপর থেকে অনেক আলাদা থাকে।
K-Means Clustering এর মূল ধারণা:
- K: এটি গ্রুপ বা ক্লাস্টারের সংখ্যা। (যেমন, K=3 হলে, ৩টি ক্লাস্টার হবে)
- Centroids: ক্লাস্টারগুলির কেন্দ্রবিন্দু (centroid) হবে। প্রথমে কনিষ্ঠতম পয়েন্টগুলো নির্বাচিত হয় এবং সেগুলি ক্লাস্টারের কেন্দ্রস্থল হিসেবে নির্ধারণ করা হয়।
- Iteration: পয়েন্টগুলির জন্য ক্লাস্টারের কেন্দ্রের কাছাকাছি হওয়া পর্যন্ত পুনরাবৃত্তি হয়।
K-Means Clustering Steps:
- K সংখ্যক ক্লাস্টারের কেন্দ্রে শুরুতে র্যান্ডমভাবে পয়েন্ট নির্বাচন করুন।
- প্রতিটি ডেটা পয়েন্টকে তার নিকটতম ক্লাস্টার কেন্দ্রে বরাদ্দ করুন।
- প্রতিটি ক্লাস্টারের জন্য নতুন কেন্দ্র পয়েন্ট গণনা করুন (mean of points within the cluster)।
- ক্লাস্টারগুলির কেন্দ্র পরিবর্তিত না হওয়া পর্যন্ত এই প্রক্রিয়াটি পুনরাবৃত্তি করুন।
Python এ K-Means Clustering বাস্তবায়ন
এটি করার জন্য আমরা Scikit-learn লাইব্রেরির KMeans ক্লাস ব্যবহার করতে পারি। আমরা কৃত্রিম ডেটাসেট তৈরি করব এবং তারপর K-Means ব্যবহার করে ক্লাস্টারিং করব।
কোড উদাহরণ:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
# কৃত্রিম ডেটাসেট তৈরি করা
X, y = make_blobs(n_samples=300, centers=4, random_state=42)
# K-Means মডেল তৈরি এবং ফিট করা
kmeans = KMeans(n_clusters=4, random_state=42)
kmeans.fit(X)
# ক্লাস্টার কেন্দ্র পয়েন্টগুলি
centroids = kmeans.cluster_centers_
# প্রতিটি পয়েন্টের ক্লাস্টার লেবেল
labels = kmeans.labels_
# প্লটিং করা
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
# ক্লাস্টারের কেন্দ্রগুলি প্লট করা
plt.scatter(centroids[:, 0], centroids[:, 1], s=300, c='red', marker='X', label='Centroids')
plt.title('K-Means Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()
কোডের ব্যাখ্যা:
- make_blobs(): এই ফাংশনটি কৃত্রিম ডেটাসেট তৈরি করে, যেখানে ৪টি কেন্দ্রে ৩০০টি ডেটা পয়েন্ট থাকে।
- KMeans(n_clusters=4): এটি K-Means ক্লাস্টারিং তৈরি করার জন্য ব্যবহৃত হয়। এখানে
n_clusters=4মানে ৪টি ক্লাস্টার তৈরি করা হবে। - kmeans.fit(X): এখানে X ডেটাসেটকে ফিট করে K-Means অ্যালগরিদম চালানো হয়।
- kmeans.cluster_centers_: ক্লাস্টারের কেন্দ্রবিন্দু গুলি বের করে।
- kmeans.labels_: প্রতিটি ডেটা পয়েন্টের জন্য ক্লাস্টারের লেবেল বের করে, যাতে প্রতিটি পয়েন্ট কোন ক্লাস্টারে অন্তর্ভুক্ত হয়েছে তা জানা যায়।
আউটপুট:
- আপনি দেখতে পাবেন যে ক্লাস্টারগুলি বিভিন্ন রঙে আলাদা হয়েছে এবং ক্লাস্টারের কেন্দ্রে রেড X চিহ্ন দেখাবে।
K-Means এর জন্য কিছু গুরুত্বপূর্ণ প্যারামিটার:
- n_clusters: আপনি যে সংখ্যক ক্লাস্টার চান তার সংখ্যা।
- init: ক্লাস্টারের কেন্দ্রের প্রাথমিক অবস্থান কিভাবে নির্বাচন করা হবে। সাধারণত
k-means++থাকে, যা ভাল সলিউশন দেয়। - max_iter: সর্বাধিক পুনরাবৃত্তি (iterations) সংখ্যা।
- random_state: র্যান্ডম নম্বর জেনারেটরের জন্য সিড।
K-Means ক্লাস্টারিং এর মূল্যায়ন:
১. Elbow Method:
K-Means এর জন্য সঠিক K (ক্লাস্টারের সংখ্যা) নির্বাচন করতে Elbow Method ব্যবহার করা হয়। এতে আপনি বিভিন্ন K এর জন্য ক্লাস্টারিং করতে পারেন এবং সেরা K নির্বাচন করতে পারেন, যেখানে WCSS (Within-Cluster Sum of Squares) দ্রুত কমে যেতে শুরু করে। এটি "elbow" পয়েন্টের মতো দেখাবে।
wcss = []
for i in range(1, 11):
kmeans = KMeans(n_clusters=i, random_state=42)
kmeans.fit(X)
wcss.append(kmeans.inertia_)
# Elbow plot
plt.plot(range(1, 11), wcss)
plt.title('Elbow Method For Optimal K')
plt.xlabel('Number of Clusters')
plt.ylabel('WCSS')
plt.show()
২. Silhouette Score:
Silhouette Score ডেটার ক্লাস্টারের মান যাচাই করার জন্য ব্যবহার করা হয়। এটি কেমন ভাল ক্লাস্টার তৈরি হয়েছে তা দেখানোর জন্য একটি স্কোর দেয়, যেটি -1 থেকে 1 এর মধ্যে থাকে। ১ মানে খুব ভাল ক্লাস্টার এবং -১ মানে ভুল ক্লাস্টারিং।
from sklearn.metrics import silhouette_score
# K-Means এর স্কোর মূল্যায়ন
score = silhouette_score(X, kmeans.labels_)
print(f'Silhouette Score: {score}')
সারাংশ
K-Means Clustering একটি শক্তিশালী এবং সহজ উপায় যা ডেটাকে বিভিন্ন গ্রুপ বা ক্লাস্টারে বিভক্ত করতে ব্যবহৃত হয়। এটি ডেটার মধ্যে লুকানো প্যাটার্ন বা সম্পর্ক বিশ্লেষণে সাহায্য করে এবং Scikit-learn লাইব্রেরির মাধ্যমে সহজে বাস্তবায়ন করা যায়।