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

الوحدة 2 — k-means: المبدأ والتهيئة والحدود

k-means للتجميع هي ما الانحدار الخطّي للتعلّم المُوجَّه: نقطة الانطلاق الحتمية، بسيطة وسريعة ومُعلِّمة حتى في عيوبها. وفهمها فهماً حقيقياً — بما في ذلك ما لا تقدر عليه — يُهيّئ لكلّ الخوارزميات التالية.

الخوارزمية: خطوتان تتبادلان

نُثبّت عدد المجموعات kk سلفاً. فتضع الخوارزمية kk مركزاً ثقلياً (مراكز المجموعات) وتُكرّر خطوتين حتى الاستقرار:

  1. الإسناد: تنضمّ كلّ نقطة إلى أقرب مركز ثقلي؛
  2. التحديث: يتحرّك كلّ مركز ثقلي إلى متوسّط النقاط المُسنَدة إليه.

وهكذا دواليك. فلأنّ المراكز تتحرّك تتغيّر الإسنادات؛ ولأنّ الإسنادات تتغيّر تتحرّك المراكز. وتتقارب العملية دوماً، وعادةً في بضع عشرات من التكرارات.

from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

X_s = StandardScaler().fit_transform(X) # حتمي: انظر الوحدة 1
km = KMeans(n_clusters=4, n_init=10, random_state=42).fit(X_s)
km.labels_ # المجموعة المُسنَدة لكلّ نقطة
km.cluster_centers_ # المراكز الـk، تُقرأ كملامح نموذجية

كلمةٌ عن cluster_centers_: كلّ مركز ثقلي مُتّجهٌ من المتوسّطات، أي ملمحٌ نموذجي للمجموعة. وهذه أداة التفسير الرئيسة — «المجموعة 2 هي العملاء ذوو السلّة المرتفعة والتردّد المنخفض». وبلا هذه القراءة يبقى التجميع عموداً من أرقامٍ بلا معنى.

ما تُصغّره الخوارزمية: القصور الذاتي

لا تتخبّط k-means عشوائياً: بل تُصغّر القصور الذاتي داخل المجموعة، أي مجموع مربّعات المسافات من كلّ نقطة إلى مركزها.

القصور=j=1kxCjxμj2\text{القصور} = \sum_{j=1}^{k} \sum_{x \in C_j} \lVert x - \mu_j \rVert^2

بعبارةٍ أخرى: مجموعاتٌ متراصّة بأقصى ما يمكن. وهذا المقدار، المتاح بـkm.inertia_، لا يكفّ عن التناقص كلّما زاد kk — حتى يبلغ الصفر حين تصير كلّ نقطة مجموعةً بذاتها. فلا يمكنه إذن، وحده، أن يُستعمَل لاختيار kk؛ وذلك كلّ موضوع الوحدة 3.

التهيئة: لماذا يُهِمّ k-means++

تتقارب الخطوتان إلى أصغرية محلّية تتوقّف على الموضع الابتدائي للمراكز. فسحبةٌ ابتدائية سيّئة تُنتِج تقسيماً متواضعاً — مركزان محشوران في السحابة نفسها، ومجموعةٌ بيّنة مشطورة نصفين.

كابحان، مُفعَّلان افتراضياً في scikit-learn ولا يُعطَّلان أبداً بلا سبب:

  • k-means++ يضع المراكز الابتدائية متباعدةً بعضها عن بعض، فيُقصي منذ البداية التوزيعات العبثية؛
  • n_init يُعيد تشغيل الخوارزمية مرّاتٍ بسحوبٍ مختلفة ويُبقي على الحلّ الأدنى قصوراً.

الحدود البنيوية: ما لا تراه k-means

هذه الحدود ليست عللاً بل نتائج مباشرة للتعريف. ومعرفتها تُجنّبك اتّهام البيانات.

الحدّالمنشأالنتيجة
kk يُثبَّت سلفاًالخوارزمية لا تستنبطهيلزم معيارٌ خارجي (الوحدة 3)
مجموعات كروية متقاربة الحجمتصغير مسافةٍ إلى مركزتفشل على الأشكال الممدودة أو المنحنية
كلّ نقطة تُسنَدلا مفهوم للضجيجالقيم الشاذّة تجذب المراكز
حسّاسة للمقياسالمسافة الإقليديةالتقييس واجب

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

متغيّرات نافعة تُعرَف

تعالج MiniBatchKMeans الأحجام الضخمة جدّاً بالعمل على عيّناتٍ متعاقبة، بجودةٍ تتدهور بالكاد. وتُبدِل k-medoids المتوسّطَ بنقطةٍ حقيقية من مجموعة البيانات، فتقاوم القيم الشاذّة أفضل وتسمح بمسافاتٍ غير إقليدية. وللمتغيّرات الصنفية لا يبقى للمتوسّط معنى: فننتقل إلى k-modes، أو نُبدّل التمثيل.

الخلاصة

  • تُبادِل k-means بين الإسناد إلى أقرب مركز وتحديث المراكز إلى المتوسّط، حتى التقارب.
  • تُصغّر القصور الذاتي داخل المجموعة (مجموعات متراصّة)؛ وهذا القصور يتناقص دوماً مع kk فلا يكفي لاختياره.
  • التقارب محلّي: وk-means++ و**n_init** يحميان من التهيئات السيّئة.
  • تفترض مجموعاتٍ كروية متقاربة الحجم، وتُسنِد كلّ نقطة بما فيها الشاذّة، وتتطلّب تقييساً مسبقاً.

الوحدة التالية: اختيار عدد المجموعات بطريقة الكوع ودرجة الظلّ.