בחירת eps
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 22 מתוך 51.
eps הוא ניחוש עד שבודקים. עבור הפארק מנקודות הרעש, מדוד את המרחק של כל נקודה לשכנה ה־4 הקרובה ביותר שלה, כולל הנקודה עצמה, כמו ב־min_samples=4. מיין ושרטט:
נקודות צפופות נשארות נמוכות ושטוחות; נקודות בודדות מזנקות למעלה. נקודת הברך, שבה העקומה מתחילה לעלות, היא ערך eps טוב:
from sklearn.neighbors import NearestNeighbors
nn = NearestNeighbors(n_neighbors=4).fit(X)
distances, rows = nn.kneighbors(X)
ax.plot(np.sort(distances[:, -1]))kneighbors מחזירה את המרחקים של כל נקודה לארבע הנקודות הקרובות ביותר אליה, מהקרובה ביותר תחילה, לכן העמודה -1 היא הרביעית. np.sort ממיינת אותן.
אתגר
בינוניסייסמולוגים רוצים ש-DBSCAN ימצא את קווי השבר שמתחת לרעידות האדמה של שנה אחת, עם min_samples=5. בחרו את eps שלו.
- התאימו את
NearestNeighbors(n_neighbors=5)ל-Xוקבלו את המרחקים של כל רעידת אדמה. - שרטטו את המרחקים לשכנה החמישית הקרובה ביותר, כשהם ממוינים.
- הריצו וקראו את נקודת הברך. שמרו את הערך הזה ב-
eps, שרטטו אותו כקו אפור מקווקו באמצעותax.axhline, והציגו את הגרף.
באזור אחר, נקודת הברך הייתה קרובה ל-4 ק״מ:
Coddy מתאר את התרשים שלכם, ואז מריץ DBSCAN עם ערך ה-eps שלכם.
נסו בעצמכם
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import NearestNeighbors
# רעידות אדמה במשך שנה באזור אחד: מיקומו של כל מוקד נמדד ב-km
quakes = pd.read_csv("quakes.csv")
X = np.column_stack([quakes["east_km"], quakes["north_km"]])
fig, ax = plt.subplots()
ax.set_title("Distance to the 5th Nearest Quake")
ax.set_xlabel("Quakes, sorted")
ax.set_ylabel("Distance (km)")
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
תרגלו בעצמכם: קומפיילר Python אונליין