Menu
CoddyTech

ציוני Silhouette

חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 8 מתוך 51.

האינרציה תמיד משתפרת ככל ש־k גדל, ולכן צריך למצוא לה מרפק. מקדם הצללית מציב בפני כל נקודה שאלה הוגנת יותר: האם אני קרובה יותר לקבוצה שלי מאשר לקבוצה הבאה?

נקודה שחורה עם קווים רציפים אל 8 הנקודות בקבוצה שלה, אורך ממוצע a = 1.3, וקווים מקווקווים אל 8 הנקודות בקבוצה האחרת הקרובה ביותר, אורך ממוצע b = 3.4. מקדם הצללית שלה הוא 0.62

הניקוד של נקודה הוא (b - a) / max(a, b): קרוב ל־1 כשהיא צמודה לקבוצה שלה, קרוב ל־0 כשהיא על הגבול, ומתחת ל־0 כשהיא בקבוצה הלא נכונה. הממוצע נותן ציון לאשכול:

from sklearn.metrics import silhouette_score
for k in [2, 3, 4]:
    km = KMeans(n_clusters=k, n_init=10, random_state=0)
    km.fit(X)
    print(k, f"{silhouette_score(X, km.labels_):.3f}")

עבור התפוחים, זה מדפיס:

2 0.534
3 0.657
4 0.545

הוא מגיע לשיא ב-k הטוב ביותר, כאן 3, שבו הנקודות מרגישות הכי בבית.

challenge icon

אתגר

קל

שני חזאי מזג אוויר חלוקים בדעתם לגבי מספר סוגי הסופות שפוגעות בחוף שלהם. הקוד ההתחלתי מכיל 150 סופות, את מהירות הרוח המרבית ואת כמות הגשם, וקולט תחילה את k של Ana ואז את k של Ben.

  1. חשבו את ציון הצללית של כל k, עד 3 ספרות אחרי הנקודה העשרונית.
  2. הדפיסו ה-k של מי מתאים יותר.
  3. הדפיסו את ה-k הטוב ביותר בין 2 ל-8, יחד עם הציון שלו.

עבור חוף אחר:

Ana, k = 2: 0.512
Ben, k = 3: 0.574
Ben's k fits better
Best from 2 to 8: k = 3 (0.574)

נסו בעצמכם

import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

# אין לשנות את השורות שלהלן
rng = np.random.default_rng(6)
# ארבעה סוגי סופות: רוח וגשם אופייניים, וכמה סופות מכל סוג
kinds = [(30, 8, 40), (12, 34, 35), (21, 21, 30), (11, 9, 45)]
parts = []
for w, r, n in kinds:
    parts.append(np.column_stack([rng.normal(w, 2.5, n), rng.normal(r, 3, n)]))
# 150 סופות בחוף אחד, שורה לכל סופה: מהירות הרוח המרבית (m/s) וכמות הגשם (mm לשעה)
storms = np.round(np.concatenate(parts), 1)

# מספרי סוגי הסופות של שני החזאים
k_ana = int(input())
k_ben = int(input())

# כתבו את הקוד שלכם למטה
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה למידה בלתי מונחית

תרגלו בעצמכם: קומפיילר Python אונליין