الگوریتم CLARANS

نویسنده

دکتر محمدرضا عاطفی

 عضو هیات علمی دانشگاه، رئیس هیات مدیره گروه ناب، مشاور شرکت‌ها و سازمان‌ها

و مریم کامکاردل

ویرایش محتوا
ویرایش محتوا
ویرایش محتوا
ویرایش محتوا
ویرایش محتوا

📌 مقدمه

تحلیل خوشه ای شاخه ای از آمار است که چندین سال است به طور گسترده مورد مطالعه قرار گرفته است. مزیت استفاده از این تکنیک این است که ساختارها یا خوشه های جالبی را می توان مستقیماً از داده ها بدون استفاده از دانش پس زمینه مانند سلسله مراتب مفهومی کشف کرد. الگوریتم های خوشه بندی مورد استفاده در آمار، مانند PAM یا CLARA، از نقطه نظر پیچیدگی محاسباتی ناکارآمد گزارش شده اند. با توجه به نگرانی کارایی، یک الگوریتم جدید به نام CLARANS (خوشه بندی برنامه های کاربردی بزرگ بر اساس جستجوی تصادفی) برای تجزیه و تحلیل خوشه ای توسعه داده شد.

PAM (پارتیشن بندی در اطراف Medoids) – با فرض وجود n شیء، PAM با پیدا کردن یک شی نماینده برای هر خوشه، k خوشه را پیدا می کند. چنین نماینده ای که نقطه مرکزی در یک خوشه است، به عنوان مدوید شناخته می شود.

پس از انتخاب k medoids، الگوریتم به طور مکرر سعی می کند بهترین انتخاب از medoid را ایجاد کند که تمام جفت های امکان پذیر از اشیاء را تجزیه و تحلیل می کند، به طوری که یک شی یک medoid است و دیگری نه. معیار کیفیت خوشه بندی برای هر یک از این ترکیبات محاسبه می شود.

انتخاب خوب نقاط در یک تکرار به عنوان مدوید برای تکرار زیر انتخاب می شود. هزینه یک تکرار O(k(n−k)2) است. بنابراین از نظر محاسباتی برای مقادیر بزرگ n و k کاملاً ناکارآمد است.

CLARA (خوشه بندی برنامه های کاربردی بزرگ) – تفاوت بین الگوریتم های PAM و CLARA این است که الگوریتم زیر بر اساس نمونه گیری است. تنها یک منطقه کوچک از داده های واقعی وجود دارد که به عنوان نماینده داده ها انتخاب می شود و medoid ها از این نمونه با استفاده از PAM انتخاب می شوند.

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

CLARA چندین نمونه می کشد و خوشه بندی خوب را از این نمونه ها به بیرون می دهد. CLARA می تواند با مجموعه داده ای بالاتر از PAM مقابله کند. پیچیدگی هر تکرار اکنون به O(kS2+k(n−k) می‌شود، که در آن S اندازه نمونه است.

CLARANS (خوشه بندی برنامه های کاربردی بزرگ بر اساس جستجوی تصادفی) – الگوریتم CLARANS هر دو PAM و CLARA را با جستجوی تنها زیرمجموعه مجموعه داده ترکیب می کند و خود را به نمونه ای در هر زمان معین محدود نمی کند. در حالی که CLARA در هر مرحله از جستجو یک نمونه ثابت دارد، CLARANS در هر مرحله از جستجو یک نمونه با مقداری تصادفی ترسیم می کند.

CLARANS (خوشه بندی برنامه های کاربردی بزرگ بر اساس جستجوی تصادفی) یک الگوریتم داده کاوی است که برای خوشه بندی داده های مکانی طراحی شده است. ما قبلاً در مقاله های قبلی خود به الگوریتم های خوشه بندی K-Means و K-Medoids پرداخته ایم. این مقاله در مورد یکی دیگر از تکنیک های خوشه بندی به نام CLARANS به همراه کد آزمایشی پایتونیک آن صحبت می کند. CLARANS توسط Raymond T. Ng و Jiawei Han از IEEE Computer Society (مقاله پژوهشی) معرفی شد.

CLARANS یک روش پارتیشن بندی برای خوشه بندی است که به ویژه در داده کاوی مکانی مفید است. منظور ما شناسایی الگوها و روابط موجود در داده‌های مکانی (مانند داده‌های مربوط به فاصله، جهت یا داده‌های توپولوژیکی، به عنوان مثال داده‌های ترسیم شده بر روی نقشه راه) با داده‌کاوی مکانی است.

چرا الگوریتم CLARANS؟

همانطور که در مقاله الگوریتم K-Medoids ما ذکر شد، تکنیک خوشه‌بندی K-Medoids می‌تواند محدودیت الگوریتم K-Means را در تأثیر نامطلوب نویز/فروت‌ها در داده‌های ورودی برطرف کند. اما ثابت می‌کند که K-Medoids یک روش محاسباتی پرهزینه برای مقادیر بسیار زیاد «k» (تعداد خوشه‌ها) و مجموعه داده‌های بزرگ است.

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

الگوریتم CLARANS به معایب هر دو الگوریتم K-Medoids و CLARA علاوه بر رسیدگی به داده‌های داده کاوی دشوار، یعنی داده‌های مکانی، توجه می‌کند. تعادلی بین هزینه محاسباتی و تأثیر نمونه‌گیری داده‌ها بر تشکیل خوشه‌ها حفظ می‌کند.

مراحل الگوریتم CLARANS

  1. نقاط داده تصادفی «k» را انتخاب کنید و فعلاً آنها را به عنوان medoid برچسب بزنید.
  2. از نقاط انتخاب شده در مرحله (1) یک نقطه تصادفی بگویید “a” و یک نقطه دیگر بگویید “b” که در آن نقاط گنجانده نشده است.
  3. ما قبلاً مجموع فواصل نقطه “a” را از تمام نقاط دیگر خواهیم داشت زیرا این محاسبه برای انتخاب نقاط در مرحله (1) مورد نیاز است. محاسبه مشابهی را برای نقطه “ب” انجام دهید.
  4. اگر مجموع فواصل تمام نقاط دیگر برای نقطه “ب” کمتر از فاصله برای نقطه “a” بود، “a” را با “b” جایگزین کنید.
  5. الگوریتم چنین جستجوی تصادفی‌ای را از medoids “x” انجام می‌دهد که در آن “x” تعداد حداقل‌های محلی محاسبه‌شده را نشان می‌دهد، یعنی تعداد تکرارهایی که باید انجام شوند، که ما آن را به عنوان یک پارامتر مشخص می‌کنیم. مجموعه مدویدهایی که پس از این تعداد «x» به دست می‌آیند، «بهینه محلی» نامیده می‌شوند.
  6. هر بار که نقاط جایگزینی انجام می شود، شمارنده افزایش می یابد. فرآیند بررسی نقاط برای جایگزینی احتمالی تا زمانی تکرار می شود که شمارنده از حداکثر تعداد همسایه های مورد بررسی (که به عنوان پارامتر مشخص می شود) تجاوز نکند.
  7. مجموعه مدویدهایی که با توقف الگوریتم به دست می‌آیند بهترین انتخاب بهینه محلی برای مدویدها است.

مثال

				
					
from pyclustering.cluster.clarans import clarans; 
from pyclustering.utils import timedcall; 
from sklearn import datasets 
#import iris dataset from sklearn library 
iris = datasets.load_iris(); 
#get the iris data. It has 4 features, 3 classes and 150 data points. 
data = iris.data 
"""! 
The pyclustering library clarans implementation requires 
list of lists as its input dataset. 
Thus we convert the data from numpy array to list. 
""" 
data = data.tolist() 
#get a glimpse of dataset 
print("A peek into the dataset : ",data[:4]) 
"""! 
@brief Constructor of clustering algorithm CLARANS. 

@details The higher the value of maxneighbor, the closer is CLARANS to K-Medoids, and the longer is each search of a local minima. 

@param[in] data: Input data that is presented as list of points (objects), each point should be represented by list or tuple. 
@param[in] number_clusters: amount of clusters that should be allocated. 

@param[in] numlocal: the number of local minima obtained (amount of iterations for solving the problem). 

@param[in] maxneighbor: the maximum number of neighbors examined.  

""" 

clarans_instance = clarans(data, 3, 6, 4); 

#calls the clarans method 'process' to implement the algortihm 

(ticks, result) = timedcall(clarans_instance.process); 

print("Execution time : ", ticks, "\n"); 


#returns the clusters  

clusters = clarans_instance.get_clusters(); 

#returns the mediods  

medoids = clarans_instance.get_medoids(); 

print("Index of the points that are in a cluster : ",clusters) 
print("The target class of each datapoint : ",iris.target) 

print("The index of medoids that algorithm found to be best : "medoids) 


				
			

خروجی :

خروجی فوق نشان می دهد که iris dataset شامل datapoints دارای 4 ویژگی است. 

ما می توانیم ببینیم که 3 خوشه وجود دارد، یکی با نقطه داده 53 به عنوان اولین عنصر ان شروع می شود، دیگری با 0 به عنوان اولین عنصر و در نهایت با نقطه داده 50 شروع می شود. 

خروجی نشان می دهد که نقطه داده 1 تا 50 متعلق به کلاس یک، 51 تا 100 متعلق به کلاس 2 و بقیه در کلاس 3 است. اینها کلاس های واقعی هستند که هر نقطه داده متعلق به یعنی setosa، versicolor و virginica است. 

بینش های مرتبط

بینش‌های‌ ناب