#dbscan — التعلّم غير المُشرَف
التجميع بحسب الكثافة: إبسيلون، MinPts، نقاط النواة والحافّة والضوضاء — الخوارزميّة التي تجد الأشكال الاعتباطيّة وتتجاهل المتطفّلين.
ما ستُجرّبه
- مرحبًا بك في #dbscan. على المستوى، 240 نقطة رمادية: هلالان متشابكان ونحو عشرين متطفّلًا مبعثرًا عشوائيًا. سيقطع k-means بمركزَين هذه السحابة إلى نصفَين بخطّ مستقيم ويمنح عنقودًا لكلّ متطفّل مهما كان الثمن. أمّا DBSCAN فيفكّر بطريقة مختلفة: ينظر إلى الكثافة. النقطة التي تملك على الأقلّ
MinPtsجارًا (بما فيها هي نفسها) داخل نصف قطرepsهي نواة؛ والنُوى المتجاورة تندمج في عنقود واحد مهما كان شكله؛ وما يبقى معزولًا فهو ضوضاء. الإعدادات الحالية، في اللوحة اليمنى:eps = 0.25،MinPts = 5. - شغّل الخوارزمية:
/run. لاحظ ترتيب الظهور: يبدأ DBSCAN من نقطة، ثمّ يجد جيرانها داخل نصف القطرeps(الحلقة الصفراء)، ثمّ جيران جيرانها… ينتشر العنقود إلى الخارج كبقعة تتّسع. - قلّص نصف القطر:
/eps 0.1. مع حلقة بهذه الصغر، قليل من النقاط يبقى يملك 5 جيران. - العكس الآن:
/eps 0.5. نصف قطر بهذه الضخامة يربط كلّ ما هو ضمن 0.5، بما في ذلك ما لا يجب أن يُربط. - عُد إلى الإعداد الجيّد:
/eps 0.25. كيف نختاره دون تجربة وخطأ؟ اللوحة اليمنى تعرض وسيط المسافة الرابعة: المسافة النموذجيّة من نقطة إلى جارها الرابع (≈ 0.13 مع هذه البيانات). قيمةepsأعلى قليلًا تُنتج نُوى في كلّ مكان داخل الهلالَين دون عبور الفجوة بينهما. - المقبض الثاني:
/minpts 12. أن تكون نواة يتطلّب الآن 12 جارًا داخل نفس نصف القطر. - نفس البيانات كما يراها k-means:
/compare. يبحث k-means عن عدد من المراكز يساوي عدد العناقيد التي وجدها DBSCAN (2 هنا) ويقطع المستوى بالعمود المنصّف للمركزَين (الخطّ المتقطّع): كلّ هلال يُشطر إلى نصفَين، والمتطفّلون يحصلون على عنقود كأيّ نقطة أخرى. - للختام، أعِد تشغيل الخوارزمية بحركة بطيئة:
/step. كلّ شيء يعود إلى الرمادي، ثمّ تُكشف نقطة واحدة مع حلقتهاepsوالقطع الموصولة إلى جيرانها. - دورك الآن:
/minpts 5للعودة إلى الإعداد المُتساهل، ثمّ/dataset rings(دائرتان متمركزتان: k-means لا يستطيع، DBSCAN يستطيع)،/dataset noise(متطفّلون فقط: لا يجد DBSCAN شيئًا أو يكاد)،/noise 0.3(30% متطفّلين)،/neighbors 0 0(ضع الحلقة على النقطة الأقرب إلى المركز)،/resetللبدء من جديد. حدّ لا بدّ من معرفته: يملك DBSCANepsواحدًا، لذا تُفلت منه العناقيد ذات الكثافات المختلفة جدًّا — وهذه هي المشكلة التي يحلّها HDBSCAN. الخطوات التالية: #anomaly-detection (ضوضاء DBSCAN كاشف للمتطفّلين) و#hierarchical-clustering.
أوامر القناة
/eps <radius=0.05..1>— نصف قطر جوار إبسيلون (يُعيد تشغيل DBSCAN إن كان قد بدأ)./minpts <2..20>— الحدّ الأدنى من الجيران (بما فيها النقطة نفسها) اللازم ليُعدّ الشخص نقطة نواة./run— يحسب DBSCAN ويُعيد عرض توسّع العناقيد./step— يكشف النقطة التالية بترتيب الزيارة (وضع خطوة بخطوة)./neighbors <x=-2..2> <y=-2..2>— يضع حلقة <code>eps</code> على النقطة الأقرب إلى (x, y) ويربط جيرانها./compare— يبدّل التلوين إلى نتيجة k-means (والعكس)./dataset <moons|blobs|rings|noise>— يغيّر مجموعة النقاط (moons، blobs، rings أو ضوضاء صافية)./noise <proportion=0..0.3>— نسبة المتطفّلين الموزّعين بانتظام المضافين إلى مجموعة البيانات (من 0 إلى 0.3)./seed <1..99>— سحب عشوائي جديد للنقاط (حتمي)./reset— العودة إلى moons، ضوضاء 10%، <code>eps</code> 0.25، <code>MinPts</code> 5، دون تشغيل أيّ شيء.
المسرد
- DBSCAN
- خوارزميّة تجميع قائمة على الكثافة (Ester, Kriegel, Sander, Xu, 1996): وسيطان اثنان،
epsوMinPts، دون تحديد لعدد العناقيد. تجد عناقيد بأشكال اعتباطيّة وتُسمّي النقاط المعزولة صراحةً ضوضاء. - إبسيلون (نصف قطر الجوار)
- نصف القطر
epsللقرص المرسوم حول كلّ نقطة: كلّ نقطة تقع على مسافة ≤epsتُعدّ جارًا. صغير جدًّا، يصبح كلّ شيء ضوضاء؛ كبير جدًّا، يندمج كلّ شيء. - MinPts
- العدد الأدنى من الجيران (بما فيها النقطة نفسها) الذي يجب أن تملكه النقطة داخل نصف قطر
epsلتكون نواة. القيمة المعتادة: 2 × البُعد، أي 4 أو 5 في بُعدَين؛ ورفعُها يجعل الخوارزميّة أكثر تشدّدًا وأمتن أمام الضوضاء. - نقطة نواة
- نقطة تملك على الأقلّ
MinPtsجارًا داخل نصف قطرهاeps: تنتمي إلى الباطن الكثيف للعنقود ويُسمح لها بأن توسّعه إلى جيرانها. - نقطة حافّة
- نقطة لا تملك عددًا كافيًا من الجيران لتكون نواة، لكنّها تقع داخل نصف قطر
epsمن نواة ما: تنضمّ إلى عنقود تلك النواة دون أن يكون بمقدورها توسيعه. هذه هي حافّة العنقود. - ضوضاء / شذوذ
- نقطة ليست نواة ولا حافّة: لا نواة تصل إليها. يمنحها DBSCAN التسمية −1 بدلًا من إقحامها عنوةً في عنقود، ما يجعله أيضًا كاشفًا بدائيًا للشذوذ.
- الكثافة
- عدد النقاط لكلّ وحدة مساحة. يقيسها DBSCAN محلّيًا بحساب الجيران داخل قرص نصف قطره
eps: العنقود هو منطقة تتجاوز فيها هذه الكثافة عتبةMinPts، وتفصلها عن غيرها مناطقُ خفيفة. - توسيع العنقود
- الآليّة المركزيّة: انطلاقًا من نواة، نضيف جيرانها إلى طابور؛ كلّ جار يكون نواة بدوره يضيف جيرانه، وهكذا حتّى الاستنفاد. العنقود هو مجموعة النقاط القابلة للوصول عبر الكثافة من البذرة، ومن هنا الأشكال الاعتباطيّة.
- مخطّط k-distance
- لكلّ نقطة، المسافة إلى جارها الـ k (k = MinPts − 1، غالبًا 4)، مرتّبة. يرتفع المنحنى بلطف عند نقاط العنقود ثمّ ينطلق عند المتطفّلين: الكوع يشير إلى قيمة جيّدة لـ
eps. - الكثافات المتفاوتة (حدّ DBSCAN)
- بقيمة واحدة لـ
eps، لا يستطيع DBSCAN التمييز بين عنقود مضغوط وآخر منتشر: أحدهما يتفتّت أو يندمج الآخر. يتخطّى HDBSCAN هذا الحدّ باستكشاف كلّ قيمepsدفعةً واحدة والاحتفاظ بالعناقيد الأكثر استقرارًا.
قنوات أخرى في التعلّم غير المُشرَف
- #k-means — التجميع بلا تسميات: مراكز تتحرّك، قصور ذاتي يهبط، اختيار k — والأشكال التي يفشل عليها k-means.
- #pca — تحليل المكوّنات الرئيسية: أوجِد المحاور التي تتغيّر عليها البيانات أكثر ما يكون، أسقِط، اضغط — وقِس ما فُقد.
- #hierarchical-clustering — ادمج النقاط اثنتَين اثنتَين حتّى لا يبقى إلّا واحدة: المخطّط الشجريّ، ومعايير الوصلة، وارتفاع القطع الذي يحدّد عدد العناقيد.
- #dbscan — التجميع بحسب الكثافة: إبسيلون، MinPts، نقاط النواة والحافّة والضوضاء — الخوارزميّة التي تجد الأشكال الاعتباطيّة وتتجاهل المتطفّلين.
- #anomaly-detection — اكتشِف ما لا يُطابق شيئًا: z-score / ماهالانوبيس، Isolation Forest، LOF — ثلاث طرق لقول «هذه النقطة غريبة».
- #t-sne-umap — ارسم خريطة الأبعاد العالية: t-SNE وUMAP يفتحان بيانات ذات 10 أبعاد إلى خريطة قابلة للقراءة في بُعدَين — الحيرة، الجيران، ومغالطات القراءة.