בצעו סקיילינג לפני קיבוץ לאשכולות
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 9 מתוך 51.
K-means מקבץ לפי מרחק, ולכן היחידות הגדולות ביותר קובעות. נבחן חתולי מחסה לפי משקל בגרמים וגיל בשנים: פער של 500 גרם גובר על פער של 10 שנים.
קודם בצעו סטנדרטיזציה, כמו עבור k-NN, כדי שכל תכונה תיחשב באותה מידה:
X_scaled = StandardScaler().fit_transform(X)
km = KMeans(n_clusters=3, n_init=10, random_state=0)
km.fit(X_scaled)make_pipeline(StandardScaler(), KMeans(...)) מבצע את שניהם במודל אחד. לאחר מכן, אפשר לקרוא כל קבוצה ביחידות המקוריות: לחשב את הממוצע של השורות המקוריות שלה, X[km.labels_ == c].mean(axis=0).
אתגר
קלאפליקציה למציאת דירות מקבצת 100 מודעות לפי שכר הדירה והמרחק לתחנה. קוד הפתיחה מקבץ את העמודות הגולמיות, וכל הקבוצות שלו נמצאות במרחק של כ־3 ק״מ: הדולרים מטביעים את הקילומטרים.
- בצעו קנה מידה לשתי העמודות באמצעות
StandardScaler. - קבצו במקום זאת את השורות שעברו קנה מידה. השאירו את הדוח: הוא מציג כל קבוצה ביחידות אמיתיות.
עבור עיר אחרת:
38 flats: $1820 a month, 0.9 km out
33 flats: $1130 a month, 4.2 km out
29 flats: $2760 a month, 1.5 km outנסו בעצמכם
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
# שורה אחת לכל דירה: שכר דירה חודשי בדולרים, מרחק מהתחנה בק״מ
flats = pd.read_csv("flats.csv")
X = flats[["rent", "station_km"]]
# הקוד הזה מקבץ את העמודות הגולמיות: יש לתקן זאת
km = KMeans(n_clusters=3, n_init=10, random_state=0)
km.fit(X)
# הצג כל קבוצה ביחידות האמיתיות, מהגדולה לקטנה
sizes = pd.Series(km.labels_).value_counts()
for c in sizes.index:
group = flats[km.labels_ == c]
print(f"{sizes[c]} flats: ${round(group['rent'].mean())} a month, {group['station_km'].mean():.1f} km out")
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
תרגלו בעצמכם: קומפיילר Python אונליין