# ক্লাস্টারিং এর পরিচিতি ক্লাস্টারিং হল [Unsupervised Learning](https://wikipedia.org/wiki/Unsupervised_learning) এর একটি প্রকার যা ধরে নেয় যে একটি ডেটাসেট লেবেলবিহীন বা তার ইনপুটগুলি পূর্ব নির্ধারিত আউটপুটগুলির সাথে মিলানো হয়নি। এটা বিভিন্ন অ্যালগরিদম ব্যবহার করে লেবেলবিহীন ডেটার মধ্য থেকে বিশ্লেষণ করে এবং ডেটার মধ্যে থাকা প্যাটার্ন অনুসারে গ্রুপ তৈরি করে। [![No One Like You by PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You by PSquare") > 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিওর জন্য। আপনি যখন মেশিন লার্নিং এর ক্লাস্টারিং নিয়ে অধ্যয়ন করবেন, তখন কিছু নাইজেরিয়ান ডান্স হল ট্র্যাক উপভোগ করুন - এটি PSquare এর 2014 সালের অন্যতম উচ্চ রেটিং সঙ্গীত। ## [পূর্ব-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) ### পরিচিতি [ক্লাস্টারিং](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) ডেটা অনুসন্ধানের জন্য খুবই উপকারী। চলুন দেখি এটা কীভাবে নাইজেরিয়ান শ্রোতাদের সঙ্গীত ভোগের ধরণ এবং প্যাটার্ন আবৃত্তি করতে সাহায্য করতে পারে। ✅ ক্লাস্টারিং এর ব্যবহার নিয়ে এক মিনিট ভাবুন। বাস্তবে, ক্লাস্টারিং ঘটে যখন আপনার কাছে একটি ধরণের জামাকাপড় থাকে এবং আপনাকে পরিবারের সদস্যদের কাপড় আলাদা করতে হয় 🧦👕👖🩲। ডেটা সায়েন্সে, ক্লাস্টারিং হয় যখন ব্যবহারকারীর পছন্দ বিশ্লেষণ করা হয়, বা কোন লেবেলবিহীন ডেটাসেটের বৈশিষ্ট্য নির্ধারণ করা হয়। ক্লাস্টারিং, একভাবে, বিশৃঙ্খলাকে সুসংগঠিত করতে সাহায্য করে, যেমন একটি মোজা ড্রয়ার। [![Introduction to ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduction to Clustering") > 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিওর জন্য: MIT এর জন গট্টাগ ক্লাস্টারিং পরিচয় করিয়ে দিচ্ছেন একটি পেশাগত পরিবেশে, ক্লাস্টারিং ব্যবহার করা যেতে পারে বাজার বিভাজন নির্ধারণ করতে, যেমন কোন বয়স গোষ্ঠী কোন পণ্য কিনে, ইত্যাদি। আরেকটি ব্যবহার হতে পারে অ্যানোমালি ডিটেকশন, যেমন ক্রেডিট কার্ড লেনদেনের ডেটাসেটে ছলনার সনাক্তকরণ। অথবা আপনি ক্লাস্টারিং ব্যবহার করতে পারেন একটি মেডিকেল স্ক্যানের ব্যাচ থেকে টিউমার চিহ্নিত করতে। ✅ এক মিনিট ভাবুন আপনি কীভাবে ক্লাস্টারিং ‘প্রকৃত জীবনে’ টাকার, ই-কমার্স বা ব্যবসায়িক ক্ষেত্রে দেখেছেন। > 🎓 আকর্ষণীয়ভাবে, ক্লাস্টার বিশ্লেষণ ১৯৩০-এর দশকে মানববিজ্ঞান ও মনোবিজ্ঞানের ক্ষেত্রে এসেছে। আপনি কী ভাবতে পারেন এটা কিভাবে ব্যবহৃত হতে পারে? অন্যদিকে, আপনি এই পদ্ধতি ব্যবহার করতে পারেন সার্চ ফলাফল গুচ্ছবদ্ধ করতে - যেমন শপিং লিঙ্ক, ছবি, বা রিভিউ দ্বারা আলাদা করা। ক্লাস্টারিং বিশেষত কাজের যখন আপনার বড় একটি ডেটাসেট থাকে যা আপনি ছোট করতে চান এবং আরও সূক্ষ্ম বিশ্লেষণ করতে চান, তাই এই পদ্ধতি অন্যান্য মডেল তৈরি হওয়ার আগে ডেটা সম্পর্কে শিখতে সাহায্য করে। ✅ আপনার ডেটা ক্লাস্টারে সংগঠিত হলে, আপনি এটি একটি ক্লাস্টার আইডি প্রদান করেন, এবং এই পদ্ধতি একটি ডেটাসেটের গোপনীয়তা সংরক্ষণে সাহায্যী হতে পারে; আপনি কোন ডেটা পয়েন্টকে তার ক্লাস্টার আইডি দ্বারা উল্লেখ করতে পারেন যা বেশি তথ্যপ্রদানকারী শনাক্তযোগ্য ডেটার বদলে। আপনি কি অন্য কোনো কারণ ভাবতে পারেন কেন আপনি ক্লাস্টার আইডি ব্যবহার করবেন ক্লাস্টারের অন্যান্য উপাদানের বদলে? এই [Learn module](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) এ ক্লাস্টারিং টেকনিকের গভীর জ্ঞান অর্জন করুন। ## ক্লাস্টারিং শুরু [Scikit-learn অনেক পদ্ধতি](https://scikit-learn.org/stable/modules/clustering.html) প্রদান করে ক্লাস্টার র জন্য। আপনি যেটি নির্বাচন করবেন তা আপনার ব্যবহার অনুযায়ী নির্ভর করবে। ডকুমেন্টেশন অনুযায়ী, প্রতিটি পদ্ধতির বিভিন্ন সুবিধা আছে। এখানে সিম্প্লিফায়েড টেবিল দেওয়া হলো Scikit-learn দ্বারা সমর্থিত পদ্ধতিগুলির এবং তাদের যথাযথ ব্যবহারের ক্ষেত্র: | পদ্ধতির নাম | ব্যবহারের ক্ষেত্র | | :--------------------------- | :--------------------------------------------------------------------- | | K-Means | সাধারণ উদ্দেশ্য, inductive | | Affinity propagation | অনেক, অসম ক্লাস্টার, inductive | | Mean-shift | অনেক, অসম ক্লাস্টার, inductive | | Spectral clustering | কম, সমান ক্লাস্টার, transductive | | Ward hierarchical clustering | অনেক, সীমাবদ্ধ ক্লাস্টার, transductive | | Agglomerative clustering | অনেক, সীমাবদ্ধ, non Euclidean দূরত্বের ক্ষেত্রে, transductive | | DBSCAN | non-flat জ্যামিতি, অসম ক্লাস্টার, transductive | | OPTICS | non-flat জ্যামিতি, ভিন্ন ঘনত্ব সহ অসম ক্লাস্টার, transductive | | Gaussian mixtures | সমতল জ্যামিতি, inductive | | BIRCH | বড় ডেটাসেট আউটলাইয়ার সহ, inductive | > 🎓 আমরা ক্লাস্টার কিভাবে তৈরি করি তার অনেক কিছু নির্ভর করে আমরা ডেটা পয়েন্টগুলি কিভাবে গ্রুপে সংগ্রহ করি তার উপর। কিছু শব্দভান্ডার দেখে নিই: > > 🎓 ['Transductive' বনাম 'inductive'](https://wikipedia.org/wiki/Transduction_(machine_learning)) > > Transductive inference পর্যবেক্ষণকৃত প্রশিক্ষণ কেস থেকে উদ্ভূত যা নির্দিষ্ট টেস্ট কেসের সাথে মানানসই হয়। Inductive inference হলো প্রশিক্ষণ কেস থেকে উদ্ভূত সাধারণ নিয়ম যা পরে টেস্ট কেসে প্রয়োগ করা হয়। > > উদাহরণ: ধরা যাক আপনার ডেটাসেট আংশিকভাবে লেবেল দেওয়া। কিছু 'রেকর্ড', কিছু 'সিডি', আর কিছু ফাঁকা। আপনার কাজ ফাঁকাগুলো লেবেল দেওয়া। inductive পদ্ধতি বেছে নিলে আপনি একটি মডেল প্রশিক্ষণ দেবেন 'রেকর্ড' ও 'সিডি' খুঁজে পেতে এবং লেবেল প্রয়োগ করতে। এই পদ্ধতি অসুবিধা পাবে প্রকৃত 'ক্যাসেট' সনাক্ত করতে। অপরদিকে, transductive পদ্ধতি এই অজানা ডেটাকে আরও কার্যকরভাবে গোষ্ঠীভুক্ত করে এবং গোষ্ঠীতে লেবেল প্রয়োগ করে। এখানে ক্লাস্টারগুলি হতে পারে 'বৃত্তাকৃত সঙ্গীতজিনিস' এবং 'বর্গাকৃত সঙ্গীতজিনিস'। > > 🎓 ['Non-flat' বনাম 'flat' জ্যামিতি](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) > > গাণিতিক পরিভাষা থেকে উদ্ভূত, non-flat বনাম flat জ্যামিতি বোঝায় পয়েন্টগুলোর মধ্যবর্তী দূরত্ব পরিমাপ ফ্ল্যাট ([Euclidean](https://wikipedia.org/wiki/Euclidean_geometry)) বা non-flat (non-Euclidean) জ্যামিতিক পদ্ধতি দ্বারা। > >'Flat' এই প্রসঙ্গে Euclidean জ্যামিতির জন্য ব্যবহৃত হয় (যা plane জ্যামিতির অংশ), আর non-flat non-Euclidean জ্যামিতি নির্দেশ করে। মেশিন লার্নিং এর সাথে জ্যামিতির সম্পর্ক কী? গাণিতিক দুই ক্ষেত্র হিসাবে, ক্লাস্টারগুলির পয়েন্টগুলির মধ্যবর্তী দূরত্ব পরিমাপের একটি সাধারণ পদ্ধতি থাকতে হবে, যা হতে পারে 'flat' বা 'non-flat', ডেটার প্রকৃতির উপর নির্ভর করে। [Euclidean দূরত্ব](https://wikipedia.org/wiki/Euclidean_distance) হলো দুই পয়েন্টের মধ্যে সরলরেখার দৈর্ঘ্য। [Non-Euclidean দূরত্ব](https://wikipedia.org/wiki/Non-Euclidean_geometry) একটি বক্ররেখার沿 পরিমাপ করা হয়। যদি আপনার ডেটা প্লেনে না থাকে এমন মনে হয়, তাহলে বিশেষ অ্যালগরিদম লাগতে পারে তা পরিচালনা করতে। > ![Flat vs Nonflat Geometry Infographic](../../../../translated_images/bn/flat-nonflat.d1c8c6e2a96110c1.webp) > ইনফোগ্রাফিক: [Dasani Madipalli](https://twitter.com/dasani_decoded) > > 🎓 ['Distances'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) > > ক্লাস্টারগুলি তাদের দূরত্ব ম্যাট্রিক্স দ্বারা সংজ্ঞায়িত, অর্থাৎ পয়েন্টগুলোর মধ্যবর্তী দূরত্ব। এই দূরত্ব কয়েকটি পদ্ধতিতে নির্ণয় করা যায়। Euclidean ক্লাস্টারগুলি পয়েন্ট মানের গড় দ্বারা সংজ্ঞায়িত হয় এবং একটি 'সেন্ট্রয়েড' বা কেন্দ্র পয়েন্ট থাকে। দূরত্ব পরিমাপ হয় সেই সেন্ট্রয়েডের প্রতি দূরত্ব হিসেবে। Non-Euclidean দূরত্বগুলো 'ক্লাস্ট্রয়েড' নির্দেশ করে, যা অন্যান্য পয়েন্টের সবচেয়ে কাছাকাছি পয়েন্ট। ক্লাস্ট্রয়েড বিভিন্নভাবে সংজ্ঞায়িত হতে পারে। > > 🎓 ['Constrained'](https://wikipedia.org/wiki/Constrained_clustering) > > [Constrained Clustering](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) এ 'semi-supervised' লার্নিং প্রয়োগ করা হয় এই unsupervised পদ্ধতির মধ্যে। পয়েন্টের সম্পর্ক 'cannot link' বা 'must-link' হিসাবে নির্দিষ্ট করা হয় যাতে কিছু নিয়ম ডেটাতে প্রয়োগ হয়। > >উদাহরণ: একটি অ্যালগরিদম যদি একটি লেবেলবিহীন বা অর্ধ লেবেলযুক্ত ডেটার উপর মুক্তভাবে কাজ করে, তবে তৈরি ক্লাস্টারগুলি কম মানের হতে পারে। উপরের উদাহরণে, ক্লাস্টার হতে পারে 'বৃত্তাকার সঙ্গীত জিনিস', 'বর্গাকার সঙ্গীত জিনিস', 'ত্রিভুজাকার জিনিস' এবং 'কুকিজ'। নিয়ম বা সীমাবদ্ধতা যেমন ("আইটেমটি প্লাস্টিকের হতে হবে", "আইটেমটিকে সঙ্গীত তৈরি করতে সক্ষম হতে হবে") থাকলে অ্যালগরিদমের সিদ্ধান্ত ভালো হয়। > > 🎓 ঘনত্ব 'Density' > > 'নোয়িজি' ডেটা 'dense' হিসেবে বিবেচিত। প্রতিটি ক্লাস্টারের মধ্যবর্তী পয়েন্টের দূরত্ব বিশ্লেষণ করলে তা বেশ ঘন হতে পারে বা কম, অর্থাৎ 'crowded'। তাই এই ধরনের ডেটার উপযুক্ত ক্লাস্টারিং পদ্ধতি ব্যবহার জরুরি। [এই প্রবন্ধ](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) দেখায় কিভাবে K-Means ক্লাস্টারিং ও HDBSCAN অ্যালগরিদম ব্যবহার করে একটি গোলমেলপূর্ণ ডেটাসেটের অসম ঘনত্ব বিশ্লেষণ করা যায়। ## ক্লাস্টারিং অ্যালগরিদম একশোর বেশি ক্লাস্টারিং অ্যালগরিদম আছে, এবং তাদরে ব্যবহার নির্ভর করে ডেটার প্রকৃতির উপর। কিছু প্রধান পদ্ধতিগুলো আলোচনা করা যাক: - **Hierarchical clustering**। যদি একটি বস্তুকে তার নিকটস্থ বস্তুর কাছাকাছি অবস্থানের ভিত্তিতে শ্রেণীবদ্ধ করা হয়, দূরবর্তী বস্তু নয়, তাহলে সদস্যদের দূরত্ব অনুসারে ক্লাস্টার গঠন হয়। Scikit-learn এর agglomerative clustering হলো hierarchical। ![Hierarchical clustering Infographic](../../../../translated_images/bn/hierarchical.bf59403aa43c8c47.webp) > ইনফোগ্রাফিক: [Dasani Madipalli](https://twitter.com/dasani_decoded) - **Centroid clustering**। এই জনপ্রিয় অ্যালগরিদমে 'k' বা ক্লাস্টারের সংখ্যা নির্বাচন করতে হয়, তারপর অ্যালগরিদম নির্ধারণ করে একটি ক্লাস্টারের কেন্দ্র এবং সেই কেন্দ্রের চারপাশে ডেটা জড়ো করে। [K-means clustering](https://wikipedia.org/wiki/K-means_clustering) হলো centroid clustering এর একটি জনপ্রিয় ধরন। কেন্দ্রটি নিকটতম গড় দ্বারা নির্ধারিত হয়, তাই এর নাম। ক্লাস্টার থেকে বর্গাকার দূরত্ব সর্বনিম্ন হয়। ![Centroid clustering Infographic](../../../../translated_images/bn/centroid.097fde836cf6c918.webp) > ইনফোগ্রাফিক: [Dasani Madipalli](https://twitter.com/dasani_decoded) - **Distribution-based clustering**। পরিসাংখ্যিক মডেলিং নিয়ে গঠিত, distribution-based clustering তথ্য বিন্দুর ক্লাস্টারে অন্তর্ভুক্তির সম্ভাবনা নির্ধারণের ওপর ভিত্তি করে এবং সেসব অনুযায়ী নির্ধারণ করে। Gaussian mixture পদ্ধতি এর অন্তর্ভুক্ত। - **Density-based clustering**। ডেটা পয়েন্টগুলো তাদের ঘনত্ব বা নিজেদের চারপাশে গুচ্ছিত হওয়ার ওপর ভিত্তি করে ক্লাস্টারে বরাদ্দ পায়। গুচ্ছ থেকে দূরে থাকা ডেটা পয়েন্ট আউটলার বা গোলমেল হিসেবে বিবেচিত হয়। DBSCAN, Mean-shift এবং OPTICS এই ধরনের ক্লাস্টারিং। - **Grid-based clustering**। মাল্টি ডাইমেনশনাল ডেটাসেটের জন্য একটি গ্রিড তৈরি করা হয় এবং ডেটাকে গ্রিডের সেলে ভাগ করা হয়, ফলে ক্লাস্টার তৈরি হয়। ## অনুশীলন - আপনার ডেটা ক্লাস্টার করুন ক্লাস্টারিং পদ্ধতিতে উপযুক্ত ভিজ্যুয়ালাইজেশন অত্যন্ত সহায়ক, তাই চলুন শুরু করি আমাদের সঙ্গীত ডেটা ভিজ্যুয়ালাইজ করে। এই অনুশীলন আমাদের সাহায্য করবে সিদ্ধান্ত নিতে কোন ক্লাস্টারিং পদ্ধতি এই ডেটার প্রকৃতির জন্য সবচেয়ে কার্যকর। 1. এই ফোল্ডারের [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) ফাইলটি খুলুন। 1. ভাল ডেটা ভিজ্যুয়ালাইজেশনের জন্য `Seaborn` প্যাকেজ ইমপোর্ট করুন। ```python !pip install seaborn ``` 1. [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv) থেকে গান ডেটা যোগ করুন। গানের কিছু তথ্য নিয়ে একটি ডেটা ফ্রেম লোড করুন। ডেটা অনুসন্ধানের জন্য লাইব্রেরি ইমপোর্ট করে ডেটা প্রদর্শন করুন: ```python import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv("../data/nigerian-songs.csv") df.head() ``` ডেটার প্রথম কয়েকটি লাইন পরীক্ষা করুন: | | name | album | artist | artist_top_genre | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature | | --- | ------------------------ | ---------------------------- | ------------------- | ---------------- | ------------ | ------ | ---------- | ------------ | ------------ | ------ | ---------------- | -------- | -------- | ----------- | ------- | -------------- | | 0 | Sparky | Mandy & The Jungle | Cruel Santino | alternative r&b | 2019 | 144000 | 48 | 0.666 | 0.851 | 0.42 | 0.534 | 0.11 | -6.699 | 0.0829 | 133.015 | 5 | | 1 | shuga rush | EVERYTHING YOU HEARD IS TRUE | Odunsi (The Engine) | afropop | 2020 | 89488 | 30 | 0.71 | 0.0822 | 0.683 | 0.000169 | 0.101 | -5.64 | 0.36 | 129.993 | 3 | | 2 | LITT! | LITT! | AYLØ | indie r&b | 2018 | 207758 | 40 | 0.836 | 0.272 | 0.564 | 0.000537 | 0.11 | -7.127 | 0.0424 | 130.005 | 4 | | 3 | Confident / Feeling Cool | Enjoy Your Life | Lady Donli | nigerian pop | 2019 | 175135 | 14 | 0.894 | 0.798 | 0.611 | 0.000187 | 0.0964 | -4.961 | 0.113 | 111.087 | 4 | | 4 | wanted you | rare. | Odunsi (The Engine) | afropop | 2018 | 152049 | 25 | 0.702 | 0.116 | 0.833 | 0.91 | 0.348 | -6.044 | 0.0447 | 105.115 | 4 | 1. ডেটাফ্রেম সম্পর্কে কিছু তথ্য পান, `info()` কল করে: ```python df.info() ``` আউটপুট এরুপ দেখাবে: ```output RangeIndex: 530 entries, 0 to 529 Data columns (total 16 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 name 530 non-null object 1 album 530 non-null object 2 artist 530 non-null object 3 artist_top_genre 530 non-null object 4 release_date 530 non-null int64 5 length 530 non-null int64 6 popularity 530 non-null int64 7 danceability 530 non-null float64 8 acousticness 530 non-null float64 9 energy 530 non-null float64 10 instrumentalness 530 non-null float64 11 liveness 530 non-null float64 12 loudness 530 non-null float64 13 speechiness 530 non-null float64 14 tempo 530 non-null float64 15 time_signature 530 non-null int64 dtypes: float64(8), int64(4), object(4) memory usage: 66.4+ KB ``` 1. null মানের জন্য আবার যাচাই করুন, `isnull()` কল করে এবং মোট যোগফল 0 হওয়া যাচাই করুন: ```python df.isnull().sum() ``` দেখতে ভালো লাগছে: ```output name 0 album 0 artist 0 artist_top_genre 0 release_date 0 length 0 popularity 0 danceability 0 acousticness 0 energy 0 instrumentalness 0 liveness 0 loudness 0 speechiness 0 tempo 0 time_signature 0 dtype: int64 ``` 1. ডেটা বর্ণনা করুন: ```python df.describe() ``` | | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature | | ----- | ------------ | ----------- | ---------- | ------------ | ------------ | -------- | ---------------- | -------- | --------- | ----------- | ---------- | -------------- | | count | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | | mean | 2015.390566 | 222298.1698 | 17.507547 | 0.741619 | 0.265412 | 0.760623 | 0.016305 | 0.147308 | -4.953011 | 0.130748 | 116.487864 | 3.986792 | | std | 3.131688 | 39696.82226 | 18.992212 | 0.117522 | 0.208342 | 0.148533 | 0.090321 | 0.123588 | 2.464186 | 0.092939 | 23.518601 | 0.333701 | | min | 1998 | 89488 | 0 | 0.255 | 0.000665 | 0.111 | 0 | 0.0283 | -19.362 | 0.0278 | 61.695 | 3 | | 25% | 2014 | 199305 | 0 | 0.681 | 0.089525 | 0.669 | 0 | 0.07565 | -6.29875 | 0.0591 | 102.96125 | 4 | | 50% | 2016 | 218509 | 13 | 0.761 | 0.2205 | 0.7845 | 0.000004 | 0.1035 | -4.5585 | 0.09795 | 112.7145 | 4 | | 75% | 2017 | 242098.5 | 31 | 0.8295 | 0.403 | 0.87575 | 0.000234 | 0.164 | -3.331 | 0.177 | 125.03925 | 4 | | max | 2020 | 511738 | 73 | 0.966 | 0.954 | 0.995 | 0.91 | 0.811 | 0.582 | 0.514 | 206.007 | 5 | > 🤔 আমরা যদি লেবেলবিহীন ডেটা প্রয়োজন হয় এমন একটি অবিচ্ছিন্ন পদ্ধতি, ক্লাস্টারিং এর কাজ করি, তাহলে কেন আমরা এই লেবেলযুক্ত ডেটা দেখাচ্ছি? ডেটা অনুসন্ধানের পর্যায়ে এগুলো কাজে লাগতে পারে, তবে ক্লাস্টারিং অ্যালগরিদমগুলো কাজ করতে এই লেবেলগুলি প্রয়োজন হয় না। আপনি চাইলে কলাম হেডারগুলোও সরিয়ে দিতে পারেন এবং ডেটাতে কলাম নম্বর দ্বারা উল্লেখ করতে পারেন। ডেটার সাধারণ মানগুলি দেখুন। লক্ষ্য করুন যে popularity মান ০ হতে পারে, যা দেখায় যে কিছু গানের কোন র‍্যাঙ্কিং নেই। চলুন এবার এগুলো সরিয়ে দিই। 1. সবচেয়ে জনপ্রিয় জেনার খুঁজে বের করতে একটি বারপ্লট ব্যবহার করুন: ```python import seaborn as sns top = df['artist_top_genre'].value_counts() plt.figure(figsize=(10,7)) sns.barplot(x=top[:5].index,y=top[:5].values) plt.xticks(rotation=45) plt.title('Top genres',color = 'blue') ``` ![সবচেয়ে জনপ্রিয়](../../../../translated_images/bn/popular.9c48d84b3386705f.webp) ✅ যদি আপনি আরও শীর্ষ মান দেখতে চান, তাহলে শীর্ষ `[:5]` বৃদ্ধি করুন বা পুরো অংশ সরিয়ে ফেলুন। মনে রাখবেন, যখন শীর্ষ জেনার 'Missing' হিসেবে বর্ণিত হয়, তা মানে স্পটিফাই সেটিকে শ্রেণীবদ্ধ করতে পারেনি, তাই চলুন এটি থেকে মুক্তি পাওয়া যাক। 1. মিসিং ডেটা ফিল্টার করে সরিয়ে দিন ```python df = df[df['artist_top_genre'] != 'Missing'] top = df['artist_top_genre'].value_counts() plt.figure(figsize=(10,7)) sns.barplot(x=top.index,y=top.values) plt.xticks(rotation=45) plt.title('Top genres',color = 'blue') ``` এবার আবার জেনারগুলি যাচাই করুন: ![সব জেনার](../../../../translated_images/bn/all-genres.1d56ef06cefbfcd6.webp) 1. দূর্ভাগ্যবশত, শীর্ষ তিনটি জেনার এই ডেটাসেটে আধিপত্য বিস্তার করে। আসুন আমরা `afro dancehall`, `afropop`, এবং `nigerian pop` উপর ফোকাস করি, এবং অতিরিক্তভাবে 0 popularity মান সহ ডেটা ফিল্টার করি (অর্থাৎ যেগুলোর popularity ডেটাসেটে শ্রেণীবদ্ধ হয়নি এবং আমাদের দৃষ্টিতে এটি নয়েজ হিসাবে বিবেচিত হতে পারে): ```python df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')] df = df[(df['popularity'] > 0)] top = df['artist_top_genre'].value_counts() plt.figure(figsize=(10,7)) sns.barplot(x=top.index,y=top.values) plt.xticks(rotation=45) plt.title('Top genres',color = 'blue') ``` 1. দ্রুত একটি পরীক্ষা করুন দেখতে ডেটা কোন বিশেষ দৃঢ় সম্পর্ক আছে কিনা: ```python corrmat = df.corr(numeric_only=True) f, ax = plt.subplots(figsize=(12, 9)) sns.heatmap(corrmat, vmax=.8, square=True) ``` ![সম্পর্ক](../../../../translated_images/bn/correlation.a9356bb798f5eea5.webp) একমাত্র দৃঢ় সম্পর্ক হল `energy` এবং `loudness` এর মাঝে, যা তাই আশ্চর্য নয়, কারণ জোরালো গান সাধারণত যথেষ্ট শক্তিশালী হয়। অন্যান্য সম্পর্কগুলি তুলনামূলকভাবে দুর্বল। দেখা দরকার ক্লাস্টারিং অ্যালগরিদম এই ডেটা থেকে কী ধরনের তথ্য বের করতে পারে। > 🎓 লক্ষ করুন যে সম্পর্ক মানে কারণ নয়! আমরা সম্পর্কের প্রমাণ পাই কিন্তু কারণ প্রমাণ পাই না। একটি [বিনোদনমূলক ওয়েবসাইট](https://tylervigen.com/spurious-correlations) কিছু চিত্র দেখায় যা এই বিষয়টি জোর দেয়। এই ডেটাসেটে গানটির জনপ্রিয়তা এবং নাচের যোগ্যতার মধ্যে কি কোনো মিল পাওয়া যায়? একটি FacetGrid দেখায় যে, যেকোনো জেনার নির্বিশেষে, এখানে সমকেন্দ্রিক বৃত্ত আঁকা হয়েছে। হতে পারে নাইজেরিয়ান স্বাদ একটি নির্দিষ্ট নাচের যোগ্যতার স্তরে সম্মিলিত হচ্ছে এই জেনারে? ✅ বিভিন্ন ডেটা পয়েন্ট (energy, loudness, speechiness) এবং আরও বা ভিন্ন সঙ্গীত শৈলী চেষ্টা করুন। আপনি কী জানতে পারেন? সার্বিক ডেটা পয়েন্টের বিস্তৃতির জন্য `df.describe()` টেবিলটি দেখুন। ### অনুশীলন - ডেটা বিতরণ এই তিনটি জেনার পার্থক্যপূর্ণভাবে তাদের নাচের যোগ্যতার ধারণা ব্যক্ত করে কি না, জনপ্রিয়তার ভিত্তিতে? 1. আমাদের শীর্ষ তিনটি জেনারের জনপ্রিয়তা এবং নাচের যোগ্যতার ডেটা বিতরণ নিরীক্ষণ করুন নির্দিষ্ট x এবং y অক্ষ বরাবর। ```python sns.set_theme(style="ticks") g = sns.jointplot( data=df, x="popularity", y="danceability", hue="artist_top_genre", kind="kde", ) ``` আপনি সাধারণ সম্মিলিত বিন্দুর চারপাশে সমকেন্দ্রিক বৃত্ত দেখতে পাবেন, যা পয়েন্টগুলির বিতরণ দেখাচ্ছে। > 🎓 লক্ষ্য করুন এই উদাহরণে KDE (Kernel Density Estimate) গ্রাফ ব্যবহার করা হয়েছে যা ধারাবাহিক সম্ভাব্যতা ঘনত্ব বক্ররেখা দ্বারা ডেটা উপস্থাপন করে। এটি আমাদের একাধিক বিতরণের ডেটা ব্যাখ্যা করতে সাহায্য করে। সাধারনত, এই তিনটি জেনার তাদের জনপ্রিয়তা এবং নাচের যোগ্যতার দিক থেকে আলাদাভাবে হালকাভাবে সঙ্গতিপূর্ণ। এই ঢিলেঢালা সঙ্গতিপূর্ণ ডেটায় ক্লাস্টার নির্ধারণ করা একটি চ্যালেঞ্জ হবে: ![বিতরণ](../../../../translated_images/bn/distribution.9be11df42356ca95.webp) 1. একটি স্ক্যাটার প্লট তৈরি করুন: ```python sns.FacetGrid(df, hue="artist_top_genre", height=5) \ .map(plt.scatter, "popularity", "danceability") \ .add_legend() ``` একই অক্ষের স্ক্যাটারপ্লট একটি অনুরূপ সম্মিলিত প্যাটার্ন দেখায় ![Facetgrid](../../../../translated_images/bn/facetgrid.9b2e65ce707eba1f.webp) সাধারণত, ক্লাস্টারিং এর জন্য, আপনি ক্লাস্টার প্রদর্শনের জন্য স্ক্যাটারপ্লট ব্যবহার করতে পারেন, তাই এই ধরনের ভিজ্যুয়ালাইজেশন আয়ত্ত করা খুবই উপকারী। পরবর্তী পাঠে, আমরা এই ফিল্টার করা ডেটা নিয়ে k-means ক্লাস্টারিং ব্যবহার করব এমন গোষ্ঠী আবিষ্কার করতে যা আকর্ষণীয়ভাবে একত্রিত হয়েছে। --- ## 🚀চ্যালেঞ্জ পরবর্তী পাঠের প্রস্তুতিতে, আপনি বিভিন্ন ক্লাস্টারিং অ্যালগরিদম নিয়ে একটি চার্ট তৈরি করুন যা আপনি আবিষ্কার করতে পারেন এবং প্রোডাকশন পরিবেশে ব্যবহার করতে পারেন। ক্লাস্টারিং কোন ধরনের সমস্যার সমাধান করতে চাচ্ছে? ## [পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) ## পর্যালোচনা ও স্ব-অধ্যয়ন ক্লাস্টারিং অ্যালগরিদম প্রয়োগের আগে, যেভাবে শিখেছি, আপনার ডেটাসেটের প্রকৃতি বুঝে নেওয়া ভাল। এই বিষয় সম্পর্কে আরও পড়ুন [এখানে](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) [এই সাহায্যকারী নিবন্ধটি](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) বিভিন্ন ক্লাস্টারিং অ্যালগরিদমের আচরণ কেমন হয় বিভিন্ন ডেটা আকৃতির ক্ষেত্রে, তা ব্যাখ্যা করে। ## এসাইনমেন্ট [ক্লাস্টারিং এর জন্য অন্যান্য ভিজ্যুয়ালাইজেশন অনুসন্ধান করুন](assignment.md) --- **অস্বীকৃতি**: এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। যদিও আমরা শুদ্ধতার জন্য চেষ্টা করি, অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথিটি তার স্বভাষায় কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে প্রয়োজনীয় ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়বদ্ধ নই।