الگوریتم‌های خوشه‌بندی – معرفی ۱۰ الگوریتم پرکاربرد به زبان ساده

یادگیری ماشین به سه دسته اصلی تقسیم می‌شود: یادگیری نظارت‌شده، یادگیری نظارت‌نشده و یادگیری نیمه‌نظارت‌شده. انتخاب هر کدام از این روش‌ها به نوع داده‌ها و مسئله‌ای که قرار است حل شود بستگی دارد.

در یادگیری نظارت‌نشده، داده‌ها برچسب ندارند؛ یعنی ما از قبل اطلاعی درباره الگوهای پنهان در آن‌ها نداریم و باید از الگوریتم‌های مناسب برای کشف این الگوها استفاده کنیم. یکی از روش‌های رایج در این حوزه، خوشه‌بندی (Clustering) است که به ما کمک می‌کند داده‌ها را بر اساس شباهت‌هایشان در گروه‌های مختلف دسته‌بندی کنیم.

خوشه‌بندی در علوم داده کاربردهای فراوانی دارد؛ از جمله برای کشف الگوهای پنهان در داده‌ها، تقسیم‌بندی مشتریان، تحلیل تصاویر و بسیاری موارد دیگر.
ابتدا تعریف خوشه‌بندی را توضیح می‌دهیم، سپس چهار دسته کلی الگوریتم‌های خوشه‌بندی را معرفی کرده و بعد سراغ ۱۰ الگوریتم برتر در این حوزه می‌رویم. در پایان، کاربردهای خوشه‌بندی را بررسی کرده و به سوالات متداول پاسخ می‌دهیم.

خوشه‌بندی چیست؟

خوشه‌بندی (Clustering) یکی از روش‌های پرکاربرد در یادگیری نظارت‌نشده است که گاهی با عنوان تحلیل خوشه (Cluster Analysis) نیز شناخته می‌شود. این روش به ما کمک می‌کند تا داده‌های بدون برچسب را به گروه‌های مجزا تقسیم کنیم.

در خوشه‌بندی، الگوریتم داده‌های خام را دریافت کرده و به‌صورت خودکار، نمونه‌های مشابه را در یک گروه قرار می‌دهد. به هر یک از این گروه‌ها “خوشه” گفته می‌شود. در واقع، یک خوشه مجموعه‌ای از داده‌هایی است که نسبت به هم شباهت بیشتری دارند و از داده‌های موجود در خوشه‌های دیگر متمایز هستند.

کاربردهای خوشه‌بندی شامل مواردی مانند مهندسی ویژگی (Feature Engineering) و کشف الگو (Pattern Discovery) است. در بسیاری از مسائل، ما از ابتدا اطلاعات دقیقی درباره داده‌ها نداریم، بنابراین استفاده از الگوریتم‌های خوشه‌بندی یک راه عالی برای شناخت بهتر و سازمان‌دهی داده‌ها محسوب می‌شود.

 

الگوریتم های خوشه بندی

 

دسته‌بندی الگوریتم‌های خوشه‌بندی

الگوریتم‌های خوشه‌بندی بسته به نوع داده و روش تحلیل، به چند گروه اصلی تقسیم می‌شوند. هر یک از این گروه‌ها برای شرایط و اهداف خاصی مناسب هستند. در این بخش، چهار دسته‌بندی اصلی الگوریتم‌های خوشه‌بندی را بررسی می‌کنیم.

روش‌های مبتنی بر چگالی

در الگوریتم‌های خوشه‌بندی مبتنی بر چگالی (Density-based Clustering)، داده‌ها بر اساس تراکم نقاط گروه‌بندی می‌شوند. به زبان ساده، این روش‌ها مناطقی را که دارای چگالی بالاتری از داده‌ها هستند، به‌عنوان خوشه در نظر می‌گیرند و مناطقی با چگالی کمتر را نادیده می‌گیرند.

یکی از ویژگی‌های مهم این روش‌ها این است که شکل خوشه‌ها از الگوی خاصی پیروی نمی‌کند و می‌تواند به‌صورت نامنظم و غیرخطی باشد. همچنین، برخلاف برخی روش‌های دیگر، نقاط پرت (Outliers) را به خوشه‌ها اختصاص نمی‌دهد و آن‌ها را جدا از داده‌های اصلی در نظر می‌گیرد.

این دسته از الگوریتم‌ها برای داده‌هایی که دارای توزیع نامنظم هستند و خوشه‌های با اشکال پیچیده دارند، گزینه بسیار مناسبی محسوب می‌شوند.

روش‌های مبتنی بر توزیع

در الگوریتم‌های خوشه‌بندی مبتنی بر توزیع (Distribution-based Clustering)، داده‌ها بر اساس یک مدل آماری مشخص گروه‌بندی می‌شوند. این روش فرض می‌کند که داده‌ها از یک توزیع احتمالی خاص (مانند توزیع گاوسی) پیروی می‌کنند و هر نقطه داده با یک احتمال مشخص به یک خوشه تعلق دارد.

یکی از ویژگی‌های این روش این است که هرچه یک نقطه از مرکز خوشه دورتر باشد، احتمال تعلق آن به آن خوشه کمتر می‌شود. به همین دلیل، این مدل‌ها معمولاً در سناریوهایی استفاده می‌شوند که توزیع داده‌ها از قبل مشخص باشد.

این روش در مسائلی مانند تحلیل آماری، مدل‌سازی داده‌های پیچیده و دسته‌بندی داده‌های با الگوهای مشخص کاربرد دارد، اما در شرایطی که توزیع داده‌ها نامعلوم یا غیرمعمول باشد، عملکرد آن ممکن است چندان مطلوب نباشد.

روش‌های مبتنی بر مرکز

الگوریتم‌های خوشه‌بندی مبتنی بر مرکز (Center-based Clustering) از جمله رایج‌ترین و پرکاربردترین روش‌های خوشه‌بندی محسوب می‌شوند. در این روش، داده‌ها بر اساس تعدادی مرکز خوشه (Centroid) گروه‌بندی می‌شوند و هر نقطه داده به نزدیک‌ترین مرکز تخصیص داده می‌شود.

این الگوریتم‌ها معمولاً بر پایه کمینه کردن مجموع مجذور فاصله‌ها بین نقاط داده و مراکز خوشه عمل می‌کنند. با این حال، حساسیت به پارامترهای اولیه مانند تعداد خوشه‌ها و موقعیت اولیه مراکز خوشه، از چالش‌های اصلی این روش‌ها است.

روش‌های مبتنی بر مرکز به دلیل سادگی و سرعت بالا در بسیاری از کاربردها مانند بخش‌بندی مشتریان، فشرده‌سازی داده‌ها و تحلیل الگوها مورد استفاده قرار می‌گیرند.

روش‌های سلسله‌مراتبی

الگوریتم‌های خوشه‌بندی سلسله‌مراتبی (Hierarchical-based Clustering) معمولاً برای داده‌هایی که ساختار سلسله‌مراتبی دارند، مانند پایگاه‌های داده و آنالیز طبقه‌بندی‌شده، استفاده می‌شوند.

در این روش، خوشه‌ها به‌صورت یک ساختار درختی سازمان‌دهی می‌شوند که از بالا به پایین یا پایین به بالا گسترش پیدا می‌کند. این نوع خوشه‌بندی انعطاف‌پذیری بالایی در تعیین تعداد خوشه‌ها دارد اما معمولاً نسبت به روش‌های دیگر محاسباتی سنگین‌تر است.

الگوریتم‌های سلسله‌مراتبی برای داده‌هایی که دارای ترتیب و رابطه سلسله‌مراتبی هستند، عملکرد بسیار خوبی دارند اما ممکن است در مجموعه‌داده‌های بزرگ، از نظر کارایی چالش‌هایی ایجاد کنند.

 

الگوریتم های خوشه بندی

 

چه زمانی از الگوریتم‌های خوشه‌بندی استفاده کنیم؟

اگر داده‌های شما برچسب‌گذاری نشده باشند، احتمالاً باید از روش‌های یادگیری نظارت‌نشده مانند خوشه‌بندی، شبکه‌های عصبی (Neural Networks) یا یادگیری تقویتی (Reinforcement Learning) استفاده کنید. انتخاب الگوریتم مناسب بستگی به ساختار و نحوه توزیع داده‌ها دارد.

به‌عنوان مثال، در تشخیص ناهنجاری (Anomaly Detection)، الگوریتم‌های خوشه‌بندی می‌توانند مرز بین داده‌های معمولی و داده‌های پرت (Outliers) را مشخص کنند. همچنین، اگر در انتخاب ویژگی‌های مناسب برای مدل یادگیری ماشین خود تردید دارید، خوشه‌بندی می‌تواند با کشف الگوهای پنهان در داده‌ها به شما کمک کند.

به‌طور کلی، هرچه اطلاعات کم‌تری درباره داده‌ها داشته باشید، خوشه‌بندی می‌تواند نقطه شروع خوبی باشد. ممکن است انتخاب الگوریتم خوشه‌بندی مناسب کمی زمان‌بر باشد، اما در نهایت روابط ارزشمندی بین داده‌ها کشف خواهید کرد.

کاربردهای الگوریتم‌های خوشه‌بندی شامل:

تشخیص کلاهبرداری در بیمه
دسته‌بندی کتاب‌های یک کتابخانه
بخش‌بندی مشتریان در بازاریابی
تحلیل زلزله (Earthquake Analysis)
برنامه‌ریزی شهری (City Planning)
این روش در مقیاس‌های کوچک و بزرگ کاربرد دارد و در بسیاری از زمینه‌های علمی و تجاری مورد استفاده قرار می‌گیرد.

انواع الگوریتم‌های خوشه‌بندی

حال که با نحوه عملکرد الگوریتم‌های خوشه‌بندی آشنا شدیم، در این بخش به معرفی ۱۰ مورد از رایج‌ترین و کاربردی‌ترین الگوریتم‌های خوشه‌بندی می‌پردازیم. برای پیاده‌سازی این الگوریتم‌ها از کتابخانه Scikit-learn در زبان پایتون استفاده خواهیم کرد.

این الگوریتم‌ها شامل روش‌های مختلفی مانند مبتنی بر مرکز، مبتنی بر چگالی، مبتنی بر توزیع و سلسله‌مراتبی هستند که هر یک برای کاربردهای خاصی مناسب‌اند. در ادامه، هر الگوریتم را بررسی کرده و کد پیاده‌سازی آن را ارائه می‌کنیم.

نصب کتابخانه مورد نیاز

برای پیاده‌سازی الگوریتم‌های خوشه‌بندی، ابتدا باید کتابخانه Scikit-learn را در محیط پایتون نصب کنیم. این کار را می‌توان با استفاده از ابزار pip انجام داد:

				
					pip install scikit-learn

				
			

اگر از لینوکس یا مک استفاده می‌کنید و نیاز به دسترسی sudo دارید، می‌توانید دستور زیر را اجرا کنید:

				
					sudo pip install scikit-learn

				
			

بررسی نسخه نصب‌شده

پس از نصب، می‌توان نسخه Scikit-learn را با قطعه کد زیر بررسی کرد:

				
					import sklearn
print(sklearn.__version__)

				
			

اگر نصب به‌درستی انجام شده باشد، نسخه کتابخانه در خروجی نمایش داده می‌شود، مثلاً:

				
					1.3.0

				
			

مجموعه‌داده مورد استفاده در مثال‌ها

در این بخش، برای ایجاد مجموعه‌داده‌ای آزمایشی از تابع make_classification استفاده می‌کنیم. این مجموعه‌داده شامل 1000 نمونه با 2 ورودی است و برای هر کلاس یک خوشه تعریف می‌شود. داده‌ها در فضایی دو بعدی ترسیم می‌شوند و خوشه‌ها با نمودار نقطه‌ای (Scatter Plot) به نمایش درمی‌آیند. توزیع خوشه‌ها در این مجموعه‌داده از نوع گاوسی چند متغیره (Multivariate Gaussian) است که شناسایی مؤثر آن برای همه الگوریتم‌های خوشه‌بندی ممکن نیست. به همین دلیل، نتایج به‌دست آمده در این مثال برای مقایسه عمومی الگوریتم‌ها مناسب نخواهد بود.

کد برای ایجاد مجموعه‌داده و ترسیم نمودار

با استفاده از کد زیر، یک مجموعه‌داده مصنوعی تولید کرده و داده‌ها را در فضای دو بعدی ترسیم می‌کنیم:

				
					from numpy import where
from sklearn.datasets import make_classification
from matplotlib import pyplot

# define dataset
X, y = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=4)

# create scatter plot for samples from each class
for class_value in range(2):
    # get row indexes for samples with this class
    row_ix = where(y == class_value)
    # create scatter of these samples
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])

# show the plot
pyplot.show()

				
			

ابتدا با استفاده از make_classification یک مجموعه‌داده مصنوعی شامل 1000 نمونه با دو ویژگی ایجاد می‌کنیم.
سپس با استفاده از یک حلقه for، داده‌ها را بر اساس کلاس‌های مختلف (0 و 1) جدا کرده و نمودار نقطه‌ای از هر گروه ترسیم می‌کنیم.
در نهایت، نمودار ایجاد شده را با استفاده از pyplot.show() نمایش می‌دهیم.
با اجرای این کد، نموداری نقطه‌ای از داده‌ها خواهید دید که نقاط مربوط به هر خوشه با رنگ‌های مختلف مشخص شده است. در این مثال، هدف ما بررسی توانایی الگوریتم‌های خوشه‌بندی در شناسایی این دو خوشه متمایز است.

الگوریتم خوشه‌بندی K میانگین

خوشه‌بندی K میانگین (K-Means) یکی از شناخته‌شده‌ترین و پرکاربردترین الگوریتم‌های خوشه‌بندی است که معمولاً در کلاس‌های آموزشی علوم داده و یادگیری ماشین تدریس می‌شود. این الگوریتم فرآیندی ساده و قابل درک دارد که به چند مرحله تقسیم می‌شود.

مراحل کار الگوریتم K میانگین:
در ابتدا، تعداد کلاس‌ها (خوشه‌ها) به صورت دلخواه انتخاب می‌شود. سپس، مراکز خوشه‌ها به طور تصادفی انتخاب می‌شوند.
با محاسبه فاصله هر نمونه از مراکز خوشه‌ها، نقاط داده به خوشه‌ای که به مرکز آن نزدیک‌تر است، اختصاص می‌یابند.
پس از انجام دسته‌بندی نقاط، مراکز خوشه‌ها دوباره محاسبه می‌شوند؛ این بار با محاسبه میانگین تمامی داده‌های موجود در هر خوشه.
مراحل دسته‌بندی و محاسبه مراکز خوشه‌ها تا زمانی که تغییرات مراکز خوشه‌ها کمتر از یک حد آستانه باشد، ادامه می‌یابد.
این الگوریتم به دلیل محاسبه فقط فاصله‌ها از سرعت بالایی برخوردار است، اما معایبی نیز دارد. یکی از مشکلات اصلی این است که باید خودمان تعداد خوشه‌ها را از قبل مشخص کنیم. همچنین، مقداردهی اولیه تصادفی مراکز خوشه‌ها ممکن است به نتایج متفاوتی در هر اجرا منجر شود، که باعث می‌شود نتایج الگوریتم فاقد ثبات باشند.

الگوریتم K میانه:
الگوریتم K میانه (K-Median) مشابه K میانگین است، با این تفاوت که برای محاسبه مراکز خوشه از معیار میانه به جای میانگین استفاده می‌شود. این الگوریتم نسبت به K میانگین کمتر تحت تأثیر نمونه‌های پرت قرار می‌گیرد، اما از آنجایی که محاسبه میانه نیاز به مرتب‌سازی دارد، در داده‌های بزرگ زمان بیشتری می‌برد.

پیاده‌سازی الگوریتم K میانگین در پایتون:

در اینجا پیاده‌سازی الگوریتم K میانگین با استفاده از کتابخانه scikit-learn آورده شده است:

				
					from numpy import unique
from numpy import where
from sklearn.datasets import make_classification
from sklearn.cluster import KMeans
from matplotlib import pyplot

# define dataset
X, _ = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=4)

# define the model
model = KMeans(n_clusters=2)

# fit the model
model.fit(X)

# assign a cluster to each example
yhat = model.predict(X)

# retrieve unique clusters
clusters = unique(yhat)

# create scatter plot for samples from each cluster
for cluster in clusters:
    # get row indexes for samples with this cluster
    row_ix = where(yhat == cluster)
    # create scatter of these samples
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])

# show the plot
pyplot.show()

				
			

ابتدا مجموعه‌داده‌ای مصنوعی با 1000 نمونه و 2 ویژگی ایجاد می‌شود.
سپس، مدل KMeans با 2 خوشه تعریف می‌شود و با استفاده از fit به داده‌ها برازش می‌شود.
پیش‌بینی خوشه‌ها با predict انجام می‌شود و خوشه‌ها براساس رنگ‌های مختلف در نمودار نقطه‌ای ترسیم می‌شوند.
در نهایت، نموداری از خوشه‌بندی به نمایش درمی‌آید.
با اجرای کد بالا، نموداری از داده‌ها خواهید دید که نقاط مختلف با رنگ‌های متفاوت به خوشه‌های مختلف اختصاص داده شده‌اند. به‌طور کلی، الگوریتم K میانگین در این مثال خوشه‌بندی نسبتاً خوبی انجام می‌دهد، اما همانطور که در نمودار مشاهده می‌کنید، واریانس (Variance) نابرابر نقاط داده در دو بعد نشان می‌دهد که این الگوریتم برای این نوع داده‌ها انتخاب مناسبی نیست.

الگوریتم خوشه‌بندی K میانگین با دسته‌های کوچک (Mini-Batch K-Means)

خوشه‌بندی K میانگین با دسته‌های کوچک (Mini-Batch K-Means) نسخه‌ای بهینه‌شده از الگوریتم K-Means است که در آن به‌جای استفاده از تمامی داده‌ها برای محاسبه میانگین مراکز خوشه‌ها، تنها از دسته‌های کوچکی از داده‌ها در هر تکرار استفاده می‌شود. این ویژگی باعث می‌شود که الگوریتم سریع‌تر عمل کرده و برای داده‌های حجیم و نویزی مقاوم‌تر باشد.

مزایای Mini-Batch K-Means:
سرعت بالاتر: به‌دلیل استفاده از دسته‌های کوچکتر، سرعت الگوریتم به‌ویژه در مجموعه‌داده‌های بزرگ به طور قابل توجهی افزایش می‌یابد.
مقاومت در برابر داده‌های نویزی: به دلیل استفاده از نمونه‌های کوچک در هر مرحله، این الگوریتم معمولاً مقاوم‌تر از K-Means در برابر داده‌های نویزی است.

پیاده‌سازی الگوریتم Mini-Batch K-Means در پایتون:
در اینجا پیاده‌سازی الگوریتم Mini-Batch K-Means با استفاده از کتابخانه scikit-learn آورده شده است:

				
					from numpy import unique
from numpy import where
from sklearn.datasets import make_classification
from sklearn.cluster import MiniBatchKMeans
from matplotlib import pyplot

# define dataset
X, _ = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=4)

# define the model
model = MiniBatchKMeans(n_clusters=2)

# fit the model
model.fit(X)

# assign a cluster to each example
yhat = model.predict(X)

# retrieve unique clusters
clusters = unique(yhat)

# create scatter plot for samples from each cluster
for cluster in clusters:
    # get row indexes for samples with this cluster
    row_ix = where(yhat == cluster)
    # create scatter of these samples
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])

# show the plot
pyplot.show()

				
			

برای تغییر این متن بر روی دکمه ویرایش کلیک کنید. لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است.
ایجاد مجموعه‌داده: داده‌های مصنوعی با استفاده از تابع make_classification ایجاد می‌شود.

تعریف مدل

مدل خوشه‌بندی MiniBatchKMeans با تعداد خوشه‌های 2 تعریف می‌شود.

برازش مدل

با استفاده از fit مدل به داده‌ها برازش می‌شود.

پیش‌بینی خوشه‌ها

با استفاده از predict خوشه‌ها برای هر داده پیش‌بینی می‌شود.

ترسیم نمودار

داده‌ها براساس خوشه‌هایی که به آنها تعلق دارند، در یک نمودار نقطه‌ای ترسیم می‌شوند.
پس از اجرای کد، نموداری مشابه نمودار الگوریتم K-Means نمایش داده می‌شود. تفاوت عمده این است که در Mini-Batch K-Means، به دلیل استفاده از دسته‌های کوچک در هر تکرار، پردازش سریع‌تر و مقاوم‌تر در برابر داده‌های نویزی خواهد بود.

این الگوریتم به‌ویژه در مواقعی که مجموعه‌داده بزرگ است و سرعت پردازش اهمیت دارد، می‌تواند گزینه‌ای مناسب باشد.

الگوریتم خوشه‌بندی تغییر میانگین (Mean Shift)

الگوریتم تغییر میانگین (Mean Shift) یکی از الگوریتم‌های خوشه‌بندی مبتنی‌بر جابه‌جایی پنجره است. این الگوریتم تلاش می‌کند تا نواحی با چگالی بالا را شناسایی کند و داده‌ها را در خوشه‌های مختلف گروه‌بندی کند.

نحوه کارکرد الگوریتم:
الگوریتم از یک پنجره دایره‌ای شروع می‌کند. این پنجره به نقطه‌ای تصادفی به نام مرکز اختصاص داده می‌شود.
 در هر تکرار، مرکز خوشه به میانگین نقاط داده در پنجره تغییر می‌یابد و پنجره به سمت نواحی با چگالی بیشتر حرکت می‌کند.
فرایند جابه‌جایی پنجره ادامه پیدا می‌کند تا زمانی که پنجره به سمت نواحی با بیشترین چگالی حرکت کند. در این زمان، خوشه‌ها شناسایی می‌شوند.
مزایای الگوریتم:
خودکار بودن تعداد خوشه‌ها: برخلاف الگوریتم‌های دیگر مانند K-Means، در این الگوریتم نیازی به تعریف تعداد خوشه‌ها توسط کاربر نیست.
همگرایی به نواحی متراکم: الگوریتم همواره به سمت نواحی با تراکم بیشتر داده‌ها همگرا می‌شود.
معایب الگوریتم:
انتخاب شعاع پنجره: انتخاب شعاع یا کرنل پنجره ممکن است دشوار باشد و تأثیر زیادی بر عملکرد الگوریتم دارد.

پیاده‌سازی الگوریتم تغییر میانگین در پایتون:

				
					from numpy import unique
from numpy import where
from sklearn.datasets import make_classification
from sklearn.cluster import MeanShift
from matplotlib import pyplot

# define dataset
X, _ = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=4)

# define the model
model = MeanShift()

# fit model and predict clusters
yhat = model.fit_predict(X)

# retrieve unique clusters
clusters = unique(yhat)

# create scatter plot for samples from each cluster
for cluster in clusters:
    # get row indexes for samples with this cluster
    row_ix = where(yhat == cluster)
    # create scatter of these samples
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])

# show the plot
pyplot.show()

				
			

داده‌ها با استفاده از make_classification ساخته می‌شوند.
مدل MeanShift برای خوشه‌بندی داده‌ها تعریف می‌شود.
مدل به داده‌ها برازش می‌شود و پیش‌بینی خوشه‌ها با استفاده از fit_predict انجام می‌شود.
داده‌ها بر اساس خوشه‌های پیش‌بینی‌شده در یک نمودار نقطه‌ای ترسیم می‌شوند.
بعد از اجرای کد، نموداری مشابه شکل زیر به دست می‌آید که در آن نمونه‌ها به سه خوشه مختلف گروه‌بندی شده‌اند. این نشان‌دهنده توانایی الگوریتم تغییر میانگین در شناسایی نواحی با چگالی بالاتر است.

این الگوریتم مناسب داده‌هایی است که شکل خوشه‌ها به‌طور طبیعی متفاوت بوده و نیازی به پیش‌فرض برای تعداد خوشه‌ها وجود ندارد.

الگوریتم خوشه‌بندی DBSCAN

الگوریتم DBSCAN (Density-Based Spatial Clustering of Applications with Noise) یک الگوریتم خوشه‌بندی مبتنی‌بر چگالی است که به‌ویژه برای داده‌های نویزی مناسب است. این الگوریتم قادر است داده‌های پرت (نویزی) را شناسایی کرده و آن‌ها را به‌طور جداگانه از خوشه‌ها دسته‌بندی کند.

نحوه کارکرد الگوریتم:
 الگوریتم از یک نقطه دلخواه که قبلاً ملاقات نشده شروع می‌کند.
برای هر نقطه، فاصله‌ای به نام ϵ (epsilon) تعریف می‌شود. سپس، نقاطی که در فاصله ϵ از نقطه شروع قرار دارند شناسایی می‌شوند.
 اگر تعداد همسایگان از مقدار مشخصی به نام minPoints بیشتر باشد، آن نقطه به‌عنوان مرکز خوشه در نظر گرفته می‌شود. سپس، دیگر نقاطی که در فاصله ϵ از این نقطه قرار دارند به خوشه اضافه می‌شوند.
 اگر تعداد همسایگان یک نقطه کمتر از حد آستانه باشد، آن نقطه به‌عنوان داده نویزی برچسب‌گذاری می‌شود.
 این فرایند ادامه می‌یابد تا تمام نقاط داده خوشه‌بندی شده یا به‌عنوان داده نویزی برچسب‌گذاری شوند.
مزایای الگوریتم:
نیازی به تعیین تعداد خوشه‌ها نیست: برخلاف الگوریتم‌هایی مانند K-Means که نیاز به تعیین تعداد خوشه‌ها از پیش دارند.
 داده‌های نویزی به‌طور خودکار به‌عنوان نقاط نویزی جدا می‌شوند.
 DBSCAN قادر به شناسایی خوشه‌هایی با اشکال غیرمنظم است.
معایب الگوریتم:
 الگوریتم برای خوشه‌هایی که تراکم یکسانی ندارند، کارایی کمتری دارد.
 تعیین مناسب مقادیر ϵ و minPoints برای داده‌های مختلف نیاز به دقت و تجربه دارد.
مشکل در داده‌های با ابعاد بالا یعنی در داده‌های با ابعاد زیاد، محاسبات فاصله پیچیده‌تر می‌شود.

پیاده‌سازی الگوریتم DBSCAN در پایتون:

				
					from numpy import unique
from numpy import where
from sklearn.datasets import make_classification
from sklearn.cluster import DBSCAN
from matplotlib import pyplot

# define dataset
X, _ = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=4)

# define the model
model = DBSCAN(eps=0.30, min_samples=9)

# fit model and predict clusters
yhat = model.fit_predict(X)

# retrieve unique clusters
clusters = unique(yhat)

# create scatter plot for samples from each cluster
for cluster in clusters:
    # get row indexes for samples with this cluster
    row_ix = where(yhat == cluster)
    # create scatter of these samples
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])

# show the plot
pyplot.show()

				
			

داده‌ها با استفاده از make_classification ساخته می‌شوند.
مدل DBSCAN با پارامترهای ϵ = 0.30 و min_samples = 9 تعریف می‌شود.
مدل به داده‌ها برازش می‌شود و پیش‌بینی خوشه‌ها با استفاده از fit_predict انجام می‌شود.
داده‌ها بر اساس خوشه‌های پیش‌بینی‌شده در یک نمودار نقطه‌ای ترسیم می‌شوند.
با اجرای کد، نموداری مشابه شکل زیر به دست می‌آید که در آن خوشه‌های مختلف شناسایی شده‌اند. در اینجا، سه خوشه مجزا توسط الگوریتم DBSCAN شناسایی شده‌اند. با تنظیم دقیق‌تر پارامترها (مقدار ϵ و min_samples) می‌توان گروه‌بندی دقیق‌تری از داده‌ها به‌دست آورد.

این الگوریتم مناسب داده‌های نویزی است و می‌تواند خوشه‌ها را به‌طور خودکار شناسایی کند بدون اینکه نیاز به تعیین تعداد خوشه‌ها از پیش باشد.

الگوریتم خوشه‌بندی مخلوط گاوسی (Gaussian Mixture Model – GMM)

الگوریتم مخلوط گاوسی (Gaussian Mixture Model یا GMM) یک مدل آماری است که می‌تواند به‌طور مؤثر خوشه‌ها را شبیه‌سازی کند. این الگوریتم به‌ویژه برای داده‌هایی که خوشه‌های آنها به‌صورت گرد یا دایره‌ای نیستند، مناسب است. برخلاف الگوریتم K-Means که خوشه‌ها را به‌صورت دایره‌ای فرض می‌کند، GMM توانایی مدل‌سازی خوشه‌هایی با شکل‌های بیضوی را دارد.

نحوه کارکرد الگوریتم GMM:
 در این مدل، هر خوشه به‌عنوان یک توزیع گاوسی در نظر گرفته می‌شود که دارای دو پارامتر میانگین و انحراف معیار است. با استفاده از این پارامترها، خوشه‌ها به‌صورت بیضوی شبیه‌سازی می‌شوند.
 تعداد خوشه‌ها از پیش مشخص می‌شود و پارامترهای اولیه (میانگین و انحراف معیار) برای هر خوشه انتخاب می‌شود.
 برای هر نمونه داده، احتمال اینکه آن نمونه به خوشه‌ای خاص تعلق داشته باشد محاسبه می‌شود. این احتمال به‌طور معمول با استفاده از فاصله نمونه از مرکز خوشه و انحراف معیار آن خوشه محاسبه می‌شود.
بیشینه‌سازی امید ریاضی (Expectation-Maximization – EM): این الگوریتم برای پیدا کردن پارامترهای بهینه استفاده می‌شود. در هر تکرار، ابتدا احتمال تعلق نمونه‌ها به خوشه‌ها محاسبه می‌شود (انتظار – E) و سپس پارامترهای بهینه برای هر خوشه محاسبه می‌شود (بیشینه‌سازی – M).
این مراحل تا زمانی که الگوریتم به همگرایی برسد و تغییرات پارامترها به مقدار ناچیز برسد، تکرار می‌شوند.

مزایای الگوریتم GMM:
انعطاف‌پذیری در شکل خوشه‌ها: برخلاف K-Means که تنها قادر به شبیه‌سازی خوشه‌های دایره‌ای است، GMM می‌تواند خوشه‌هایی با شکل‌های مختلف مانند بیضوی را مدل‌سازی کند.
استفاده از احتمال: در این الگوریتم، هر نمونه می‌تواند به بیش از یک خوشه تعلق داشته باشد. این ویژگی به‌ویژه برای داده‌هایی که مرزهای واضح بین خوشه‌ها ندارند، مفید است.

معایب الگوریتم GMM:
محاسبات پیچیده‌تر: به دلیل استفاده از روش بیشینه‌سازی امید ریاضی (EM)، این الگوریتم پیچیده‌تر از K-Means است.
انتخاب تعداد خوشه‌ها: مانند K-Means، باید تعداد خوشه‌ها به‌طور دستی تعیین شود.

پیاده‌سازی الگوریتم GMM در پایتون:

				
					from numpy import unique
from numpy import where
from sklearn.datasets import make_classification
from sklearn.mixture import GaussianMixture
from matplotlib import pyplot

# define dataset
X, _ = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=4)

# define the model
model = GaussianMixture(n_components=2)

# fit the model
model.fit(X)

# assign a cluster to each example
yhat = model.predict(X)

# retrieve unique clusters
clusters = unique(yhat)

# create scatter plot for samples from each cluster
for cluster in clusters:
    # get row indexes for samples with this cluster
    row_ix = where(yhat == cluster)
    # create scatter of these samples
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])

# show the plot
pyplot.show()

				
			

در این مثال، داده‌ها با استفاده از make_classification تولید می‌شوند.
مدل GaussianMixture با n_components=2 (تعداد خوشه‌ها) تعریف می‌شود.
مدل بر روی داده‌ها برازش می‌شود.
برای هر داده، خوشه‌ای که به آن تعلق دارد پیش‌بینی می‌شود.
داده‌ها بر اساس پیش‌بینی خوشه‌ها در یک نمودار نقطه‌ای ترسیم می‌شوند.
پس از اجرای کد، هر نمونه داده به‌طور خودکار به یک خوشه اختصاص داده می‌شود. در نمودار حاصل، داده‌ها به‌طور دقیق به دو خوشه طبقه‌بندی می‌شوند، حتی اگر خوشه‌ها شکل دایره‌ای نداشته باشند. این الگوریتم به دلیل استفاده از توزیع گاوسی و احتمالات، قادر است خوشه‌هایی با اشکال بیضوی و با تراکم‌های مختلف را شبیه‌سازی کند.

الگوریتم خوشه‌بندی سلسله مراتبی ترکیبی (Agglomerative Clustering)

الگوریتم خوشه‌بندی سلسله مراتبی ترکیبی (Agglomerative Clustering) یک الگوریتم خوشه‌بندی از نوع پایین-بالا است که با شروع از تک تک نمونه‌ها به‌عنوان خوشه‌های جداگانه، به‌صورت تدریجی خوشه‌ها را با هم ادغام می‌کند تا در نهایت تنها یک خوشه شامل تمامی داده‌ها باقی بماند. این روش به‌طور معمول از یک ساختار درختی به نام دندروگرام (Dendrogram) استفاده می‌کند که در آن خوشه‌ها به‌صورت مرحله به مرحله ادغام می‌شوند.

نحوه کارکرد الگوریتم:
ابتدا هر نمونه به‌عنوان یک خوشه جداگانه در نظر گرفته می‌شود.
اگر تعداد نمونه‌ها n باشد، در ابتدا تعداد خوشه‌ها نیز برابر با n است.
برای ترکیب دو خوشه، یک معیار فاصله بین خوشه‌ها انتخاب می‌شود. به‌طور معمول از معیارهای مختلفی مانند:

پیوند میانگین (Average Linkage)

فاصله میانگین نقاط داده از دو خوشه.

پیوند کامل (Complete Linkage)

فاصله بزرگ‌ترین فاصله بین نمونه‌ها از دو خوشه.

پیوند تک‌بعدی (Single Linkage)

فاصله نزدیک‌ترین نمونه‌ها از دو خوشه.

در هر مرحله، دو خوشه‌ای که کمترین فاصله بین آنها وجود داشته باشد، ترکیب می‌شوند.
ادامه فرآیند تا زمانی که همه نمونه‌ها در یک خوشه نهایی قرار گیرند.
 بسته به نیاز می‌توان فرآیند ترکیب را در هر نقطه متوقف کرده و تعداد خوشه‌های نهایی را مشخص کرد.

ویژگی‌ها:
عدم نیاز به پیش‌بینی تعداد خوشه‌ها: برخلاف بسیاری از الگوریتم‌ها که نیاز به تعیین تعداد خوشه‌ها دارند، در این روش می‌توان تعداد خوشه‌ها را در حین فرآیند تعیین کرد.
این الگوریتم با انواع مختلف معیارهای فاصله سازگار است و می‌تواند بر اساس نیاز تنظیم شود.
الگوریتم Agglomerative Clustering پیچیدگی زمانیO(n3) دارد که نسبت به الگوریتم‌هایی مثل K-Means که پیچیدگی زمانی خطی دارند، بیشتر است.

پیاده‌سازی الگوریتم در پایتون:
در اینجا پیاده‌سازی الگوریتم خوشه‌بندی سلسله مراتبی ترکیبی با استفاده از کتابخانه scikit-learn آمده است:

				
					from numpy import unique
from numpy import where
from sklearn.datasets import make_classification
from sklearn.cluster import AgglomerativeClustering
from matplotlib import pyplot

# define dataset
X, _ = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=4)

# define the model
model = AgglomerativeClustering(n_clusters=2)

# fit model and predict clusters
yhat = model.fit_predict(X)

# retrieve unique clusters
clusters = unique(yhat)

# create scatter plot for samples from each cluster
for cluster in clusters:
    # get row indexes for samples with this cluster
    row_ix = where(yhat == cluster)
    # create scatter of these samples
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])

# show the plot
pyplot.show()

				
			

ابتدا داده‌های مصنوعی با استفاده از تابع make_classification ساخته می‌شود.
مدل AgglomerativeClustering با تعداد خوشه‌های ۲ مشخص می‌شود.
مدل به داده‌ها برازش شده و خوشه‌ها پیش‌بینی می‌شوند.
داده‌ها با توجه به خوشه‌های پیش‌بینی شده در نمودار نقطه‌ای نمایش داده می‌شوند.
پس از اجرای کد، نموداری نقطه‌ای ایجاد می‌شود که داده‌ها را به دو خوشه مجزا تقسیم می‌کند. در این مثال، چون تعداد خوشه‌ها برابر با ۲ انتخاب شده است، داده‌ها به دو گروه تقسیم می‌شوند. این الگوریتم به‌طور مؤثر می‌تواند خوشه‌ها را بر اساس معیارهای مختلف فاصله شبیه‌سازی کند و نیاز به تعیین پیشین تعداد خوشه‌ها ندارد.

الگوریتم خوشه‌بندی BIRCH

الگوریتم BIRCH (Balanced Iterative Reducing and Clustering using Hierarchies) یک الگوریتم خوشه‌بندی است که با هدف کارایی بهتر بر روی داده‌های بزرگ طراحی شده است. این الگوریتم برخلاف K-Means که نیاز به نگهداری داده‌های کامل در حافظه دارد، با استفاده از ساختار درختی و خوشه‌بندی متوازن، داده‌ها را به صورت سلسله‌مراتبی خوشه‌بندی می‌کند. الگوریتم BIRCH بیشتر برای داده‌های بزرگ که نیاز به کاهش زمان پردازش دارند، مناسب است.

ویژگی‌ها:
 BIRCH به‌ویژه برای مجموعه‌داده‌های بزرگ مناسب است چرا که داده‌ها را به صورت خوشه‌های سلسله‌مراتبی ذخیره کرده و فقط خوشه‌های مهم را نگه می‌دارد.
 معمولاً از خروجی این الگوریتم به عنوان ورودی سایر الگوریتم‌های خوشه‌بندی استفاده می‌شود.
 BIRCH تنها برای داده‌های عددی قابل استفاده است. اگر داده‌ها غیر عددی باشند، باید آنها را به نوع عددی تبدیل کرد.

پارامترهای مهم:
threshold حد آستانه‌ای است که برای تعداد نمونه‌های موجود در هر خوشه به‌کار می‌رود. این پارامتر بر اساس فاصله خوشه‌ها و مقدار آستانه تعیین می‌کند که دو خوشه با هم ترکیب شوند یا خیر.
n_clusters یعنی تعداد خوشه‌هایی که الگوریتم می‌بایست در نهایت ایجاد کند (تخمینی از تعداد خوشه‌ها).

نحوه عملکرد:
ساختار درختی یعنی ابتدا داده‌ها به مجموعه‌هایی به نام CF Tree (Clustering Feature Tree) تقسیم می‌شوند که شامل اطلاعاتی از نقاط داده در هر خوشه است.
الگوریتم به صورت تکراری داده‌ها را فشرده کرده و تعداد خوشه‌ها را با استفاده از مقادیر آستانه تنظیم می‌کند.
 پس از فشرده‌سازی، با استفاده از خوشه‌بندی سلسله‌مراتبی، خوشه‌ها ادغام می‌شوند تا به تعداد مطلوب خوشه‌ها برسند.

پیاده‌سازی الگوریتم در پایتون:
در اینجا پیاده‌سازی الگوریتم BIRCH با استفاده از کتابخانه scikit-learn آمده است:

				
					from numpy import unique
from numpy import where
from sklearn.datasets import make_classification
from sklearn.cluster import Birch
from matplotlib import pyplot

# define dataset
X, _ = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=4)

# define the model
model = Birch(threshold=0.01, n_clusters=2)

# fit the model
model.fit(X)

# assign a cluster to each example
yhat = model.predict(X)

# retrieve unique clusters
clusters = unique(yhat)

# create scatter plot for samples from each cluster
for cluster in clusters:
    # get row indexes for samples with this cluster
    row_ix = where(yhat == cluster)
    # create scatter of these samples
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])

# show the plot
pyplot.show()

				
			

داده‌ها با استفاده از تابع make_classification ایجاد می‌شوند.
مدل Birch با پارامترهای threshold=0.01 و n_clusters=2 تعیین می‌شود.
الگوریتم به داده‌ها برازش می‌شود و خوشه‌ها پیش‌بینی می‌شوند.
نمودار نقطه‌ای برای نمایش خوشه‌ها ترسیم می‌شود.
پس از اجرای کد، نمودار نقطه‌ای نمایش داده خواهد شد که داده‌ها را به دو خوشه تقسیم می‌کند. همان‌طور که مشاهده می‌کنید، الگوریتم BIRCH توانسته است داده‌ها را به خوبی خوشه‌بندی کند. این الگوریتم به‌ویژه برای داده‌های بزرگ و پیچیده عملکرد مناسبی دارد و زمان پردازش را به‌طور قابل توجهی کاهش می‌دهد.

الگوریتم خوشه‌بندی انتشار وابستگی (Affinity Propagation)

الگوریتم انتشار وابستگی (Affinity Propagation) یک روش متفاوت برای خوشه‌بندی است که برخلاف بسیاری از الگوریتم‌ها که تعداد خوشه‌ها را از پیش تعیین می‌کنند، به طور خودکار تعداد خوشه‌ها را شناسایی می‌کند. در این الگوریتم، تمام نمونه‌ها به‌طور متقابل با یکدیگر در ارتباط هستند، و این ارتباطات به شناسایی خوشه‌ها و نمونه‌های شاخص کمک می‌کنند.

نحوه عملکرد:
 به جای تعیین پیشین تعداد خوشه‌ها، الگوریتم به‌طور خودکار نمونه‌های شاخص (Exemplars) را پیدا می‌کند که همان خوشه‌ها هستند. نمونه‌های شاخص همان داده‌هایی هستند که برای هر خوشه نمایانگر آن خوشه به‌شمار می‌روند.
تمامی نقاط داده با یکدیگر ارتباط دارند، و شباهت‌های میان این نقاط با یکدیگر محاسبه می‌شود. این ارتباطات در نهایت منجر به شناسایی خوشه‌ها می‌شود.
 الگوریتم به صورت انتشار (propagation) عمل می‌کند، یعنی هر نقطه داده به سایر نقاط داده‌ای که شباهت بیشتری دارند، سیگنال می‌فرستد تا در نهایت بهترین خوشه‌ها شناسایی شوند.
این الگوریتم برای مسائلی مناسب است که تعداد خوشه‌ها را از پیش نمی‌دانید و همچنین می‌تواند به راحتی در مسائلی مانند بینایی ماشین که نیاز به تقسیم‌بندی داده‌ها بدون پیش‌نیاز خاص دارند، استفاده شود.

پیاده‌سازی در پایتون:
در اینجا پیاده‌سازی الگوریتم انتشار وابستگی با استفاده از کلاس AffinityPropagation در کتابخانه scikit-learn آمده است:

				
					from numpy import unique
from numpy import where
from sklearn.datasets import make_classification
from sklearn.cluster import AffinityPropagation
from matplotlib import pyplot

# define dataset
X, _ = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=4)

# define the model
model = AffinityPropagation(damping=0.9)

# fit the model
model.fit(X)

# assign a cluster to each example
yhat = model.predict(X)

# retrieve unique clusters
clusters = unique(yhat)

# create scatter plot for samples from each cluster
for cluster in clusters:
    # get row indexes for samples with this cluster
    row_ix = where(yhat == cluster)
    # create scatter of these samples
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])

# show the plot
pyplot.show()

				
			

داده‌ها با استفاده از تابع make_classification ایجاد می‌شوند.
مدل AffinityPropagation با پارامتر damping=0.9 تعیین می‌شود که مشخص می‌کند که چگونه سیگنال‌های انتشار به‌طور نسبی از بین می‌روند.
الگوریتم بر روی داده‌ها برازش می‌شود و خوشه‌ها پیش‌بینی می‌شوند.
با استفاده از نمودار نقطه‌ای، خوشه‌ها نمایش داده می‌شوند.
پس از اجرای کد، نموداری نمایش داده می‌شود که نشان می‌دهد داده‌ها به چندین خوشه تقسیم شده‌اند. هر خوشه با رنگ‌های مختلف مشخص شده است. در این مثال، داده‌ها به ۱۰ خوشه مختلف تقسیم شده‌اند.

مزایای انتشار وابستگی:
برخلاف الگوریتم‌های دیگر مانند K-Means، الگوریتم انتشار وابستگی خود به‌طور خودکار تعداد خوشه‌ها را شناسایی می‌کند.
این الگوریتم می‌تواند انواع مختلف خوشه‌ها را پیدا کند، از جمله خوشه‌های غیرکره‌ای و پیچیده.

معایب:
الگوریتم نیاز به نگهداری تمامی ارتباطات بین نمونه‌ها دارد، بنابراین ممکن است در داده‌های بسیار بزرگ به حافظه زیادی نیاز داشته باشد.

الگوریتم خوشه‌بندی OPTICS

الگوریتم OPTICS (Ordering Points to Identify the Clustering Structure) یک الگوریتم خوشه‌بندی مبتنی بر چگالی است که مشابه DBSCAN عمل می‌کند، اما با توانایی بهتری در شناسایی خوشه‌ها در نواحی با تراکم متغیر. این الگوریتم می‌تواند ساختار خوشه‌ها را شبیه به DBSCAN شناسایی کند، اما بر خلاف DBSCAN که برای خوشه‌بندی به‌طور دقیق تعداد نقاط همسایه را مشخص می‌کند، OPTICS با ایجاد یک ساختار مرتب‌سازی نقاط داده، اجازه می‌دهد که چگالی نقاط به‌طور خودکار تعیین شود.

نحوه عملکرد:
ابتدا الگوریتم تمامی نقاط داده را مرتب می‌کند تا نزدیک‌ترین نمونه‌ها شناسایی شوند.
 سپس، نزدیک‌ترین نمونه‌ها به یکدیگر به‌عنوان همسایه شناسایی می‌شوند.
 مشابه DBSCAN، OPTICS با شناسایی نقاطی که به‌طور متراکم در کنار یکدیگر قرار دارند، آن‌ها را به یک خوشه نسبت می‌دهد.
 برخلاف DBSCAN که تراکم یکسان را در تمام نقاط فرض می‌کند، OPTICS قادر است خوشه‌ها را در نواحی با تراکم متفاوت شناسایی کند.

پیاده‌سازی در پایتون:
در اینجا پیاده‌سازی الگوریتم OPTICS با استفاده از کلاس OPTICS در کتابخانه scikit-learn آمده است:

 

				
					from numpy import unique
from numpy import where
from sklearn.datasets import make_classification
from sklearn.cluster import OPTICS
from matplotlib import pyplot

# define dataset
X, _ = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=4)

# define the model
model = OPTICS(eps=0.8, min_samples=10)

# fit model and predict clusters
yhat = model.fit_predict(X)

# retrieve unique clusters
clusters = unique(yhat)

# create scatter plot for samples from each cluster
for cluster in clusters:
    # get row indexes for samples with this cluster
    row_ix = where(yhat == cluster)
    # create scatter of these samples
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])

# show the plot
pyplot.show()

				
			

داده‌ها با استفاده از تابع make_classification ایجاد می‌شوند.
مدل OPTICS با پارامترهای eps=0.8 و min_samples=10 تعیین می‌شود. eps نشان‌دهنده حداکثر فاصله مجاز بین نقاط همسایه است و min_samples حداقل تعداد نقاط در یک خوشه را مشخص می‌کند.
الگوریتم بر روی داده‌ها برازش می‌شود و خوشه‌ها پیش‌بینی می‌شوند.
با استفاده از نمودار نقطه‌ای، خوشه‌ها نمایش داده می‌شوند.
پس از اجرای کد، نموداری نمایش داده می‌شود که نشان می‌دهد داده‌ها به ۱۰ خوشه مختلف تقسیم شده‌اند. هر خوشه با رنگ‌های مختلف مشخص شده است.

مزایای OPTICS:
این الگوریتم قادر است خوشه‌ها را در نواحی با چگالی‌های متفاوت شناسایی کند، برخلاف DBSCAN که فرض می‌کند تمامی خوشه‌ها باید دارای چگالی یکسان باشند.
الگوریتم OPTICS خود به‌طور خودکار تعداد خوشه‌ها را شناسایی می‌کند.
در مقایسه با الگوریتم‌های دیگر خوشه‌بندی مبتنی بر چگالی، OPTICS قادر است پیچیدگی‌های مختلف داده‌ها را شبیه‌سازی کند.
معایب:
مانند DBSCAN، OPTICS نیز نیاز به ذخیره اطلاعات مربوط به همسایگی نقاط دارد که ممکن است برای داده‌های بزرگ به حافظه زیادی نیاز داشته باشد.

الگوریتم خوشه‌بندی طیفی

خوشه‌بندی طیفی (Spectral Clustering) یکی از تکنیک‌های مبتنی بر گراف است که برای تقسیم‌بندی داده‌ها به خوشه‌ها از اطلاعات ساختاری گراف استفاده می‌کند. این روش به‌ویژه در مواقعی که داده‌ها به شکل غیرخطی (یا در ساختارهای پیچیده) توزیع شده‌اند، عملکرد بهتری نسبت به الگوریتم‌های سنتی مانند K-Means دارد.

نحوه عملکرد:
 ابتدا گرافی از داده‌ها ساخته می‌شود، که در آن هر گره به یک داده اشاره دارد و لبه‌ها نمایانگر شباهت‌ها میان داده‌ها هستند.
 ماتریس شباهت برای گراف ساخته می‌شود. این ماتریس، فاصله یا شباهت میان نقاط داده را نشان می‌دهد.
 از جبر خطی استفاده می‌شود تا مقادیر ویژه (Eigenvalues) و بردارهای ویژه (Eigenvectors) مربوط به ماتریس شباهت محاسبه شوند.
 این بردارهای ویژه به عنوان نمایه‌ای برای داده‌ها استفاده می‌شوند که به‌طور معمول فضای ابعادی پایین‌تر را ایجاد می‌کنند.
سپس از روش‌های سنتی مانند K-Means برای خوشه‌بندی استفاده می‌شود تا نقاط داده به خوشه‌ها تقسیم شوند.

پیاده‌سازی در پایتون:
در اینجا پیاده‌سازی الگوریتم Spectral Clustering با استفاده از کلاس SpectralClustering در کتابخانه scikit-learn آمده است:

				
					from numpy import unique
from numpy import where
from sklearn.datasets import make_classification
from sklearn.cluster import SpectralClustering
from matplotlib import pyplot

# define dataset
X, _ = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=4)

# define the model
model = SpectralClustering(n_clusters=2)

# fit model and predict clusters
yhat = model.fit_predict(X)

# retrieve unique clusters
clusters = unique(yhat)

# create scatter plot for samples from each cluster
for cluster in clusters:
    # get row indexes for samples with this cluster
    row_ix = where(yhat == cluster)
    # create scatter of these samples
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])

# show the plot
pyplot.show()

				
			

داده‌ها با استفاده از تابع make_classification ایجاد می‌شوند.
مدل SpectralClustering با پارامتر n_clusters=2 تعریف می‌شود، که تعداد خوشه‌ها را مشخص می‌کند.
مدل به داده‌ها برازش می‌شود و خوشه‌ها پیش‌بینی می‌شوند.
با استفاده از نمودار نقطه‌ای، خوشه‌ها نمایش داده می‌شوند.
پس از اجرای کد، یک نمودار نقطه‌ای ایجاد می‌شود که نقاط داده در دو خوشه مختلف تقسیم شده‌اند و هر خوشه با رنگ خاصی نمایش داده می‌شود.

مزایای خوشه‌بندی طیفی:
الگوریتم خوشه‌بندی طیفی در مواردی که داده‌ها دارای ساختار غیرخطی و پیچیده هستند، می‌تواند مفید باشد.
برخلاف الگوریتم‌هایی مانند K-Means، نیازی به پیش‌فرض‌های سخت در مورد شکل خوشه‌ها ندارد.

معایب:
برای مجموعه‌داده‌های بزرگ، محاسبه ماتریس شباهت و مقادیر ویژه می‌تواند زمان‌بر و محاسباتی باشد.
انتخاب مناسب تعداد خوشه‌ها و نحوه ساخت گراف می‌تواند تأثیر زیادی بر نتایج داشته باشد.
این الگوریتم به‌ویژه برای داده‌های پیچیده و ساختارهای غیرخطی مناسب است و در مواردی که خوشه‌ها به راحتی توسط الگوریتم‌های کلاسیک قابل شناسایی نباشند، مفید واقع می‌شود.

کاربردهای الگوریتم‌های خوشه‌بندی

الگوریتم‌های خوشه‌بندی به دلیل توانایی در شناسایی الگوهای پنهان و گروه‌بندی داده‌ها به بخش‌های مشابه، در بسیاری از حوزه‌ها و صنایع مختلف مورد استفاده قرار می‌گیرند. در ادامه به برخی از مهم‌ترین کاربردهای این الگوریتم‌ها پرداخته می‌شود:

تقسیم‌بندی بازار (Market Segmentation)

کسب‌وکارها می‌توانند بازار خود را به گروه‌های کوچک‌تری تقسیم کنند که افراد شبیه به هم در هر گروه قرار دارند. با استفاده از الگوریتم‌های خوشه‌بندی، مشتریان مشابه در ویژگی‌ها و ترجیحات خود شناسایی شده و در نتیجه، محصولات مناسب‌تر برای هر گروه پیشنهاد می‌شود.

بازاریابی خرده‌فروشی و فروش (Retail Marketing)

الگوریتم‌های خوشه‌بندی در شناسایی الگوهای خرید و رفتار مشتریان به‌کار می‌روند. با این الگوریتم‌ها، مشتریانی با ویژگی‌ها و احتمالات خرید مشابه به یکدیگر گروه‌بندی می‌شوند، که به برندها کمک می‌کند تبلیغات هدفمندتری به مشتریان ارائه دهند.

تحلیل شبکه‌های اجتماعی

الگوریتم‌های خوشه‌بندی می‌توانند برای کشف ارتباطات میان کاربران در شبکه‌های اجتماعی و گروه‌بندی آنها بر اساس ویژگی‌های مشابه به‌کار روند. این الگوریتم‌ها می‌توانند تعاملات اجتماعی و یا ارتباطات پنهان میان کاربران را شناسایی کنند.

طبقه‌بندی ترافیک شبکه (Network Traffic Classification)

در شبکه‌های رایانه‌ای، الگوریتم‌های خوشه‌بندی می‌توانند ترافیک شبکه را دسته‌بندی کنند. این الگوریتم‌ها می‌توانند انواع ترافیک‌های مختلف، مانند داده‌های تصویری، صوتی یا ترافیک وب را شناسایی کرده و کمک کنند تا منابع شبکه بهتر مدیریت شوند.

فشرده‌سازی تصاویر (Image Compression)

الگوریتم‌های خوشه‌بندی می‌توانند برای فشرده‌سازی تصاویر بدون از دست دادن کیفیت، استفاده شوند. با گروه‌بندی پیکسل‌ها به خوشه‌های مشابه، داده‌های اضافی حذف شده و حجم تصویر کاهش می‌یابد.

پردازش داده (Data Processing)

خوشه‌بندی داده‌ها می‌تواند به‌منظور کاهش ابعاد داده‌ها و ذخیره‌سازی مؤثرتر آنها به‌کار رود. با این کار، فرآیند بازیابی داده‌ها از ویژگی‌هایی چون تاریخ و زمان ساده‌تر می‌شود.

قانون‌گذاری برای سرویس‌های نمایشی (Recommendation Systems)

الگوریتم‌های خوشه‌بندی به پلتفرم‌هایی مانند Netflix کمک می‌کنند تا کاربران مشابه را شناسایی کرده و محتوای مرتبطی مانند فیلم‌ها یا سریال‌ها به آنها پیشنهاد دهند. این فرآیند باعث هدفمندتر شدن تبلیغات و پیشنهادات می‌شود.

نشانه‌گذاری پیشنهادات (Tagging Suggestions)

الگوریتم‌های خوشه‌بندی برای شناسایی الگوهای جستجو و پیشنهاد برچسب‌های مرتبط به آن جستجوها استفاده می‌شوند. این الگوریتم‌ها می‌توانند به ایجاد سیستم‌های پیشنهادی خودکار برای برچسب‌گذاری محتوا کمک کنند.

علوم حیاتی و خدمات درمانی

در حوزه‌های پزشکی، الگوریتم‌های خوشه‌بندی می‌توانند ژن‌ها یا سلول‌ها را بر اساس رفتار مشابه طبقه‌بندی کنند. همچنین، این الگوریتم‌ها در تشخیص بیماری‌ها، مانند شناسایی سلول‌های سرطانی از تصاویر پزشکی، کاربرد دارند.

شناسایی محتوای خوب و بد (Content Filtering)

الگوریتم‌های خوشه‌بندی می‌توانند در شناسایی محتوای جعلی یا اسپم از محتوای واقعی استفاده شوند. این الگوریتم‌ها می‌توانند کمک کنند تا محتوای مفید از محتوای غیرمفید جدا شود.

الگوریتم‌های خوشه‌بندی به‌دلیل توانایی در شناسایی گروه‌های پنهان در داده‌ها، در بسیاری از صنایع و کاربردها به‌ویژه در زمینه‌های بازاریابی، پردازش داده، خدمات درمانی و شبکه‌های اجتماعی کاربرد فراوانی دارند. این الگوریتم‌ها به کسب‌وکارها کمک می‌کنند تا به درک بهتری از داده‌ها و نیازهای مشتریان خود دست یابند و به بهبود خدمات و پیشنهادات خود بپردازند.

سوالات متداول درباره الگوریتم‌های خوشه‌بندی

حال بیایید به چند سوال متداول در این زمینه بپردازیم:

1. تعریف الگوریتم خوشه‌بندی چیست؟

الگوریتم‌های خوشه‌بندی، دسته‌ای از روش‌های یادگیری ماشین بدون نظارت هستند که هدف آن‌ها گروه‌بندی داده‌های بدون برچسب به خوشه‌ها یا گروه‌هایی مشابه است. این الگوریتم‌ها با استفاده از معیارهای شباهت میان داده‌ها، نمونه‌های جدید را در گروه‌های خاصی قرار می‌دهند.

2. چه الگوریتمی در خوشه‌بندی بهترین است؟

انتخاب بهترین الگوریتم خوشه‌بندی به نوع داده‌ها و هدف خاص مسئله بستگی دارد. هر الگوریتم مزایا و معایب خاص خود را دارد و ممکن است الگوریتم‌های مختلف در شرایط مختلف عملکرد متفاوتی داشته باشند. برای مثال، الگوریتم‌های مبتنی‌بر چگالی مانند DBSCAN برای داده‌های با شکل نامنظم و متراکم مناسب هستند، در حالی که الگوریتم‌های مبتنی‌بر مرکز مانند K-means ممکن است برای داده‌های دارای ساختار کروی یا توزیع‌های مشابه مناسب‌تر باشند.

3. الگوریتم‌های خوشه‌بندی در چه دسته‌هایی قرار می‌گیرند؟

الگوریتم‌های خوشه‌بندی به طور کلی به چهار دسته اصلی تقسیم می‌شوند:

مبتنی‌بر چگالی (Density-based): مانند DBSCAN و OPTICS
مبتنی‌بر توزیع (Model-based): مانند Gaussian Mixture Models
مبتنی‌بر مرکز (Centroid-based): مانند K-means
سلسله مراتبی (Hierarchical): مانند Agglomerative Clustering

4. خوشه‌بندی در کدام گروه از روش‌های یادگیری ماشین قرار دارد؟

الگوریتم‌های خوشه‌بندی به دسته‌بندی «یادگیری بدون نظارت» (Unsupervised Learning) تعلق دارند. این الگوریتم‌ها هدفشان یافتن ساختارهای پنهان در داده‌ها بدون نیاز به برچسب‌ها یا اطلاعات پیش‌زمینه است.

جمع‌بندی

خوشه‌بندی یکی از مهم‌ترین تکنیک‌ها در داده‌کاوی و یادگیری ماشین است که به کمک آن می‌توان داده‌های پیچیده را به بخش‌های معنی‌دار تقسیم کرد. این الگوریتم‌ها با ایجاد گروه‌هایی از داده‌های مشابه، می‌توانند در تحلیل داده‌ها، شناسایی الگوها و پیش‌بینی رفتار کاربران کمک کنند. در این مقاله، با انواع الگوریتم‌های خوشه‌بندی و نحوه پیاده‌سازی آن‌ها آشنا شدیم. این الگوریتم‌ها می‌توانند زمینه‌ساز نوآوری‌های مختلفی در بسیاری از حوزه‌ها از جمله بازاریابی، پزشکی، و تحلیل شبکه‌های اجتماعی باشند.

Share:

More Posts

تحول صنعت اخبار با هوش مصنوعی

تحول صنعت اخبار با هوش مصنوعی؛ چگونه دنیای رسانه‌ها در حال دگرگونیاست؟ در دنیای امروز، پیشرفت‌های سریع فناوری، به‌ویژه در حوزه هوش مصنوعی (AI)، تحولات