|
|
3 months ago | |
|---|---|---|
| .. | ||
| solution | 7 months ago | |
| README.md | 3 months ago | |
| assignment.md | 7 months ago | |
| notebook.ipynb | 11 months ago | |
README.md
مقدمهای بر خوشهبندی
خوشهبندی نوعی از یادگیری بدون نظارت است که فرض میکند مجموعه داده برچسب ندارد یا ورودیهای آن با خروجیهای از پیش تعریف شده مطابقت ندارند. این روش از الگوریتمهای مختلفی برای مرتبسازی دادههای بدون برچسب و ارائه گروهبندیها بر اساس الگوهایی که در دادهها تشخیص میدهد، استفاده میکند.
🎥 برای مشاهده ویدیو روی تصویر بالا کلیک کنید. در حالی که مشغول مطالعه یادگیری ماشین با خوشهبندی هستید، از برخی قطعات موسیقی دَنس هال نیجریهای لذت ببرید – این آهنگ با رتبه بالا در سال ۲۰۱۴ توسط PSquare است.
آزمون پیشدرس
مقدمه
خوشهبندی برای اکتشاف داده بسیار مفید است. بیایید ببینیم آیا میتواند در کشف روندها و الگوها در نحوه مصرف موسیقی توسط مخاطبان نیجریه کمک کند.
✅ یک دقیقه فکر کنید درباره استفادههای خوشهبندی. در زندگی واقعی، خوشهبندی هر زمانی رخ میدهد که شما کوهی از لباسها دارید و باید لباسهای اعضای خانواده خود را جدا کنید 🧦👕👖🩲. در علم داده، خوشهبندی زمانی رخ میدهد که بخواهید ترجیحات یک کاربر را تحلیل کنید یا ویژگیهای هر مجموعه داده بدون برچسب را مشخص نمایید. خوشهبندی به نوعی به درک آشفتگی کمک میکند، مثل کشوی جورابها.
🎥 برای مشاهده ویدیو روی تصویر بالا کلیک کنید: جان گاتگ از MIT خوشهبندی را معرفی میکند.
در یک محیط حرفهای، خوشهبندی میتواند برای تعیین مواردی مانند تقسیمبندی بازار، تعیین گروههای سنی که چه اقلامی را میخرند، به کار رود. استفاده دیگر شناسایی ناهنجاریها است، مثلاً برای کشف تقلب در مجموعه داده تراکنشهای کارت اعتباری. یا ممکن است از خوشهبندی برای تشخیص تومورها در تصاویر پزشکی استفاده کنید.
✅ یک دقیقه فکر کنید که چگونه ممکن است در محیطهای بانکی، تجارت الکترونیک یا کسبوکار با خوشهبندی «در دنیای واقعی» روبرو شده باشید.
🎓 جالب است که تحلیل خوشهای در دهه ۱۹۳۰ در رشتههای انسانشناسی و روانشناسی آغاز شد. آیا میتوانید تصور کنید چگونه استفاده شده است؟
همچنین شما میتوانید برای گروهبندی نتایج جستجو – مانند لینکهای خرید، تصاویر یا نقد و بررسیها – از خوشهبندی بهره ببرید. خوشهبندی زمانی مفید است که شما یک مجموعه داده بزرگ دارید که میخواهید آن را کاهش دهید و تحلیل دقیقتری روی آن انجام دهید؛ بنابراین این تکنیک را میتوان برای آموختن درباره دادهها پیش از ساخت مدلهای دیگر به کار برد.
✅ وقتی دادههای شما در خوشهها مرتب شدند، به آنها یک شناسه خوشه اختصاص میدهید و این تکنیک زمانی که میخواهید حریم خصوصی مجموعه داده را حفظ کنید مفید است؛ میتوانید به جای اشاره به دادههای قابل شناسایی، به نقطه داده توسط شناسه خوشه اشاره کنید. آیا میتوانید دلایل دیگری بیابید که چرا باید به جای عناصر دیگر خوشه، به شناسه خوشه برای شناسایی آن اشاره کنید؟
دانش خود را درباره تکنیکهای خوشهبندی در این ماژول آموزش عمیقتر کنید.
شروع کار با خوشهبندی
Scikit-learn مجموعهای گسترده از روشها برای انجام خوشهبندی ارائه میدهد. نوع روش انتخابی به مورد کاربرد شما بستگی دارد. طبق مستندات، هر روش مزایای مختلفی دارد. در اینجا جدولی ساده از روشهای پشتیبانی شده توسط Scikit-learn و موارد کاربرد مناسب آنها آمده است:
| نام روش | مورد استفاده |
|---|---|
| K-Means | کاربرد عمومی، استقرایی |
| Affinity propagation | خوشههای زیاد و نامتقارن، استقرایی |
| Mean-shift | خوشههای زیاد و نامتقارن، استقرایی |
| Spectral clustering | خوشههای کم و متقارن، استنتاجی |
| Ward hierarchical clustering | خوشههای زیاد و محدود شده، استنتاجی |
| Agglomerative clustering | خوشههای زیاد، محدود شده، فاصلههای غیر اقلیدسی، استنتاجی |
| DBSCAN | هندسه غیر مسطح، خوشههای نامتقارن، استنتاجی |
| OPTICS | هندسه غیر مسطح، خوشههای نامتقارن با چگالی متغیر، استنتاجی |
| Gaussian mixtures | هندسه مسطح، استقرایی |
| BIRCH | مجموعه داده بزرگ با دادههای ناهمسان، استقرایی |
🎓 نحوه ایجاد خوشهها تا حد زیادی به نحوه گردآوری نقاط داده در گروهها مربوط است. بیایید برخی اصطلاحات را باز کنیم:
🎓 'استنتاج استنتاجی' vs. 'استقرایی'
استنتاج استنتاجی از موارد آموزشی مشاهده شده که به موارد آزمایشی خاص نگاشت دارند مشتق میشود. استنتاج استقرایی از موارد آموزشی که به قواعد کلی نگاشت میشوند و سپس فقط روی موارد آزمایشی اعمال میشوند، مشتق شده است.
مثال: تصور کنید مجموعه دادهای دارید که فقط تا حدی برچسبگذاری شده است. برخی 'رکورد' هستند، برخی 'cd' و برخی خالی. کار شما این است که برچسبهای خالی را فراهم کنید. اگر رویکرد استقرایی را انتخاب کنید، مدلی آموزش میدهید که به دنبال 'رکوردها' و 'cd ها' باشد و این برچسبها را به داده بدون برچسب اعمال میکند. این رویکرد در طبقهبندی مواردی که کست هستند مشکل دارد. در حالی که رویکرد استنتاجی این داده ناشناخته را مؤثرتر مدیریت میکند چون تلاش میکند موارد مشابه را گروهبندی کند و سپس برچسبی برای گروه اعمال نماید. در این حالت، خوشهها ممکن است نشاندهنده 'اشیای موسیقی گرد' و 'اشیای موسیقی مربع شکل' باشند.
🎓 'هندسه غیر مسطح' در مقابل 'مسطح'
این اصطلاح برگرفته از اصطلاحات ریاضی است، هندسه غیر مسطح و مسطح به اندازهگیری فاصله بین نقاط با روشهای هندسی 'مسطح' (اقلیدسی) یا 'غیر مسطح' (غیر اقلیدسی) اشاره دارد.
'مسطح' در این زمینه به هندسه اقلیدسی (که بخشی از آن به عنوان هندسه «صفحه» آموزش داده میشود) اشاره دارد و غیر مسطح به هندسه غیر اقلیدسی گفته میشود. هندسه چه ربطی به یادگیری ماشین دارد؟ خوب، به عنوان دو زمینه که ریشه در ریاضیات دارند، باید راه مشترکی برای اندازهگیری فاصله بین نقاط در خوشهها وجود داشته باشد، و این میتواند به صورت مسطح یا غیر مسطح بسته به ماهیت داده باشد. فاصلههای اقلیدسی به عنوان طول یک قطعه خط بین دو نقطه اندازهگیری میشوند. فاصلههای غیر اقلیدسی در طول یک منحنی اندازهگیری میشوند. اگر دادههای شما، وقتی تصویر شده، به نظر نمیرسد روی یک صفحه باشند، ممکن است نیاز به الگوریتم تخصصی برای مدیریت آن داشته باشید.
اینفوگرافیک توسط Dasani Madipalli
خوشهها توسط ماتریس فاصله خود تعریف میشوند، به عنوان مثال فاصله بین نقاط. این فاصله میتواند به چندین روش اندازهگیری شود. خوشههای اقلیدسی با میانگین مقادیر نقاط تعریف شده و دارای 'مرکز' یا نقطه مرکزی هستند. فاصلهها بنابراین با فاصله به آن مرکز اندازهگیری میشوند. فاصلههای غیر اقلیدسی به 'کلسترنوییدها' اشاره دارد، نقطهای که به سایر نقاط نزدیکتر است. کلسترنوییدها به نوبه خود میتوانند به روشهای مختلفی تعریف شوند.
🎓 'محدود'
خوشهبندی محدود شده یادگیری «نیمهنظارتی» را به این روش بدون نظارت وارد میکند. روابط بین نقاط به صورت 'عدم قابلیت اتصال' یا 'باید متصل شود' علامتگذاری میشوند تا برخی قواعد روی مجموعه داده اعمال شود.
مثال: اگر الگوریتمی آزادانه روی مجموعه داده بدون برچسب یا نیمهبرچسب اجرا شود، خوشههای تولید شده ممکن است کیفیت پایینی داشته باشند. در مثال بالا، خوشهها ممکن است «اشیای موسیقی گرد» و «اشیای موسیقی مربع» و «اشیا مثلثی» و «کوکیها» را گروهبندی کنند. اگر برخی محدودیتها یا قواعد به آن داده شود ("مورد باید از پلاستیک ساخته شده باشد"، "مورد باید بتواند موسیقی تولید کند") این میتواند به «محدود کردن» الگوریتم برای انتخابهای بهتر کمک کند.
🎓 «چگالی»
دادهای که 'پرجنجال' است به عنوان 'متراکم' در نظر گرفته میشود. فاصله بین نقاط در هر خوشه ممکن است پس از بررسی متراکم یا کمتراکم یا «شلوغ» باشد و بنابراین این داده باید با روش خوشهبندی مناسب تحلیل شود. این مقاله تفاوت استفاده از خوشهبندی K-Means در مقابل الگوریتمهای HDBSCAN را برای بررسی مجموعه داده پر سر و صدا با چگالی خوشه نامتوازن نشان میدهد.
الگوریتمهای خوشهبندی
بیش از ۱۰۰ الگوریتم خوشهبندی وجود دارد و استفاده از آنها به ماهیت داده بستگی دارد. بیایید برخی از مهمترین آنها را بررسی کنیم:
-
خوشهبندی سلسلهمراتبی. اگر یک شیء بر اساس نزدیکی به یک شیء نزدیکتر طبقهبندی شود، نه به شیءهای دورتر، خوشهها بر اساس فاصله اعضایشان به اشیاء دیگر تشکیل میشوند. خوشهبندی تجمعی اسکیکیتلرن سلسلهمراتبی است.
اینفوگرافیک توسط Dasani Madipalli
-
خوشهبندی مرکزگرا. این الگوریتم محبوب نیاز به انتخاب 'k' یا تعداد خوشهها دارد، سپس الگوریتم نقطه مرکزی یک خوشه را تعیین کرده و دادهها را حول آن نقطه جمع میکند. خوشهبندی K-means نسخه محبوبی از خوشهبندی مرکزگرا است. مرکز توسط نزدیکترین میانگین تعیین میشود، بنابراین نام آن چنین است. فاصله مربعی از خوشه کمینه میشود.
اینفوگرافیک توسط Dasani Madipalli
-
خوشهبندی مبتنی بر توزیع. مبتنی بر مدلسازی آماری، در خوشهبندی مبتنی بر توزیع احتمال تعلق یک نقطه داده به خوشه را تعیین کرده و بر اساس آن تخصیص میدهد. روشهای مخلوط گاوسی از این نوع هستند.
-
خوشهبندی مبتنی بر چگالی. نقاط داده بر اساس چگالی یا گروهبندی حول یکدیگر به خوشهها اختصاص مییابند. نقاط داده دور از گروه به عنوان نقاط پرت یا نویز در نظر گرفته میشوند. DBSCAN، Mean-shift و OPTICS از این نوع خوشهبندی هستند.
-
خوشهبندی مبتنی بر شبکه. برای مجموعه دادههای چند بعدی، یک شبکه ساخته شده و دادهها بین سلولهای شبکه تقسیم میشوند که بدین ترتیب خوشهها ایجاد میشود.
تمرین - خوشهبندی دادههای خود
خوشهبندی به عنوان یک تکنیک، بسیار توسط تجسم مناسب کمک میشود، پس بیایید با تجسم دادههای موسیقی خود شروع کنیم. این تمرین به ما کمک میکند تصمیم بگیریم کدام روش خوشهبندی برای ماهیت این دادهها مؤثرتر است.
-
فایل notebook.ipynb را در این پوشه باز کنید.
-
بسته
Seabornرا برای تجسم خوب دادهها وارد کنید.!pip install seaborn -
دادههای آهنگ را از nigerian-songs.csv اضافه کنید. یک فریم داده حاوی اطلاعاتی درباره آهنگها بارگذاری کنید. برای اکتشاف این دادهها آماده شوید با وارد کردن کتابخانهها و چاپ دادهها:
import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv("../data/nigerian-songs.csv") df.head()چند خط اول داده را بررسی کنید:
نام آلبوم خواننده ژانر اصلی خواننده تاریخ انتشار طول محبوبیت قابلیت رقص آکوستیک انرژی غیرکلامی زنده بودن شلوغی گفتارگونه بودن سرعت امضای زمانی 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 -
اطلاعاتی دربارهی dataframe بگیرید، با فراخوانی
info():df.info()خروجی به این شکل خواهد بود:
<class 'pandas.core.frame.DataFrame'> 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 -
دوباره برای مقادیر null چک کنید، با فراخوانی
isnull()و اطمینان از این که مجموع برابر صفر است:df.isnull().sum()خوب است:
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 -
دادهها را توصیف کنید:
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 میتواند '0' باشد، که نشاندهنده آهنگهایی است که رتبهای ندارند. بیایید به زودی آنها را حذف کنیم.
-
از یک بارپلات استفاده کنید تا محبوبترین ژانرها را پیدا کنید:
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')
✅ اگر میخواهید مقادیر بیشتری از بالاترینها را ببینید، مقدار [:5] را به عدد بزرگتری تغییر دهید یا آن را حذف کنید تا همه را مشاهده کنید.
توجه کنید، زمانی که بالاترین ژانر با عنوان 'Missing' توصیف میشود، به این معناست که اسپاتیفای آن را دستهبندی نکرده است، پس بهتر است آن را حذف کنیم.
-
دادههای مفقود را با فیلتر کردن حذف کنید
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')حالا دوباره ژانرها را بررسی کنید:
-
تا کنون، سه ژانر برتر این مجموعه داده را تسلط دارند. بیایید روی
afro dancehall،afropop، وnigerian popتمرکز کنیم، همچنین دیتاست را فیلتر کنیم تا مواردی با مقدار popularity برابر صفر را حذف کنیم (یعنی آنهایی که رتبهبندی در دیتاست ندارند و میتوان آنها را به عنوان نویز محسوب کرد):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') -
یک تست سریع انجام دهید تا ببینید آیا دادهها به شکلی خاص و قوی با هم همبستگی دارند یا نه:
corrmat = df.corr(numeric_only=True) f, ax = plt.subplots(figsize=(12, 9)) sns.heatmap(corrmat, vmax=.8, square=True)تنها همبستگی قوی بین
energyوloudnessاست، که چندان تعجبآور نیست، چون موسیقی بلند معمولا انرژی زیادی دارد. در غیر این صورت، همبستگیها نسبتاً ضعیف هستند. دیدن اینکه الگوریتم خوشهبندی چه نتیجهای از این دادهها خواهد گرفت جالب خواهد بود.🎓 توجه داشته باشید که همبستگی لزوماً دلالت بر علیت ندارد! ما اثبات همبستگی داریم اما اثبات علیت نداریم. یک سایت سرگرمکننده تصویرهایی دارد که این نکته را تاکید میکند.
آیا در این مجموعه داده همگرایی در رابطه با محبوبیت درکشده یک آهنگ و قابلیت رقص آن وجود دارد؟ یک FacetGrid نشان میدهد که دایرههای متحدالمرکز وجود دارند که بدون توجه به ژانر، همتراز هستند. آیا ممکن است سلیقههای نیجریهای در سطح خاصی از قابلیت رقص برای این ژانر همگرا شوند؟
✅ نقاط داده مختلف (energy, loudness, speechiness) و ژانرهای موسیقی متفاوت یا بیشتری را امتحان کنید. چه چیزهایی میتوانید کشف کنید؟ به جدول df.describe() نگاه کنید تا پراکندگی کلی دادهها را ببینید.
تمرین - توزیع داده
آیا این سه ژانر در درک قابلیت رقص خود بر اساس محبوبیت به طور معناداری متفاوت هستند؟
-
توزیع دادههای سه ژانر برتر خود را در محبوبیت و قابلیت رقص بررسی کنید در محورهای x و y معین.
sns.set_theme(style="ticks") g = sns.jointplot( data=df, x="popularity", y="danceability", hue="artist_top_genre", kind="kde", )میتوانید دایرههای متحدالمرکز اطراف یک نقطه همگرایی کلی را کشف کنید که توزیع نقاط را نشان میدهد.
🎓 توجه داشته باشید که این نمونه از گراف KDE (برآورد چگالی هستهای) استفاده میکند که دادهها را با یک منحنی چگالی احتمال پیوسته نشان میدهد. این به ما امکان تفسیر دادهها هنگام کار با چند توزیع را میدهد.
به طور کلی، سه ژانر به طور ناپیوسته در محبوبیت و قابلیت رقص همسو هستند. تعیین خوشهها در این دادههای به طور ناپیوسته همسو شده، چالشی خواهد بود:
-
یک نمودار پراکندگی ایجاد کنید:
sns.FacetGrid(df, hue="artist_top_genre", height=5) \ .map(plt.scatter, "popularity", "danceability") \ .add_legend()نمودار پراکندگی همان محورها یک الگوی همگرایی مشابه را نشان میدهد
به طور کلی، برای خوشهبندی، میتوانید از نمودارهای پراکندگی استفاده کنید تا خوشههای داده را نشان دهید، پس تسلط بر این نوع بصریسازی بسیار مفید است. در درس بعد، این دادههای فیلترشده را گرفته و از خوشهبندی k-means برای کشف گروههایی استفاده خواهیم کرد که به صورتی جالب روی هم همپوشانی دارند.
🚀چالش
در آمادهسازی برای درس بعد، یک نمودار دربارهٔ الگوریتمهای مختلف خوشهبندی که ممکن است کشف کنید و در محیط تولید استفاده کنید بسازید. خوشهبندی سعی در رفع چه نوع مشکلاتی دارد؟
آزمون پس از درس
مرور و مطالعه خودآموز
قبل از اعمال الگوریتمهای خوشهبندی، همانطور که یاد گرفتیم، خوب است ماهیت دیتاست خود را بفهمید. درباره این موضوع بیشتر اینجا بخوانید.
این مقاله مفید شما را با روشهای مختلف رفتار الگوریتمهای خوشهبندی با توجه به شکلهای مختلف داده آشنا میکند.
تکلیف
تحقیق درباره بصریسازیهای دیگر برای خوشهبندی
سلب مسئولیت: این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان مادری خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما در قبال هرگونه سوء تفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.









