K-Means একটি জনপ্রিয় আনসুপারভাইজড লার্নিং অ্যালগরিদম যা ক্লাস্টারিং সমস্যা সমাধানে ব্যবহৃত হয়। এর মাধ্যমে একটি ডেটাসেটকে নির্দিষ্ট সংখ্যক (K) ক্লাস্টারে বিভক্ত করা হয়, যেখানে একই ক্লাস্টারের ডেটাপয়েন্টগুলি একে অপরের কাছে থাকে এবং ভিন্ন ক্লাস্টারের ডেটাপয়েন্টগুলি পরস্পরের থেকে দূরে থাকে।
K-Means অ্যালগরিদমটি ফিচার স্পেস (Feature Space) এ ক্লাস্টারের কেন্দ্র (Centroids) খুঁজে বের করে এবং ডেটাকে সেই কেন্দ্রের কাছাকাছি গ্রুপ করে। এটি একটি ইটারেটিভ প্রক্রিয়া, যেখানে ক্লাস্টারের কেন্দ্রগুলি (centroids) আপডেট হয় এবং ডেটাপয়েন্টগুলির ক্লাস্টার অ্যাসাইনমেন্ট পরিবর্তিত হতে থাকে যতক্ষণ না কনভার্জেন্স না ঘটে (অথবা স্থির অবস্থায় না চলে আসে)।
K-Means এর কাজের পদ্ধতি:
১. K ক্লাস্টার সংখ্যা নির্বাচন করা:
প্রথমে, আপনাকে নির্ধারণ করতে হবে কতটি ক্লাস্টার (K) তৈরি করতে চান। এই K মানটি সঠিকভাবে নির্বাচন করা খুবই গুরুত্বপূর্ণ, কারণ এটি মডেলের কার্যকারিতা এবং বিশ্লেষণকে প্রভাবিত করবে।
২. র্যান্ডমলি K পয়েন্ট নির্বাচন করা:
ডেটাসেট থেকে Kটি পয়েন্ট র্যান্ডমভাবে নির্বাচন করা হয়। এই পয়েন্টগুলোই শুরুতে ক্লাস্টার সেন্ট্রয়েড হিসেবে কাজ করবে।
৩. ক্লাস্টার অ্যাসাইনমেন্ট:
প্রতিটি ডেটাপয়েন্টের জন্য, এটি যে ক্লাস্টারের কাছাকাছি রয়েছে সেই ক্লাস্টারে অ্যাসাইন করা হয়। অর্থাৎ, ডেটাপয়েন্টগুলোকে তাদের নিকটতম সেন্ট্রয়েডের সাথে সম্পর্কিত ক্লাস্টারে গুচ্ছিত করা হয়। সাধারণত, ইউক্লিডিয়ান ডিস্ট্যান্স (Euclidean Distance) ব্যবহার করা হয় দুইটি পয়েন্টের মধ্যে দূরত্ব পরিমাপ করতে।
৪. ক্লাস্টার সেন্ট্রয়েড আপডেট করা:
একবার প্রতিটি ডেটাপয়েন্ট তার ক্লাস্টারে অ্যাসাইন হয়ে গেলে, প্রত্যেকটি ক্লাস্টারের নতুন সেন্ট্রয়েড (গড় পয়েন্ট) গণনা করা হয়। এই সেন্ট্রয়েড হলো ক্লাস্টারের সমস্ত ডেটাপয়েন্টের গড় অবস্থান।
৫. ধাপ ৩ এবং ৪ পুনরাবৃত্তি করা:
৩য় এবং ৪র্থ ধাপগুলো বারবার পুনরাবৃত্তি করা হয় যতক্ষণ না ক্লাস্টারের সেন্ট্রয়েড স্থির না হয়ে যায়। অর্থাৎ, সেন্ট্রয়েড আর পরিবর্তিত হয় না এবং ক্লাস্টারের মধ্যে কোন ডেটাপয়েন্টের পরিবর্তন ঘটে না।
৬. কনভার্জেন্স (Convergence):
যখন ক্লাস্টারের সেন্ট্রয়েডের অবস্থান আর পরিবর্তিত না হয় বা ডেটাপয়েন্টের অ্যাসাইনমেন্টে কোনো পরিবর্তন না হয়, তখন অ্যালগরিদম কনভার্জ হয় এবং এটি থামিয়ে দেওয়া হয়।
K-Means এর গাণিতিক ভিত্তি:
K-Means অ্যালগরিদমটি ক্লাস্টারিং কস্ট ফাংশন (Objective Function) মিনিমাইজ করার চেষ্টা করে। কস্ট ফাংশন হলো:
এখানে:
- হল ক্লাস্টারের সংখ্যা
- হল ক্লাস্টার -এর সদস্য
- হল ডেটাপয়েন্ট
- হল ক্লাস্টার -এর সেন্ট্রয়েড
- হল ইউক্লিডিয়ান দূরত্বের বর্গ
K-Means এর প্রধান পদক্ষেপগুলো:
- K পয়েন্ট র্যান্ডমলি নির্বাচন করা।
- ডেটাপয়েন্টগুলোকে তাদের নিকটতম সেন্ট্রয়েডের ক্লাস্টারে অ্যাসাইন করা।
- প্রতিটি ক্লাস্টারের নতুন সেন্ট্রয়েড গণনা করা।
- পূর্বের ক্লাস্টারের সেন্ট্রয়েডের সাথে নতুন সেন্ট্রয়েডের তুলনা করা।
- কনভার্জেন্স না হওয়া পর্যন্ত ধাপগুলো পুনরাবৃত্তি করা।
K-Means এর সুবিধা:
- সহজ এবং দ্রুত: এটি খুবই সহজ অ্যালগরিদম এবং বড় ডেটাসেটের জন্য দ্রুত কাজ করে।
- কম্পিউটেশনালভাবে কার্যকরী: K-Means তুলনামূলকভাবে কম্পিউটেশনাল রিসোর্স ব্যবহার করে, যা বড় ডেটাসেটের জন্য উপকারী।
- ব্যবহার সহজ: এই অ্যালগরিদমটি সহজে বাস্তবায়িত করা যায় এবং ব্যবহারের জন্য বেশ উপযোগী।
K-Means এর অসুবিধা:
- K নির্ধারণের সমস্যা: সঠিক K নির্বাচন করা একটি চ্যালেঞ্জ হতে পারে, কারণ এটি অ্যালগরিদমের কার্যকারিতা প্রভাবিত করে।
- অনুমানকৃত ক্লাস্টার আকার: K-Means সব ক্লাস্টারের আকার একরকম ধরি এবং এটি অসংগঠিত ক্লাস্টার গঠন করতে পারে।
- স্পর্শকাতর শুরু (Sensitive to initialization): যদি সেন্ট্রয়েডের প্রাথমিক নির্বাচনে সমস্যা হয় (যেমন র্যান্ডম সেন্ট্রয়েড নির্বাচন), তাহলে এটি স্থানীয় মিনিমাম (local minimum) এ আটকে যেতে পারে।
- অ্যালগরিদমটি গোলমালযুক্ত (Noise-sensitive): অতিরিক্ত বা অস্বাভাবিক ডেটা পয়েন্টগুলি কিভাবে ট্রিট করা হবে তা স্পষ্ট নয়, যা ক্লাস্টারিং প্রক্রিয়ায় সমস্যা তৈরি করতে পারে।
K-Means এর উদাহরণ (Python):
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
# কৃত্রিম ডেটাসেট তৈরি করা
X, _ = make_blobs(n_samples=300, centers=4, random_state=42)
# K-Means মডেল তৈরি করা
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
# ক্লাস্টারের সেন্ট্রয়েড
centroids = kmeans.cluster_centers_
# ডেটা পয়েন্ট এবং সেন্ট্রয়েড প্লট করা
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], s=200, c='red', marker='X') # সেন্ট্রয়েড
plt.title("K-Means Clustering")
plt.show()
এই কোডটি একটি কৃত্রিম ডেটাসেট তৈরি করবে এবং K-Means অ্যালগরিদম ব্যবহার করে ৪টি ক্লাস্টারে ডেটা পয়েন্টগুলো বিভক্ত করবে, যেখানে সেন্ট্রয়েডগুলো লাল 'X' দিয়ে চিহ্নিত থাকবে।
সারাংশ:
K-Means একটি শক্তিশালী এবং জনপ্রিয় ক্লাস্টারিং অ্যালগরিদম যা ডেটাকে সংখ্যক ক্লাস্টারে বিভক্ত করে। এটি র্যান্ডমলি সেন্ট্রয়েড নির্বাচন করে এবং ডেটা পয়েন্টগুলোকে তাদের নিকটতম সেন্ট্রয়েডের সাথে সম্পর্কিত ক্লাস্টারে অ্যাসাইন করে। এর পর, সেন্ট্রয়েড আপডেট করা হয় এবং এই প্রক্রিয়া পুনরাবৃত্তি করা হয় যতক্ষণ না কনভার্জেন্স ঘটে।
Read more