ML Learning Hub
غير مُشرفمتوسط

التجميع: K-Means وDBSCAN

إيجاد مجموعات خفية في البيانات غير الموسومة — لا معلم مطلوب

تجميع غير خاضع للإشراف للبيانات غير المصنفة — K-Means وDBSCAN والتجميع الهرمي. اكتشاف البنية المخفية في بياناتك.

40 min
12 مخططات
7 المفاهيم المغطاة

المتطلبات الأساسية

Linear Algebra
Model Evaluation

المفاهيم المغطاة

K-MeansDBSCANSilhouette ScoreInertiaCore PointsElbow MethodDendrogram

الصيغ الرئيسية

هدف K-Means

تقليل مجموع مربعات المسافات الكلية داخل التجمعات إلى المراكز

نقطة النواة DBSCAN

النقطة نواة إذا كان لها ≥ MinPts جاراً ضمن نصف القطر ε

درجة الصورة الظلية

a = المسافة داخل التجمع، b = المسافة للتجمع الأقرب — المدى [-1, 1]، 1 = مثالي

القصور الذاتي

مجموع مربعات المسافات من كل نقطة إلى أقرب مركز — هدف K-Means

محاكاة تفاعلية

Loading visualization…
🎯

لماذا تجميع البيانات غير المصنفة؟

motivation

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

نُشر K-Means عام 1967 وما زال أحد أكثر الخوارزميات استخداماً في أنظمة التعلم الآلي الإنتاجية. بساطته هي قوته.

💡

K-Means: التفاوض التكراري

intuition

تخيّل وضع K أعلام عشوائياً على خريطة. كل شخص يمشي نحو أقرب علم. ثم ينتقل كل علم إلى متوسط موضع كل من سار إليه. تتكرر العملية حتى لا يغير أحد علمه. تتقارب خوارزمية لويد هذه نحو حد أدنى محلي — غير مضمونة للعثور على الحل الأمثل العالمي، لذا تُحسّن تهيئة K-Means++ (إبعاد المراكز الأولية) النتائج بشكل كبير.

يتقارب K-Means دائماً لكنه قد يتقارب نحو حد أدنى محلي سيئ. دائماً شغّله مع تهيئات عشوائية متعددة (n_init=10 في scikit-learn) واحتفظ بالأفضل.

هدف K-Means

math

يُقلِّل K-Means مجموع المسافات الإقليدية المربعة من كل نقطة إلى مركزها المعيَّن. تُعيِّن خطوة E كل نقطة لأقرب مركز؛ تُحرِّك خطوة M كل مركز نحو متوسط نقاطه. كل خطوة تُقلِّل الهدف بشكل رتيب مضمونةً التقارب.

WCSS — مجموع مربعات المسافات داخل التجمع
🔬

اختيار K: طريقة الكوع والصورة الظلية

deepdive

K هو معامل فائق — يجب عليك اختياره. تُخطِّط طريقة الكوع القصور الذاتي مقابل K: دائماً يتناقص لكن معدل التناقص يُشكِّل كوعاً عند K الصحيح. بشكل أدق، يقيس درجة الصورة الظلية مدى ملاءمة كل نقطة لتجمعها الخاص مقارنةً بأقرب تجمع مجاور. s=1 = فصل تام، s=0 = تجمعات متداخلة، s<0 = النقطة في التجمع الخاطئ.

1

تجريب K = 2 إلى 10، رسم القصور الذاتي — البحث عن 'الكوع'

2

حساب درجة الصورة الظلية لكل K — الذروة = أفضل K

3

استخدام إحصائية الفجوة (مقارنة ببيانات عشوائية) لاختيار K بدقة

4

غالباً تتغلب معرفة المجال: إذا كنت تعلم أن هناك 5 شرائح عملاء، استخدم K=5

⚖️

K-Means مقابل DBSCAN مقابل الهرمي

comparison

يفترض K-Means تجمعات كروية بأحجام متساوية ويتطلب K مسبقاً. يفشل على البيانات ذات الشكل الهلالي أو الكثافة المتغيرة. يجد DBSCAN تجمعات ذات أشكال عشوائية ويُحدِّد الشذوذات تلقائياً — النقاط غير المنتمية لأي تجمع. يتطلب فقط ε (نصف قطر الجوار) وMinPts. يبني التجميع الهرمي دينروغراماً يمكن قطعه على أي مستوى للحصول على K تجمعات.

استخدم DBSCAN عند توقع ضوضاء/شذوذات أو تجمعات غير كروية. K-Means عندما تكون التجمعات كروية تقريباً وK معروف. الهرمي لاستكشاف تدرجات متعددة في آنٍ واحد.

⚙️

DBSCAN خطوة بخطوة

algorithm
1

لكل نقطة p غير مزارة، إيجاد جميع النقاط ضمن نصف القطر ε (ε-جوار)

2

إذا |N_ε(p)| ≥ MinPts → p نقطة نواة؛ بدء تجمع جديد

3

توسيع التجمع: إضافة جميع النقاط القابلة للوصول بالكثافة (جيران النقاط النواة)

4

إذا |N_ε(p)| < MinPts وp قابلة للوصول من نواة → p نقطة حدودية

5

إذا p غير قابلة للوصول من أي نواة → p ضوضاء (شذوذ، مُعلَّمة -1)

6

التكرار حتى زيارة جميع النقاط — O(n log n) مع الفهرس المكاني

</>

تنفيذ scikit-learn

code
python37 lines
from sklearn.cluster import KMeans, DBSCAN, AgglomerativeClustering
from sklearn.metrics import silhouette_score
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import make_blobs
import numpy as np

class="tok-comment"># ── Sample data ────────────────────────────────────────────────────────
X, _ = make_blobs(n_samples=class="tok-num">300, centers=class="tok-num">4, cluster_std=class="tok-num">0.8, random_state=class="tok-num">42)

class="tok-comment"># ── K-Means with K selection via silhouette ────────────────────────
X_scaled = StandardScaler().fit_transform(X)

best_k, best_score = class="tok-num">2, -class="tok-num">1
for k in range(class="tok-num">2, class="tok-num">11):
    km = KMeans(n_clusters=k, init=class="tok-str">'k-means++', n_init=class="tok-num">10, random_state=class="tok-num">42)
    labels = km.fit_predict(X_scaled)
    score = silhouette_score(X_scaled, labels)
    if score > best_score:
        best_k, best_score = k, score

km_final = KMeans(n_clusters=best_k, init=class="tok-str">'k-means++', n_init=class="tok-num">10, random_state=class="tok-num">42)
labels_km = km_final.fit_predict(X_scaled)
print(fclass="tok-str">"K={best_k}, silhouette={best_score:.3f}, inertia={km_final.inertia_:.1f}")

class="tok-comment"># ── DBSCAN — auto-detects clusters and outliers ────────────────────
db = DBSCAN(eps=class="tok-num">0.5, min_samples=class="tok-num">5)
labels_db = db.fit_predict(X_scaled)
n_clusters = len(set(labels_db)) - (class="tok-num">1 if -class="tok-num">1 in labels_db else class="tok-num">0)
n_noise    = list(labels_db).count(-class="tok-num">1)
print(fclass="tok-str">"DBSCAN: {n_clusters} clusters, {n_noise} noise points")

class="tok-comment"># ── Agglomerative — no K needed upfront (use dendrogram) ──────────
from scipy.cluster.hierarchy import dendrogram, linkage
Z = linkage(X_scaled, method=class="tok-str">'ward')
class="tok-comment"># Cut at K=class="tok-num">3
agg = AgglomerativeClustering(n_clusters=class="tok-num">3, linkage=class="tok-str">'ward')
labels_agg = agg.fit_predict(X_scaled)
⚠️

مزالق التجميع الشائعة

pitfall

التجميع بدون توسيع هو الخطأ رقم 1: الميزات ذات الأحجام الكبيرة تُهيمن على مقياس المسافة. دائماً وسِّع قبل التجميع. الخطأ الثاني: التعامل مع تسميات التجمع كحقيقة مطلقة — التجمعات فرضيات لا حقائق. تحقق مع خبراء المجال ومقاييس خارجية (إذا وُجدت تسميات، استخدم Adjusted Rand Index). الثالث: افتراض أن التجمعات ذات معنى — تحقق دائماً بفحص ملفات التجمعات.

تسميات التجمعات أعداد صحيحة عشوائية تتغير بين التشغيلات. لا تُثبِّت أبداً 'التجمع 0 = عملاء ذوو قيمة عالية' — دائماً صِف التجمعات بتوزيعات ميزاتها.

?اختبار المعرفة

يتم حفظ التقدم في متصفحك — لا حاجة لحساب.

تحتاج مهندس ذكاء اصطناعي أو عالم بيانات؟

أبني نماذج تعلم آلي مخصصة، ووكلاء ذكاء اصطناعي، ورؤية حاسوب، وأتمتة — من الفكرة إلى الإنتاج.