ডাটা ক্লাস্টারিং এবং পাইথন

যে কোনো বিষয়ে গবেষণা করতে চাইলে বা তার কার্যকারিতা জানতে আমাদের প্রয়োজন ডাটা। প্রতিটি ঘটনা বা কাজই একেকটি ডাটা হিসেবে কাজ করে। অর্থাৎ, একটি বিষয়ে আমরা যত বেশি ডাটা সংগ্রহ করতে পারি, সে বিষয়ে ধারণা স্পষ্ট হবার সম্ভাবনা তত বেশি। কিন্তু এর জন্য সঠিকভাবে ডাটা প্রসেস করতে পারা জরুরি। এ কাজে আপনাকে ডাটা ক্লাস্টারিং (Data Clustering) বা ডাটা বিন্যস্ত করার উপায় জানতে হবে, যা ডাটা সায়েন্সের (Data Science) একটি অংশ। এ সম্পর্কে প্রাথমিক ধারণা নিয়ে ফেলুন আজকের লেখায়।

ডাটা ক্লাস্টারিং কী?

ডাটা সায়েন্সের লার্নিং ফেইজে সাধারণত ডাটাগুলোকে দুই ভাগে ভাগ করা হয়। যেমন, সুপারভাইজড (supervised) ও আনসুপারভাইজড (unsupervised) ডাটা। সুপারভাইজড ডাটাগুলো সাধারণত তাদের বৈশিষ্ট্য অনুযায়ী বিভিন্ন শ্রেণিতে ভাগ করা থাকে। অন্যদিকে আনসুপারভাইজড ডাটাগুলো কোনো শ্রেণিতে ভাগ করা থাকে না। সমস্ত ডাটা একত্রে সাজানো থাকে। এ আনসুপারভাইজড ডাটাগুলোকে বিভিন্ন শ্রেণিতে ভাগ করার বিষয়টিকে মূলত ডাটা ক্লাস্টারিং বলা হয়।

ধরা যাক, কোনো একটি স্কুলে তিনটি শ্রেণির ছাত্র রয়েছে। এখানে প্রত্যেক শ্রেণির ছাত্ররা মিলে একেকটি ক্লাস্টার গঠন করবে। এভাবে মোট তিনটি ক্লাস্টার তৈরি হবে। প্রতিটি শ্রেণির ছাত্রদের পাঠ্যবই আলাদা; আবার একই শ্রেণির ছাত্ররা একই বই পড়ে থাকে। ছাত্রদেরকে তিনটি ক্লাস্টারে বিভক্ত করে আমরা তিনটি শ্রেণিকে তিন ধরনের বই পৌঁছিয়ে দিতে পারবো। ডাটা ক্লাস্টারিং এভাবে একই ধরনের ডাটাকে একত্রিত করতে আর ভিন্নধর্মী ডাটাকে পরস্পর থেকে আলাদা করতে কাজে লাগে।

ডাটা ক্লাস্টারিং কোথায় ব্যবহার করা হয়?

ডাটা রিডাকশন

ডাটাকে সংক্ষিপ্ত করার জন্য, বিভিন্ন শ্রেণিতে বিভক্ত করার জন্য, প্রিপ্রসেসিং এবং কম্প্রেশনের কাজে ডাটা ক্লাস্টারিং ব্যবহৃত হয়। এক কথায়, ডাটার একটি স্তূপ থেকে গুরুত্বপূর্ণ তথ্যকে তার বৈশিষ্ট্য অনুযায়ী উপস্থাপনের জন্য ডাটা ক্লাস্টারিং প্রয়োজন।

হাইপোথিসিস দেয়া

সাধারণত কোনো একটি বিষয়ে হাইপোথিসিস দেবার আগে সে বিষয়ের উপর ডাটা সংগ্রহ করা হয়। সংগৃহীত ডাটাকে পর্যবেক্ষণের মাধ্যমে একটি হাইপোথিসিস বানিয়ে তার গ্রহণযোগ্যতা যাচাইয়ের জন্য পরীক্ষা করা হয়। এ কাজগুলো করার সময় ডাটা ক্লাস্টারিংয়ের প্রয়োজন।

সম্ভাব্যতা নির্ণয়

ডাটাগুলোকে বিভিন্ন শ্রেণিতে বিভক্ত করে তার বৈশিষ্ট্য পর্যবেক্ষণ করে বলে দেয়া যায় নির্দিষ্ট শর্ত সাপেক্ষে কোনো একটি ঘটনা ঘটার সম্ভাব্যতা কতটুকু।

ব্যতিক্রমধর্মী ডাটার অস্তিত্ত্ব নির্ণয়

অনেক সময় ডাটাসেটে ভুল করে এমন ডাটা চলে আসে যা ডাটাসেটে থাকার কথা না। এমন ডাটাকে কোন ক্লাস্টারেই বিভক্ত করা যায় না এবং তা ব্যতিক্রমী ডাটা হিসেবে ক্লাস্টারিংয়ের সময় ধরা পড়ে।

জীববিজ্ঞান

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

তথ্য সংগ্রহ

বিভিন্ন শ্রেণিতে ডাটা ভাগ করা থাকলে কাঙ্ক্ষিত তথ্যকে খুব সহজে খুঁজে পাওয়া যায়।

ভূমি শনাক্তকরণ

একই ধরণের ভূমিগুলোকে শনাক্তকরণের জন্য ব্যবহৃত হয়।

মার্কেটিং

প্রোডাক্ট বা সার্ভিসের জন্য কাস্টমার খুঁজে বের করতে ক্লাস্টারিং ব্যবহৃত হয়। যেমন, কোন প্রোডাক্ট বা সার্ভিসের চাহিদা কোন শ্রেণির কাস্টমারদের কাছে বেশি, তা বের করতে পারলে সহজে সেলস বাড়ানো যায়। মার্কেটিংয়ের ভাষায় একে কাস্টমার সেগমেন্টেশন (Customer Segmentation) বলা হয়।

ডাটা ক্লাস্টারিং ও পাইথন

অবিন্যস্ত ডাটাগুলোকে বিভিন্ন শ্রেণিতে ভাগ করে বেশ কয়েকটি আলাদা ক্লাস্টার বানাবার বেশ কিছু পদ্ধতি রয়েছে। এ পদ্ধতিগুলোর উপর ভিত্তি করে তৈরি হয়েছে বিভিন্ন অ্যালগরিদম, যা খুব সহজে পাইথন প্রোগ্রামিং দিয়ে ইমপ্লিমেন্ট করা যায়। এ কারণে ডাটা ক্লাস্টারিংয়ের টুল হিসেবে পাইথনই সবচেয়ে বেশি জনপ্রিয়। অন্য আর কোনো ল্যাঙ্গুয়েজে একই সাথে এত বিল্ট-ইন লাইব্রেরি এবং স্ক্র্যাচ থেকে অ্যালগরিদম ইমপ্লিমেন্ট করে বাস্তব যে কোনো ডাটার উপর তা চালানোর সুযোগ সীমিত। অথচ পাইথনে ফাংশন কল করলেই বহু ক্ষেত্রে এ কাজ করা সম্ভব।

এ লেখায় প্রতিটি অ্যালগরিদমের প্রাথমিক কিছু ব্যাপার তুলে ধরা হয়েছে যাতে পাইথন ব্যবহার করে ডাটাসেটে বিভিন্ন অ্যালগরিদম অ্যাপ্লাই করে তাদের ফলাফলগুলো খুব সহজে তুলনা করা যায়।
পাইথন দিয়ে ডাটা ক্লাস্টারিং করার উপায় শেখার জন্য বহুব্রীহির ‘Python for Beginners’ কোর্সটি করতে পারেন।

ডাটা ক্লাস্টারিংয়ের সময় যে বিষয়গুলোতে খেয়াল রাখবেন

ডাটার কর্মপরিধি

কিছু স্যাম্পল ডাটার পরিবর্তে সমস্ত ডাটা নিয়ে ক্লাস্টারিং করুন, বিশেষ করে ওয়েব ডাটার ক্ষেত্রে এটি প্রযোজ্য।

ডাটার অ্যাট্রিবিউট

বিভিন্ন ধরনের অ্যাট্রিবিউট – যেমন, নিউম্যারিকাল (numerical), বাইন্যারি (binary), ক্যাটাগরিক্যাল (catagorical), অর্ডিন্যাল (ordibal) – এবং জটিল ডাটা টাইপ – যেমন, গ্রাফ, সিকোয়েন্স, ইমেজ এবং ডকুমেন্ট ইত্যাদি – নিয়ে কাজ করার ক্ষমতা ক্লাস্টারিংয়ের সময় যাচাই করা উচিত।

বিদ্যমান শর্ত

ইউজার অনেক সময় ইনপুট ডাটার উপর বিভিন্ন শর্ত দিয়ে থাকেন। এক্ষেত্রে ইনপুট ডাটার উপর আরোপিত শর্তগুলো বিবেচনা করে ক্লাস্টারিং করা প্রয়োজন।

নয়েজ (Noise) এবং আউটলায়ার (Outlier) ডিটেকশন

নয়েজের কারণে ক্লাস্টার বিভক্ত বা মার্জ হয়ে গেলে ফলাফল ত্রুটিপূর্ণ হতে পারে। এছাড়া, আউটলায়ারের উপস্থিতি ডাটা ক্লাস্টারিংকে কঠিন করে তোলে। তাই এই বিষয়গুলোর দিকে লক্ষ রাখা গুরুত্বপূর্ণ।

প্যারামিটার

ক্লাস্টারিং অ্যালগরিদমগুলো সাধারণত প্যারামিটারের মানের প্রতি খুব সেনসিটিভ। তাই এগুলো সঠিকভাবে টিউন করা কষ্টকর। তবে অ্যাপ্লিকেশন ডোমেইনের সাথে প্যারামিটারগুলো সম্পর্কিত না।

ব্যবহারযোগ্যতা

কোনো নির্দিষ্ট কাজের জন্য এর ব্যবহারযোগ্যতা নিয়ে পর্যালোচনা করতে হবে।

আরও পড়ুনঃ পাইথনের খুঁটিনাটি ও ক্যারিয়ার গড়ার প্রয়াস

ডাটা ক্লাস্টারিংয়ের কিছু চ্যালেঞ্জ

  • বিভিন্ন আকৃতির ক্লাস্টার খুঁজে বের করা
  • বিভিন্ন নয়েজ থাকা ডাটাগুলোকে নিয়ন্ত্রণ করা
  • বহু সংখ্যক ডাইমেনশনের ডাটা নিয়ে কাজ করা। ডাটা অনেক বিচ্ছিন্ন এবং বেশি সংখ্যক অ্যাট্রিবিউটসম্পন্ন হতে পারে
  • ডাটাগুলোকে বিভিন্ন ক্লাস্টারে বিভক্ত করার ক্রাইটেরিয়া সম্পর্কে জানা
  • একই ক্লাস্টারের অন্তর্গত ডাটার মধ্যে সাদৃশ্য নির্ণয় করা
  • ক্লাস্টারিং স্পেস সম্পর্কে লক্ষ রাখা

ডাটা ক্লাস্টারিংয়ের ধাপ

  • যে উদ্দেশ্য নিয়ে কাজটি করতে যাচ্ছেন, সে অনুযায়ী ফিচার সিলেক্ট করা
  • দুইটি ফিচার ভেক্টরের মধ্যকার সাদৃশ্য নির্ণয় করা
  • ক্লাস্টারিং ক্রাইটেরিয়াকে কস্ট ফাংশন (cost function) দিয়ে প্রকাশ করা
  • ক্লাস্টারিং অ্যালগরিদম বাছাই করা
  • ফলাফলের ভ্যালিডেশন নির্ণয় করা
  • অ্যাপ্লিকেশনের সাথে রেজাল্টকে ইন্টিগ্রেট করা

ভালো ক্লাস্টারিং বলতে কী বোঝায়?

ভালো ক্লাস্টারিং মেথডের মাধ্যমে ভালো মানের ক্লাস্টার তৈরি করা সম্ভব। এর মধ্যে নিচের বৈশিষ্ট্যগুলো থাকবে:

  • একই ক্লাস্টারের অন্তর্গত ডাটাগুলোর মধ্যে সাদৃশ্য বেশি থাকে। আবার দুইটি আলাদা ক্লাস্টারের ডাটার মধ্যে সুস্পষ্ট বৈসাদৃশ্য বিদ্যমান।
  • ক্লাস্টারিংয়ের মাধ্যমে লুকানো কোনো প্যটার্ন ডাটাসেটের মধ্যে থাকলে তা নির্ণয় করতে পারবে।

ডাটা ক্লাস্টারিংয়ের কিছু অ্যাপ্রোচ

পার্টিশনিং(Partitioning) অ্যাপ্রোচ

বিভিন্ন পার্টিশন গঠন করে তাদেরকে বিভিন্ন ক্রাইটেরিয়া দ্বারা মূল্যায়ন করা হয়, যার মাধ্যমে ‘sum of square errors’ কমানো যাবে।
মেথডগুলোর উদাহরণঃ K-means, K-medoids, CLARANS

হায়ারার্কিক্যাল (Hierarchical) অ্যাপ্রোচ

কিছু ক্রাইটেরিয়ার ভিত্তিতে ডাটাসেটের হায়ারার্কিকাল ডিকম্পোজিশন করা হয়।
মেথডগুলোর উদাহরণঃ Diana, Agnes, BIRCH, CHAMELEON

ডেনসিটি বেইজড (Density based) অ্যাপ্রোচ

কানেকটিভিটি এবং ডেনসিটি ফাংশনের উপর তৈরি করা।
মেথডগুলোর উদাহরণঃ DBSCAN, OPTICS, DenClue

গ্রিড বেইজড (Grid based) অ্যাপ্রোচ

মাল্টিপল লেভেল গ্র্যান্যুলারিটি স্ট্রাকচারের উপর তৈরি করা।
মেথডগুলোর উদাহরণঃ STING, WaveCluster, CLIQUE

ফ্রিকোয়েন্ট প্যাটার্ন বেইজড (Frequent Pattern based) অ্যাপ্রোচ

বিভিন্ন ক্লাস্টারের ফ্রিকোয়েন্ট প্যাটার্নের উপর তৈরি করা।
মেথডগুলোর উদাহরণঃ p-cluster

ইউজার গাইডেড (User guided) অ্যাপ্রোচ

ইউজারের নির্ধারণ করে দেয়া বা অ্যাপ্লিকেশনের শর্তের ভিত্তিতে ক্লাস্টারিং।
মেথডগুলোর উদাহরণঃ COD

ডাটা ক্লাস্টারিংয়ের অ্যাপ্রোচ: দুইটি উদাহরণ

পার্টিশনিং অ্যাপ্রোচ

যদি ডাটাসেট D, অব্জেক্ট সংখ্যা n, এবং ক্লাস্টারের সংখ্যা K হয় তাহলে এ মেথড অনুযায়ী অবজেক্টগুলোকে K সংখ্যক পার্টিশনে ভাগ করা হবে। প্রত্যেকটি পার্টিশন একটি ক্লাস্টারকে রিপ্রেজেন্ট করে। এটি একটি অব্জেক্টিভ ক্রাইটেরিয়াকে সন্তুষ্ট করে বা ‘sum of squared distances’-কে মিনিমাম করে।
সূত্রঃ

এখানে E হলো ‘sum of square error’
dist(x,y) হলো দুইটি ইউক্লিডিয়ান পয়েন্ট x এবং y-এর দূরত্ব , p হচ্ছে একটি পয়েন্ট, যেখানে p, C সেটের অন্তর্গত। p এবং C মাল্টিডাইমেনশনাল।
পার্টিশনিং অ্যাপ্রোচের দুইটি মেথড k-means এবং K-medoid সম্পর্কে নিচে আলোচনা করা হলো।

কে-মিন্স (K-means)

কে-মিন্স অ্যালগরিদমকে নিচের চারটি ধাপে বাস্তবায়ন করা হয়ঃ

  • অব্জেক্টকে k সংখ্যক নন এম্পটি সাবসেটে পার্টিশন করা হয়।
  • প্রত্যেক পার্টিশনের সেন্ট্রয়েড বা মধ্যবিন্দু বের করা হয়।
  • তারপর প্রত্যেক অব্জেক্টকে তার কাছের ক্লাস্টারের অন্তর্ভুক্ত করা হয়।

কে-মিন্স (K-means) অ্যালগরিদমের ইনপুট

K: ক্লাস্টারের সংখ্যা

D: একটি ডাটাসেট যেখানে n সংখ্যক এলিমেন্ট বিদ্যমান

কে-মিন্স (K-means) অ্যালগরিদমের আউটপুট

K সংখ্যক ক্লাস্টার

কে-মিন্স (K-means) অ্যালগরিদমের সুবিধা

  • দক্ষভাবে ক্লাস্টারিং করতে পারে

কে-মিন্স (K-means) অ্যালগরিদমের অসুবিধা

  • ক্লাস্টার সংখ্যা দিয়ে দিতে হয়
  • আউটলায়ার এবং নয়েজের প্রতি সেনসিটিভ
  • নন-কনভেক্স আকৃতির ক্লাস্টার খুঁজে বের করার জন্য উপযুক্ত নয়

পাইথনে এ অ্যালগরিদমটি ব্যবহারের করার জন্য বিল্ট-ইন লাইব্রেরি রয়েছে। scikit-learn লাইব্রেরির অন্তর্ভুক্ত KMeans মডিউল ইমপোর্ট করে আমরা সহজে আমাদের ডাটাকে ক্লাস্টার করতে পারি। এক্ষেত্রে প্যারামিটার হিসেবে ক্লাস্টারের সংখ্যা বলে দিতে হবে যদি তা ডিফল্ট ভ্যালুর সমান না হয়।

কে-মিডয়েড (K-medoid)

এক্ষেত্রে গড় ভ্যালু না নিয়ে প্রত্যেকটা ক্লাস্টারের medoid বা মধ্যবর্তী মানকে নেয়া হয়। প্রথমে ক্লাস্টারগুলোর মধ্যবর্তী মানকে ইচ্ছামতো নেয়া হয়। তারপর প্রত্যেক ইটারেশনে মধ্যবর্তী মানকে পরিবর্তন করা হয় ও পরীক্ষা করা হয় এতে করে ভালো ফলাফল আসছে কিনা। সকল ধরনের রিপ্লেসমেন্ট পরীক্ষা করে দেখা হয়। এটি একটি ইটারেটিভ ও গ্রিডি মেথড।
সূত্রঃ

এখানে k হলো sum of absolute error, p হলো ডাটাসেটের অব্জেক্ট , O হলো C-এর রিপ্রেজেন্টিটিভ।

কে-মিডয়েড (K-medoid) অ্যালগরিদমের সুবিধা

  • সহজেই প্রয়োগ করা যায়
  • নির্দিষ্ট সংখ্যক ধাপেই কনভার্জ করে

কে-মিডয়েড (K-medoid) অ্যালগরিদমের অসুবিধা

  • ছোট ডাটাসেটের জন্য ভালো কাজ করে। কিন্তু বড় ডাটাসেটের জন্য গ্রহণযোগ্য নয়
  • নয়েজ আর আউটলায়ারের প্রতি অতিরিক্ত সেনসিটিভ

এ অ্যালগরিদম ব্যবহার করতে sklearn_extra.cluster থেকে KMedoids ইমপোর্ট করতে হবে। প্যারামিটার হিসেবে ক্লাস্টার সংখ্যা বলে দিতে হবে।

হায়ারার্কিক্যাল অ্যাপ্রোচ

এক্ষেত্রে ডাটাকে বিভিন্ন গ্রুপে বিভক্ত করা হয় গাছের মতো। Agne, Birch এবং DBSCAN নিয়ে আলোচনা করা হলোঃ

Agne

  • এক্ষেত্রে সিংগেল-লিংক মেথড এবং ডিসসিমিলারিটি ম্যাট্রিক্স (dissimilarity matrix) ব্যবহার করা হয়।
  • যেসব নোডের মধ্যে সবচেয়ে কম বৈসাদৃশ্য বিদ্যমান, সেগুলোকে মার্জ করা হয়।
  • এভাবে নন-ডিসেন্ডিং ফ্যাশনে চলতে থাকে।
  • এক সময় সকল নোড একই ক্লাস্টারের অন্তর্গত হয়।
Agne অ্যালগরিদমের সুবিধা
  • কোন পূর্ব তথ্য দিতে হয় না ডাটার বাইরে
  • সহজেই ইমপ্লিমেন্ট করা যায়
  • তুলনামূলক ভাল ফলাফল দেয়
Agne অ্যালগরিদমের অসুবিধা
  • পূর্বে যা করা হয়েছে, তাকে undo করতে পারে না।
  • টাইম কমপ্লেক্সিটি ন্যূনতম O(n2 log n) প্রয়োজন।
  • নয়েজ এবং আউটলায়ারের প্রতি সেনসিটিভ।

পাইথনের sklearn.cluster থেকে AgglomerativeClustering ইমপোর্ট করে ডাটাসেটের উপর এ ক্লাস্টারিং মেথডটি সহজেই চালানো যায়।

বার্চ (BIRCH)

  • মেথডটি ইটারেটিভ।
  • এটি ইনক্রিমেন্টালি একটি ক্লাস্টারিং ফিচার ট্রি তৈরি করে এবং মাল্টিফেজ (multi-phase) ক্লাস্টারিংয়ের জন্য একটি হায়ারার্কিক্যাল ডাটা স্ট্রাকচার গঠন করে।
  • প্রথম ফেজে পুরো ডাটাবেজ স্ক্যান করে একটি ইন-মেমোরি ট্রি তৈরি করে।
  • দ্বিতীয় ফেজে আরবিট্রারি ক্লাস্টারিং অ্যালগরিদম অ্যাপ্লাই করে ট্রিয়ের লিফ নোডগুলোকে ক্লাস্টার করে।
বার্চ (BIRCH) অ্যালগরিদমের সুবিধা
  • বার্চ ইনক্রিমেন্টালি এবং ডায়নামিক্যালি মাল্টি ডায়মেনশনাল ডাটা পয়েন্টগুলোকে ক্লাস্টার করতে পারে।
  • ক্লাস্টারিংয়ের সিদ্ধান্তগুলো সমগ্র ডাটাবেজকে স্ক্যান না করেই নিতে পারে।
  • শুরুতেই সম্পূর্ণ ডাটাসেটকে প্রয়োজন হয় না।
বার্চ (BIRCH) অ্যালগরিদমের অসুবিধা
  • শুধুমাত্র নিউমেরিক ডাটা নিয়ে কাজ করতে পারে।

এ অ্যালগরিদমটিও sklearn.cluster হতে Birch ইমপোর্ট করে প্রয়োগ করা যায়। এক্ষেত্রে প্যারামিটার হিসেবে branching_factor (সাব-ট্রি এর সংখ্যা), threshold (সাব-ক্লাস্টারের ব্যাসার্ধ) এবং ক্লাস্টার সংখ্যা বলে দিতে হয়।
উল্লিখিত প্রত্যেকটি অ্যালগরিদমই পাইথনের সাহায্যে বিল্ট-ইন লাইব্রেরি ব্যবহার করে ইমপ্লিমেন্ট করা সম্ভব। সেক্ষেত্রে আপনাকে শুধুমাত্র ডাটাসেট এবং প্যারামিটারগুলোর দিকে খেয়াল রাখতে হবে। এছাড়া একেবারে স্ক্র্যাচ থেকে অ্যালগরিদম তৈরির জন্য প্রয়োজনীয় সব কিছুই পাইথনে পাবেন।

শেয়ার করুন

1 thought on “ডাটা ক্লাস্টারিং এবং পাইথন”

Leave a Comment