K-Means Clustering একটি জনপ্রিয় Unsupervised Machine Learning Algorithm, যার মাধ্যমে আমরা একজাতীয় বা একরকম ডেটা পয়েন্টগুলোকে একত্র করে ভিন্ন ভিন্ন গ্রুপ (cluster) বানাতে পারি। নিচে K-Means Clustering সম্পর্কে বাংলা ভাষায় সহজভাবে একটি ব্যাখ্যা তুলে ধরা হলো, যাতে একজন শিক্ষার্থী বা শুরুর পর্যায়ের মেশিন লার্নিং আগ্রহীও সহজেই বুঝতে পারে।
 

K-Means Clustering কি

K-Means ক্লাস্টারিং হলো একটি জনপ্রিয় আনসুপারভাইজড মেশিন লার্নিং অ্যালগরিদম যা ডেটাসেটকে নির্দিষ্ট সংখ্যক “K” গ্রুপে (বা ক্লাস্টারে) বিভক্ত করতে ব্যবহৃত হয়। “আনসুপারভাইজড” বলার কারণ হলো, এই অ্যালগরিদম ডেটার কোনো পূর্ব-নির্ধারিত লেবেল বা ক্যাটাগরি ব্যবহার করে না।

এর প্রধান উদ্দেশ্য হলো ডেটা পয়েন্টগুলোকে এমনভাবে ক্লাস্টার করা যাতে একই ক্লাস্টারের পয়েন্টগুলো একে অপরের সাথে সবচেয়ে বেশি সাদৃশ্যপূর্ণ হয় এবং বিভিন্ন ক্লাস্টারের পয়েন্টগুলোর মধ্যে পার্থক্য স্পষ্ট হয়। সহজ কথায়, K-Means ডেটাকে এমনভাবে ভাগ করে যেন প্রতিটি গ্রুপে থাকা ডেটা পয়েন্টগুলো তাদের নিজেদের গ্রুপের সেন্ট্রয়েডের (গাণিতিক গড়) কাছাকাছি থাকে।
 

K-Means ক্লাস্টারিং এর উদাহরণ

ধরুন, আপনার কাছে কিছু ছাত্র-ছাত্রীর উচ্চতা এবং ওজন সম্পর্কিত ডেটা আছে। আপনি এই ডেটা ব্যবহার করে ছাত্র-ছাত্রীদের কয়েকটি গ্রুপে ভাগ করতে চান, যেখানে প্রতিটি গ্রুপের ছাত্র-ছাত্রীরা উচ্চতা ও ওজনের দিক থেকে একই রকম হবে। K-Means ক্লাস্টারিং ব্যবহার করে আপনি এই কাজটি করতে পারেন। ধাপগুলো সাধারণত নিচে দেওয়া হলো:

  1. K এর মান নির্ধারণ: প্রথমে আপনাকে K-এর একটি মান নির্ধারণ করতে হবে, অর্থাৎ আপনি কতগুলো গ্রুপ (ক্লাস্টার) তৈরি করতে চান। ধরা যাক, আপনি ৩টি গ্রুপে ভাগ করতে চান, তাহলে K=3।
  2. সেন্ট্রয়েড নির্বাচন: অ্যালগরিদম ডেটা থেকে র্যান্ডমলি ৩টি ডেটা পয়েন্টকে প্রাথমিক সেন্ট্রয়েড (বা ক্লাস্টার সেন্টার) হিসেবে নির্বাচন করবে।
  3. ডেটা পয়েন্ট অ্যাসাইনমেন্ট: এরপর প্রতিটি ডেটা পয়েন্টকে তার নিকটতম সেন্ট্রয়েডের সাথে অ্যাসাইন করা হবে। অর্থাৎ, যে সেন্ট্রয়েডের সাথে একটি ডেটা পয়েন্টের দূরত্ব সবচেয়ে কম, সেই ডেটা পয়েন্টটি সেই সেন্ট্রয়েডের ক্লাস্টারে অন্তর্ভুক্ত হবে।
  4. সেন্ট্রয়েড আপডেট: প্রতিটি ক্লাস্টারের ডেটা পয়েন্টগুলোর গড় অবস্থান গণনা করে নতুন সেন্ট্রয়েড তৈরি করা হবে। অর্থাৎ, ক্লাস্টারের সকল ডেটা পয়েন্টের উচ্চতা ও ওজনের গড় নিয়ে নতুন সেন্ট্রয়েডের উচ্চতা ও ওজন নির্ধারণ করা হবে।
  5. পুনরাবৃত্তি: ৩ এবং ৪ নম্বর ধাপগুলো বারবার পুনরাবৃত্তি করা হবে যতক্ষণ না সেন্ট্রয়েডগুলো আর উল্লেখযোগ্যভাবে পরিবর্তন না হয়, অথবা একটি নির্দিষ্ট সংখ্যক পুনরাবৃত্তি (iterations) সম্পন্ন হয়।

এই প্রক্রিয়ার শেষে আপনি ৩টি ভিন্ন গ্রুপ পাবেন, যেখানে প্রতিটি গ্রুপের ছাত্র-ছাত্রীদের উচ্চতা ও ওজন একে অপরের সাথে সাদৃশ্যপূর্ণ হবে। উদাহরণস্বরূপ, একটি গ্রুপে কম উচ্চতা ও কম ওজনের ছাত্র-ছাত্রীরা থাকতে পারে, অন্যটিতে মাঝারি উচ্চতা ও ওজনের, এবং তৃতীয়টিতে বেশি উচ্চতা ও বেশি ওজনের।
 

K-Means ক্লাস্টারিং এর ব্যাখ্যা

K-Means ক্লাস্টারিং এর ফলাফল ব্যাখ্যা করার অর্থ হলো, প্রতিটি ক্লাস্টার কী প্রতিনিধিত্ব করে তা বোঝা। উপরের উদাহরণে, যদি আমরা ৩টি ক্লাস্টার পাই, তাহলে আমরা বিশ্লেষণ করতে পারি:

  • ক্লাস্টার ১: এই ক্লাস্টারের সেন্ট্রয়েডের উচ্চতা এবং ওজন কম। তাই এই ক্লাস্টারটি “কম উচ্চতা ও ওজনের ছাত্র-ছাত্রী” দের প্রতিনিধিত্ব করে।
  • ক্লাস্টার ২: এই ক্লাস্টারের সেন্ট্রয়েডের উচ্চতা এবং ওজন মাঝামাঝি। এটি “মাঝারি উচ্চতা ও ওজনের ছাত্র-ছাত্রী” দের প্রতিনিধিত্ব করে।
  • ক্লাস্টার ৩: এই ক্লাস্টারের সেন্ট্রয়েডের উচ্চতা এবং ওজন বেশি। এটি “বেশি উচ্চতা ও ওজনের ছাত্র-ছাত্রী” দের প্রতিনিধিত্ব করে।

এই ব্যাখ্যা আমাদেরকে ডেটাসেটের মধ্যে লুকানো প্যাটার্ন এবং সম্পর্ক বুঝতে সাহায্য করে। এর মাধ্যমে আমরা প্রতিটি ক্লাস্টারের বৈশিষ্ট্যগুলো জানতে পারি এবং এর উপর ভিত্তি করে সিদ্ধান্ত নিতে পারি।
 

Python ব্যবহার করে K-Means ক্লাস্টারিং এবং কোডের ব্যাখ্যা

প্রথমে আমাদের কিছু লাইব্রেরি ইম্পোর্ট করতে হবে: numpy ডেটা তৈরি করার জন্য, matplotlib.pyplot গ্রাফ তৈরির জন্য, এবং sklearn.cluster.KMeans K-Means অ্যালগরিদম ব্যবহার করার জন্য।

১. ডেটা তৈরি করা 

আপনার K-Means উদাহরণে যেমন ছাত্র-ছাত্রীর উচ্চতা ও ওজনের কথা বলা হয়েছিল, আমরা এখানেও ২-মাত্রার কিছু ডামি ডেটা তৈরি করব। এটি X নামের একটি NumPy অ্যারে হবে।

  • np.random.rand(100, 2): এটি 0 থেকে 1 এর মধ্যে 100টি রো এবং 2টি কলাম সহ একটি NumPy অ্যারে তৈরি করে।
  • * 100: ডেটাগুলোকে 0 থেকে 100 এর মধ্যে স্কেল করা হচ্ছে যাতে মানগুলো আরও বাস্তবসম্মত হয়।
  • np.random.seed(42): এটি র্যান্ডম নম্বর জেনারেটরকে একটি নির্দিষ্ট বীজ (seed) দিয়ে শুরু করে, যার ফলে প্রতিবার কোড চালালে একই র্যান্ডম ডেটা তৈরি হবে। এটি ফলাফলের পুনরাবৃত্তি নিশ্চিত করে।
২. K-Means মডেল তৈরি এবং ফিট করা 

আমরা K-এর একটি মান নির্বাচন করব, যেমন K=3। তারপর KMeans অ্যালগরিদমটি এই ডেটার উপর প্রয়োগ করব।

  • KMeans(n_clusters=k, random_state=42, n_init=10):
    • n_clusters=k: আমরা 3টি ক্লাস্টার তৈরি করতে চাই তা নির্দিষ্ট করে।
    • random_state=42: সেন্ট্রয়েডের প্রাথমিক নির্বাচন যাতে প্রতিবার একই হয়, তার জন্য এটি সেট করা হয়।
    • n_init=10: এটি K-Means অ্যালগরিদমকে 10 বার বিভিন্ন প্রাথমিক সেন্ট্রয়েড সেট দিয়ে চালানোর নির্দেশ দেয় এবং সেরা ফলাফলটি (সবচেয়ে কম WCSS) নির্বাচন করে। sklearn এর নতুন সংস্করণে n_init এর ডিফল্ট মান auto থেকে পরিবর্তিত হয়েছে, তাই এটি স্পষ্টভাবে উল্লেখ করা ভালো।
  • kmeans.fit(X): এই লাইনটি K-Means অ্যালগরিদমকে X ডেটার উপর প্রয়োগ করে, যার ফলে ক্লাস্টারগুলো গঠিত হয় এবং সেন্ট্রয়েডগুলো নির্ধারিত হয়।
৩. ক্লাস্টার লেবেল এবং সেন্ট্রয়েডগুলো পাওয়া 

মডেল ফিট করার পর, আমরা প্রতিটি ডেটা পয়েন্ট কোন ক্লাস্টারের অন্তর্ভুক্ত তা জানতে পারি (labels_) এবং প্রতিটি ক্লাস্টারের সেন্ট্রয়েডগুলোর অবস্থানও (cluster_centers_) পেতে পারি।

  • kmeans.labels_: এটি X ডেটা পয়েন্টগুলোর জন্য একটি অ্যারে, যেখানে প্রতিটি ডেটা পয়েন্টের জন্য তার ক্লাস্টার আইডি (0 থেকে K-1 পর্যন্ত) রয়েছে।
  • kmeans.cluster_centers_: এটি একটি অ্যারে যেখানে প্রতিটি ক্লাস্টারের জন্য তার সেন্ট্রয়েডের স্থানাঙ্ক রয়েছে।
৪. ফলাফল ভিজ্যুয়ালাইজ করা

ডেটা পয়েন্টগুলো এবং তাদের ক্লাস্টার অ্যাসাইনমেন্টের পাশাপাশি সেন্ট্রয়েডগুলো একটি স্ক্যাটার প্লটের মাধ্যমে দেখানো হয়।

  • plt.figure(figsize=(8, 6)): প্লটের আকার সেট করে।
  • for i in range(k): প্রতিটি ক্লাস্টারের জন্য লুপ চলে।
  • cluster_points = X[labels == i]: নির্দিষ্ট ক্লাস্টার i এর অন্তর্ভুক্ত সমস্ত ডেটা পয়েন্ট নির্বাচন করে।
  • plt.scatter(cluster_points[:, 0], cluster_points[:, 1], label=f'Cluster {i+1}'): প্রতিটি ক্লাস্টারের ডেটা পয়েন্টগুলোকে ভিন্ন রঙে প্লট করে।
  • plt.scatter(centroids[:, 0], centroids[:, 1], marker='X', s=200, color='red', label='Centroids'): সেন্ট্রয়েডগুলোকে বড় লাল ‘X’ চিহ্ন দিয়ে প্লট করে।
  • plt.title, plt.xlabel, plt.ylabel, plt.legend, plt.grid(True), plt.show(): প্লটের শিরোনাম, অক্ষের লেবেল, লেজেন্ড এবং গ্রিড যোগ করে এবং প্লটটি প্রদর্শন করে।
সম্পূর্ণ কোড
এই কোডটি কী করে?

এই কোডটি প্রথমে উচ্চতা এবং ওজনের মতো দেখতে 100টি র্যান্ডম ডেটা পয়েন্ট তৈরি করে। এরপর K-Means অ্যালগরিদম ব্যবহার করে এই ডেটাগুলোকে 3টি ক্লাস্টারে ভাগ করে। পরিশেষে, একটি গ্রাফ তৈরি করে প্রতিটি ক্লাস্টারের ডেটা পয়েন্টগুলোকে আলাদা আলাদা রঙে দেখায় এবং প্রতিটি ক্লাস্টারের কেন্দ্র (সেন্ট্রয়েড) একটি লাল ‘X’ চিহ্ন দিয়ে চিহ্নিত করে। এর মাধ্যমে আপনি দেখতে পারবেন কিভাবে K-Means ডেটাগুলোকে তাদের বৈশিষ্ট্যের সাদৃশ্যের ভিত্তিতে গ্রুপ করেছে।
 

K-Means কিভাবে একই ডেটা পয়েন্টগুলিকে গ্রুপ করে

K-Means অ্যালগরিদম ডেটা পয়েন্টগুলিকে তাদের বৈশিষ্ট্যের সাদৃশ্যের উপর ভিত্তি করে গ্রুপ করে। এটি সাধারণত ইউক্লিডিয়ান দূরত্ব (Euclidean distance) ব্যবহার করে দুটি ডেটা পয়েন্টের মধ্যে বা একটি ডেটা পয়েন্ট এবং একটি সেন্ট্রয়েডের মধ্যে দূরত্ব পরিমাপ করে।
প্রক্রিয়াটি নিম্নরূপ:

  1. দূরত্ব গণনা: প্রতিটি ডেটা পয়েন্ট থেকে বিদ্যমান প্রতিটি সেন্ট্রয়েডের দূরত্ব গণনা করা হয়।
  2. নিকটতম সেন্ট্রয়েডে অ্যাসাইনমেন্ট: প্রতিটি ডেটা পয়েন্টকে সেই সেন্ট্রয়েডের সাথে অ্যাসাইন করা হয় যার সাথে তার দূরত্ব সবচেয়ে কম। এর মানে হলো, যে ডেটা পয়েন্টগুলো একে অপরের কাছাকাছি, তারা একই সেন্ট্রয়েডের কাছাকাছি থাকার সম্ভাবনা বেশি এবং তাই একই ক্লাস্টারে গ্রুপ করা হয়।
  3. সেন্ট্রয়েড পুনর্গঠন: একবার সমস্ত ডেটা পয়েন্টকে ক্লাস্টারে অ্যাসাইন করা হয়ে গেলে, প্রতিটি ক্লাস্টারের জন্য নতুন সেন্ট্রয়েড গণনা করা হয়। এই নতুন সেন্ট্রয়েড হলো সেই ক্লাস্টারের অন্তর্ভুক্ত সমস্ত ডেটা পয়েন্টের গড় অবস্থান। এটি নিশ্চিত করে যে সেন্ট্রয়েডটি তার ক্লাস্টারের ডেটা পয়েন্টগুলির “কেন্দ্রে” রয়েছে।

এই পুনরাবৃত্তিমূলক প্রক্রিয়া (দূরত্ব গণনা, অ্যাসাইনমেন্ট, সেন্ট্রয়েড পুনর্গঠন) চলতে থাকে যতক্ষণ না ক্লাস্টার অ্যাসাইনমেন্ট বা সেন্ট্রয়েডগুলি আর উল্লেখযোগ্যভাবে পরিবর্তিত না হয়, যা নির্দেশ করে যে অ্যালগরিদম একটি স্থিতিশীল অবস্থানে পৌঁছেছে।
 

K-Means ক্লাস্টারিং এর গুরুত্ব

K-Means ক্লাস্টারিং বিভিন্ন ক্ষেত্রে অত্যন্ত গুরুত্বপূর্ণ। এর কিছু মূল গুরুত্ব নিচে উল্লেখ করা হলো:

  • প্যাটার্ন আবিষ্কার: এটি ডেটাসেটের মধ্যে লুকানো প্যাটার্ন এবং সম্পর্ক আবিষ্কার করতে সাহায্য করে, যা খালি চোখে দেখা কঠিন।
  • বাজার বিভাজন (Market Segmentation): গ্রাহকদের আচরণ, পছন্দ বা জনসংখ্যার ভিত্তিতে বিভিন্ন গ্রুপে বিভক্ত করতে ব্যবহৃত হয়, যা ব্যবসার জন্য লক্ষ্যযুক্ত বিপণন কৌশল তৈরি করতে সহায়ক।
  • চিত্র প্রক্রিয়াকরণ (Image Processing): চিত্র বিভাজন (image segmentation) এবং রঙ পরিমাণ নির্ধারণ (color quantization) এর মতো কাজে এটি ব্যবহৃত হয়।
  • ডকুমেন্ট ক্লাস্টারিং: একই ধরনের বিষয়বস্তু সহ ডকুমেন্টগুলিকে একসাথে গ্রুপ করতে ব্যবহৃত হয়, যা তথ্য পুনরুদ্ধার এবং সংগঠনকে সহজ করে তোলে।
  • আউটলায়ার সনাক্তকরণ (Outlier Detection): যে ডেটা পয়েন্টগুলি কোনো ক্লাস্টারের অংশ নয় বা ক্লাস্টারের প্রান্তের দিকে থাকে, সেগুলোকে আউটলায়ার হিসেবে চিহ্নিত করতে সাহায্য করে।

 

ক্লাস্টারের সংখ্যা নির্বাচন (Choosing the Number of Clusters – K)

K-Means ক্লাস্টারিং এ সবচেয়ে গুরুত্বপূর্ণ সিদ্ধান্তগুলির মধ্যে একটি হলো K এর সঠিক মান নির্বাচন করা। K-এর সঠিক মান না হলে ক্লাস্টারিং এর ফলাফল অর্থপূর্ণ নাও হতে পারে। K-এর মান নির্ধারণের জন্য কয়েকটি জনপ্রিয় পদ্ধতি রয়েছে:

  1. এলবো মেথড (Elbow Method): এটি K এর মান নির্ধারণের জন্য একটি বহুল ব্যবহৃত পদ্ধতি। এই পদ্ধতিতে, বিভিন্ন K-এর মানের জন্য WCSS (Within-Cluster Sum of Squares) গণনা করা হয় এবং একটি গ্রাফে প্লট করা হয়। WCSS হলো প্রতিটি ক্লাস্টারের ডেটা পয়েন্ট এবং তার সেন্ট্রয়েডের মধ্যে দূরত্বের বর্গের সমষ্টি। গ্রাফে, যেখানে WCSS এর হ্রাস হঠাৎ করে ধীর হয়ে যায় (একটি “এলবো” বা কনুই এর মতো আকৃতি তৈরি হয়), সেই বিন্দুতে K-এর মানটি সাধারণত উপযুক্ত হিসেবে বিবেচিত হয়।
    উদাহরণস্বরূপ, যদি আপনি K=1 থেকে K=10 পর্যন্ত WCSS গণনা করে প্লট করেন এবং দেখেন যে K=3 এর পর WCSS এর পতন অনেক কমে গেছে, তাহলে K=3 একটি ভালো পছন্দ হতে পারে।
  2. সিলুয়েট মেথড (Silhouette Method): এই পদ্ধতিটি প্রতিটি ডেটা পয়েন্টের জন্য একটি সিলুয়েট স্কোর গণনা করে, যা নির্দেশ করে যে ডেটা পয়েন্টটি তার নিজের ক্লাস্টারের সাথে কতটা ভালোভাবে মানিয়ে যায় এবং প্রতিবেশী ক্লাস্টার থেকে কতটা আলাদা। সিলুয়েট স্কোর -1 থেকে +1 এর মধ্যে থাকে। +1 এর কাছাকাছি স্কোর নির্দেশ করে যে ডেটা পয়েন্টটি তার নিজের ক্লাস্টারে ভালোভাবে ক্লাস্টার করা হয়েছে এবং প্রতিবেশী ক্লাস্টার থেকে দূরে। বিভিন্ন K-এর জন্য গড় সিলুয়েট স্কোর গণনা করা হয় এবং সর্বোচ্চ গড় সিলুয়েট স্কোরযুক্ত K এর মানটি বেছে নেওয়া হয়।
  3. ডোমেন জ্ঞান (Domain Knowledge): অনেক সময়, সমস্যা এবং ডেটা সম্পর্কে আপনার পূর্বের জ্ঞান বা অভিজ্ঞতা K এর মান নির্ধারণে সহায়ক হতে পারে। উদাহরণস্বরূপ, যদি আপনি জানেন যে আপনার গ্রাহকদের ৩টি প্রধান সেগমেন্ট রয়েছে, তাহলে আপনি K=3 নির্বাচন করতে পারেন।

 

এই সীমাবদ্ধতাগুলো সত্ত্বেও, K-Means তার সরলতা এবং কার্যকারিতার জন্য ডেটা মাইনিং এবং মেশিন লার্নিংয়ের জগতে একটি শক্তিশালী হাতিয়ার হিসেবে রয়ে গেছে। এটি প্রায়শই আরও জটিল অ্যালগরিদমগুলির জন্য একটি প্রারম্ভিক বিন্দু হিসাবে ব্যবহৃত হয় বা বড় ডেটাসেটগুলি দ্রুত শ্রেণীবদ্ধ করার জন্য একটি প্রাথমিক ধাপ হিসাবে কাজ করে। ডেটা থেকে অর্থপূর্ণ অন্তর্দৃষ্টি বের করার জন্য K-Means একটি অপরিহার্য কৌশল।

Leave a Comment