אשכולות כמאפיינים
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 40 מתוך 51.
מודל קווי אינו יכול להתעקם. עוצמת האות של הטלפון בשלושה כפרים נחלשת ככל שמתרחקים מהאנטנה של כל כפר — צורה שהמיקום לבדו אינו חושף:
k-means מוצא את הכפרים. km.transform מחזירה את המרחק של כל שורה לכל מרכז, ו־.min(axis=1) שומרת את המרחק למרכז הקרוב ביותר:
km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(X_train)
near_train = km.transform(X_train).min(axis=1)
near_test = km.transform(X_test).min(axis=1)
X_train2 = np.column_stack([X_train, near_train])
X_test2 = np.column_stack([X_test, near_test])עם העמודה הנוספת הזו, ערך R בריבוע של מודל ליניארי במבחן עולה מ-0.000 ל-0.886.
בצע התאמה של k-means לשורות האימון בלבד, כמו לסקלר, ואז בצע טרנספורמציה לשני הקבוצות.
אתגר
בינוניצוות הסאונד של פסטיבל רוצה לדעת מה עוצמת הרעש במקומות שבהם אנשים עומדים. קוד הפתיחה מחלק את crowd.csv, קורא את k ומדפיס את הציון על סמך המיקום בלבד.
- התאימו מודל k-means עם
kאשכולות למיקומי האימון. - הוסיפו לכל שורה עמודה שלישית עם המרחק שלה למרכז הקרוב ביותר, בשתי הקבוצות.
- הדפיסו את R בריבוע החדש בבדיקה ואת השיפור, עם 3 ספרות עשרוניות.
עבור פסטיבל אחר ו-k = 4:
Position only: R squared 0.097
With the nearest of 4 centers: R squared 0.734
Gain: 0.637נסו בעצמכם
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.cluster import KMeans
# 250 משתתפי פסטיבל: היכן עמדו (m) ועוצמת הקול שם (dB)
crowd = pd.read_csv("crowd.csv")
X = crowd[["x_m", "y_m"]].to_numpy()
y = crowd["sound_db"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
k = int(input())
# מתאים מודל רגרסיה ליניארית לעמודות האימון ומחזיר את ערך R בריבוע שלו על עמודות הבדיקה
def test_r2(A_train, A_test):
model = LinearRegression().fit(A_train, y_train)
return model.score(A_test, y_test)
before = test_r2(X_train, X_test)
print(f"Position only: R squared {before:.3f}")
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
תרגלו בעצמכם: קומפיילר Python אונליין