K-Means Clustering হল একটি জনপ্রিয় আনসুপারভাইজড লার্নিং অ্যালগরিদম, যা ডেটাকে K সংখ্যক ক্লাস্টারে বিভক্ত করে। K-Means একটি ডেটাসেটের মধ্যে এমন প্যাটার্ন বা গ্রুপ খুঁজে বের করার চেষ্টা করে, যেখানে প্রতিটি গ্রুপের ডেটা পয়েন্টগুলি একে অপরের কাছে সাদৃশ্যপূর্ণ।
K-Means Clustering এর পদক্ষেপ:
- K-টি ক্লাস্টারের সেন্ট্রয়েড চয়ন: প্রথমে Kটি ক্লাস্টার সেন্ট্রয়েড (গড়) র্যান্ডমভাবে নির্বাচন করা হয়।
- ডেটা পয়েন্ট ক্লাস্টারের সাথে অ্যাসাইনমেন্ট: প্রতিটি ডেটা পয়েন্ট তার নিকটতম সেন্ট্রয়েডের সাথে ক্লাস্টারে অ্যাসাইন করা হয়।
- সেন্ট্রয়েড আপডেট: প্রতিটি ক্লাস্টারের সেন্ট্রয়েড নতুনভাবে হিসাব করা হয়।
- ধাপ ২ এবং ৩ পুনরাবৃত্তি করা: যতক্ষণ না সেন্ট্রয়েডগুলো স্থির হয়ে যায়।
এখন চলুন Scikit-learn ব্যবহার করে K-Means Clustering মডেল তৈরি করি।
K-Means Clustering উদাহরণ:
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, cluster_std=0.60, random_state=0)
# K-Means মডেল তৈরি (K = 4 ক্লাস্টার)
kmeans = KMeans(n_clusters=4)
# মডেল প্রশিক্ষণ
kmeans.fit(X)
# পূর্বানুমান (কোন ডেটা পয়েন্ট কোন ক্লাস্টারে)
y_kmeans = kmeans.predict(X)
# ক্লাস্টারের সেন্ট্রয়েড
centers = kmeans.cluster_centers_
# ক্লাস্টার এবং সেন্ট্রয়েড প্লট করা
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
# সেন্ট্রয়েডগুলি চিহ্নিত করা
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75, marker='X')
plt.title('K-Means Clustering')
plt.show()
কোড বিশ্লেষণ:
- ডেটা তৈরি:
make_blobs()ফাংশন দিয়ে আমরা ৪টি কেন্দ্রের সঙ্গে সিমুলেটেড ডেটা তৈরি করেছি, যা আমাদের ক্লাস্টারিংয়ের জন্য ব্যবহার হবে। - K-Means মডেল তৈরি:
KMeans(n_clusters=4)দিয়ে ৪টি ক্লাস্টার চয়ন করা হয়েছে। - মডেল প্রশিক্ষণ:
fit(X)দিয়ে মডেলটি ডেটার ওপর প্রশিক্ষণ দেয়া হয়েছে। - পূর্বানুমান:
predict(X)দিয়ে প্রতিটি ডেটা পয়েন্টের ক্লাস্টার নির্বাচন করা হয়েছে। - ক্লাস্টার সেন্ট্রয়েড:
cluster_centers_দিয়ে ক্লাস্টারগুলোর সেন্ট্রয়েড বের করা হয়েছে। - ভিজ্যুয়ালাইজেশন:
matplotlibদিয়ে ডেটা এবং ক্লাস্টার সেন্ট্রয়েডগুলো প্লট করা হয়েছে।
ফলাফল:
এই কোডটি চলানোর পর আপনি একটি গ্রাফ পাবেন যেখানে ডেটা পয়েন্টগুলি বিভিন্ন রঙে বিভক্ত হবে, এবং ক্লাস্টারের সেন্ট্রয়েডগুলি লাল X চিহ্ন দিয়ে প্রদর্শিত হবে।
Hyperparameter Tuning (Elbow Method):
কখনও কখনও ক্লাস্টারের সঠিক সংখ্যা খুঁজে বের করার জন্য Elbow Method ব্যবহার করা হয়, যা K-এর জন্য উপযুক্ত মান নির্ধারণে সাহায্য করে। এর মাধ্যমে একটি গ্রাফ তৈরি করা হয় যেখানে কিভাবে ক-এর মান পরিবর্তন হলে ক্লাস্টারের ইনর্শিয়া (Within-cluster Sum of Squares) পরিবর্তিত হয় তা দেখা যায়।
# Elbow Method এর মাধ্যমে K নির্ধারণ
inertia = []
for k in range(1, 11):
kmeans = KMeans(n_clusters=k)
kmeans.fit(X)
inertia.append(kmeans.inertia_)
# ইনর্শিয়া গ্রাফ
plt.plot(range(1, 11), inertia)
plt.title('Elbow Method')
plt.xlabel('Number of Clusters (K)')
plt.ylabel('Inertia')
plt.show()
এটি একটি গ্রাফ তৈরি করবে, যেখানে আপনি দেখতে পাবেন যে, কোথায় ইনর্শিয়ার সাপেক্ষে সঠিক ক পয়েন্টে “কোজি বাঁক” বা "elbow" তৈরি হচ্ছে।
সারাংশ:
- K-Means Clustering হল একটি জনপ্রিয় ক্লাস্টারিং অ্যালগরিদম যা ডেটাকে Kটি ক্লাস্টারে বিভক্ত করে।
- Scikit-learn লাইব্রেরি ব্যবহার করে Python এ সহজেই K-Means মডেল তৈরি করা যায়।
- Elbow Method ব্যবহার করে সঠিক K সংখ্যক ক্লাস্টার নির্বাচন করা যেতে পারে।
Read more