انتقل إلى المحتوى الرئيسي

الوحدة 5 — DBSCAN ومجموعات بأشكال حرّة

تشاركت الوحدتان السابقتان افتراضاً واحداً: أنّ المجموعة سحابةٌ متجمّعة حول مركز. ويتخلّى DBSCAN عن هذه الفكرة تماماً ويُبدِلها بـالكثافة: فالمجموعة منطقةٌ تتراصّ فيها النقاط، أيّاً كان شكلها. وهذا التغيير في التعريف يحلّ دفعةً واحدة أكبر ضعفَين في k-means — الأشكال غير الكروية والقيم الشاذّة.

المجموعة كمنطقةٍ كثيفة

الحدس هو حدس التلامس من جارٍ إلى جار. فإن كانت نقطتان جارتين مباشرتين انتمتا إلى المجموعة نفسها؛ وإن كان لجار جاري جيرانٌ امتدّت المجموعة. وبتتبّع المناطق الكثيفة هكذا يأخذ التجمّع الشكل الذي تمنحه البيانات: هلالاً، حلزوناً، شريطاً.

ويكفي معاملان لصوغ ذلك، وكلّ DBSCAN يقوم على ضبطهما جيّداً:

  • eps: نصف القطر الذي يُعرِّف جيرة النقطة؛
  • min_samples: عدد الجيران المطلوب في ذلك النصف للحديث عن منطقةٍ كثيفة.

ثلاث حالاتٍ للنقاط، إحداها حاسمة

من هذين المعاملين ينبع تصنيفٌ لكلّ نقطة، وهو ما يصنع تفرّد الطريقة:

الحالةالتعريفالدور
نقطة لبّلها min_samples جاراً على الأقلّ داخل epsتُنمِّي المجموعة
نقطة حدّفي جيرة نقطة لبّ، دون أن تكون لبّاًمُلحَقة، لكن لا تنشر
ضجيجلا هذه ولا تلكلا تنتمي إلى أيّ مجموعة

والسطر الثالث هو الإسهام الكبير. فقد كانت k-means تُسنِد كلّ نقطة، بما فيها الشاذّة التي تجذب المراكز؛ أمّا DBSCAN فيُوسِمها صراحةً ضجيجاً، بالوسم -1. فيتنقّى التجميع بذلك، وتصير النقاط المعزولة في الطريق مرشّحات طبيعية لكشف الشواذّ في الوحدة 8.

from sklearn.cluster import DBSCAN
db = DBSCAN(eps=0.5, min_samples=5).fit(X_s)
db.labels_ # -1 يدلّ على الضجيج
(db.labels_ == -1).sum() # حجم الضجيج: مؤشّر ضبط
len(set(db.labels_)) - (1 if -1 in db.labels_ else 0) # عدد المجموعات المُكتشَفة

ولاحظ أنّنا لا نُزوّد عدد المجموعات: فـDBSCAN يستنبطه من البنية. وهذه ميزةٌ حقيقية، لكنّها تنقل الصعوبة إلى ضبط eps.

ضبط eps بلا تخبّط: مخطّط مسافات الجيران

فـeps صغيرٌ جدّاً يُعلِن كلّ شيء تقريباً ضجيجاً؛ وكبيرٌ جدّاً يدمج المجموعات كلّها في كتلةٍ واحدة. والطريقة المعيارية لمعايرته بيانية وموثوقة: لكلّ نقطة نحسب المسافة إلى جارها الأقرب رقم kk (بـkk = min_samples)، ثمّ نرسم هذه المسافات مرتّبةً تصاعدياً. فيبقى المنحنى مستوياً — إذ للنقاط الكثيفة كلّها جارٌ قريب — ثمّ ينطلق فجأةً عند الوصول إلى النقاط المعزولة. وكوع هذا المنحنى هو eps ممتاز.

أمّا min_samples فالتقدير الشائع أن نبدأ من ضعف عدد المتغيّرات. وكلّما ارتفع كانت الخوارزمية أكثر تطلّباً وأعلنت ضجيجاً أكثر.

ما لا يحلّه DBSCAN

تُوجِب النزاهة تسمية الحدود، فهي حقيقية:

  • الكثافات المتغيّرة: لأنّ eps عامّ، تُعالَج مجموعةُ بياناتٍ فيها تجمّعٌ كثيف وآخر منتشر معالجةً سيّئة — فنصف قطرٍ واحد لا يصلح للاثنين؛
  • الأبعاد العالية: يقوم DBSCAN على المسافات، فيقع تحت لعنة الأبعاد (الوحدة 4 من الدورة المُوجَّهة). وعملياً نُقلّص الأبعاد أوّلاً بتحليل المكوّنات الأساسية (الوحدة 6)، ثمّ نُطبّق DBSCAN؛
  • لا ملامح نموذجية: بلا مراكز ثقلية، يتطلّب التفسير أن تُلخّص كلّ مجموعة بنفسك، بمتوسّطاتها مثلاً.
HDBSCAN، الامتداد الطبيعي

لحدّ الكثافات المتغيّرة جوابٌ مباشر: يُنوِّع HDBSCAN قيمة eps ويُبقي على المجموعات المستقرّة على مدى نطاقٍ من الكثافات. فلا يبقى إلّا معاملٌ واحد بديهي تُزوّده — الحجم الأدنى للمجموعة — وتُدار الكثافات المتفاوتة. وحين يعطي DBSCAN نتيجةً سليمة على جزءٍ من البيانات وعبثية على الباقي، فهذا ردّ الفعل الواجب.

الخلاصة

  • يُعرِّف DBSCAN المجموعة بأنّها منطقة كثيفة، فيقدر على كشف أشكالٍ حرّة تفشل فيها k-means.
  • معاملان فقط: eps (نصف قطر الجيرة) و**min_samples** (الجيران المطلوبون)؛ وعدد المجموعات مُستنبَط لا مفروض.
  • نقاط اللبّ والحدّ والضجيج: يُستبعَد الضجيج صراحةً (الوسم -1)، فيتنقّى التجميع.
  • نضبط eps بـكوع مخطّط مسافات الجيران؛ والكثافات المتغيّرة تستدعي HDBSCAN، والأبعاد العالية تقليصاً مسبقاً.

الوحدة التالية: تحليل المكوّنات الأساسية، أوّل أدوات تقليص الأبعاد ومُكمّلٌ لا غنى عنه لكلّ ما سبق.