Menu
CoddyTech
flag Ar iconالعربيةdown icon

استخدام K-Means في scikit-learn

جزء من قسم التعلّم غير الخاضع للإشراف في رحلة Machine Learning على Coddy. الدرس 4 من 51.

ينفّذ scikit-learn حلقة خوارزمية k-means كاملةً نيابةً عنك، هنا على 180 تفاحة قُيّمت من حيث الحلاوة والقرمشة:

180 تفاحة، الحلاوة على المحور الأفقي والقرمشة على المحور الرأسي، موزعة على ثلاث مجموعات مع نجمة سوداء عند مركز كل مجموعة: حلوة ومقرمشة في أعلى اليمين، وطرية في الأسفل، وحامضة ومقرمشة في أعلى اليسار. تنضم تفاحة جديدة في أعلى اليمين إلى العنقود 0

الملاءمة باستخدام X فقط، دون y:

from sklearn.cluster import KMeans
km = KMeans(n_clusters=3, n_init=10, random_state=0)
km.fit(X)
print(km.labels_[:8])
print(km.cluster_centers_.round(1))

يطبع أرقام العناقيد للصفوف الثمانية، ثم صفًا واحدًا لكل مركز:

[2 0 0 1 2 0 1 1]
[[7.  7.5]
 [6.  3. ]
 [2.9 8.1]]

تجرّب n_init=10 عشر بدايات وتحتفظ بالأكثر تماسكًا. تعطي km.predict([[8.6, 9.2]]) التفاحة الجديدة أقرب مركز إليها، [0].

ينفّذ labels = km.fit_predict(X) الأمرين معًا: يدرّب النموذج، ثم يعيد labels_.

الأرقام مجرد أسماء: في بيانات أخرى، يمكن أن تكون المجموعة 0 أي مجموعة.

challenge icon

التحدي

سهل

سجّل عالم أحياء 150 غطسة لحوت أحدب: مدة الغطسة وفترة الراحة على السطح بعدها. هل توجد أنواع مختلفة من الغطس؟ يجهّز الكود المبدئي المخطط.

  1. درّب KMeans على X: 3 عناقيد، n_init=10، random_state=0.
  2. اعرض كل عنقود كمجموعة مستقلة، مع تسميته من cluster 0 إلى cluster 2.
  3. حدّد المراكز بنجوم سوداء، وسمّها centers. أضف وسيلة إيضاح واعرض المخطط.

مثل هذا، ولكن لحوت آخر:

مخطط مبعثر بعنوان غطسات الحوت، يعرض دقائق الغطس على المحور الأفقي وفترة الراحة على السطح على المحور العمودي: ثلاثة عناقيد، غطسات قصيرة مع فترات راحة طويلة في أعلى اليسار، وغطسات قصيرة مع فترات راحة قصيرة في الأسفل، وغطسات طويلة إلى اليمين، ونجمة سوداء في كل عنقود، ووسيلة إيضاح

يصف Coddy مخططك.

جرّب بنفسك

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# لا تغيّر الأسطر أدناه
rng = np.random.default_rng(14)
dive = np.concatenate([rng.normal(4, 1.0, 60), rng.normal(12, 2.0, 50), rng.normal(2.5, 0.7, 40)])
rest = np.concatenate([rng.normal(1.5, 0.5, 60), rng.normal(4, 1.0, 50), rng.normal(8, 1.5, 40)])
# 150 غوصة لحوت أحدب واحد: مدة الغوص ومدة الراحة على السطح بعده، بالدقائق
X = np.round(np.clip(np.column_stack([dive, rest]), 0.5, None), 1)

fig, ax = plt.subplots()
ax.set_title("Whale Dives")
ax.set_xlabel("Dive (min)")
ax.set_ylabel("Surface rest (min)")

# اكتب الكود الخاص بك أدناه
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس التعلّم غير الخاضع للإشراف

تدرّب بنفسك: مترجم Python عبر الإنترنت