דנדרוגרמות
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 18 מתוך 51.
העץ הפותח של הפרק הוא דנדרוגרמה. כל סוגר מחבר בין שתי קבוצות בגובה שבו הן התמזגו: ככל שרגליו גבוהות יותר, כך הן היו רחוקות יותר זו מזו.
חתכו אותו בקו, וכל ענף שהקו חוצה הופך לקבוצה. כאן, 4:
scipy בונה את העץ, מצייר אותו וחותך אותו באמצעות fcluster:
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
Z = linkage(scaled, "ward")
dendrogram(Z, labels=names, leaf_rotation=90, color_threshold=1.2, ax=ax)
ax.axhline(1.2, color="gray", linestyle="--")
groups = fcluster(Z, t=1.2, criterion="distance")
print(groups)זה מדפיס מספר קבוצה לכל כדור, כאשר כדורסל לבדו:
[2 2 2 1 1 1 3 3 3 4]חתכו דרך הקטעים הארוכים ביותר: הקבוצות שלמטה רחוקות זו מזו.
אתגר
בינונימדריך ימי מקבץ 16 לווייתנים ודולפינים לפי אורך, משקל ועומק צלילה. קוד הפתיחה מבצע להם קנה מידה וקורא את גובה החיתוך, cut.
- בנה את עץ Ward
Zוצייר אותו עלax: שמות בעלי החיים מסובבים ב־90 מעלות, והצבעים נעצרים בגובה החיתוך. - צייר את החיתוך כקו אפור מקווקו, ואז הצג את התרשים.
- הדפס את מספר הקבוצות.
עבור 11 פירות וחיתוך בגובה 3.5:
Cut at 3.5: 3 groupsCoddy מתאר את העץ שלך.
נסו בעצמכם
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
# 16 לווייתנים ודולפינים: אורך הגוף (m), משקל (tonnes), עומק הצלילה המרבי (m)
whales = pd.read_csv("whales.csv")
names = list(whales["animal"])
scaled = StandardScaler().fit_transform(whales[["length_m", "weight_t", "dive_m"]])
cut = float(input())
fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.3) # מקום לשמות מתחת לעץ
ax.set_title("Whales and Dolphins")
ax.set_ylabel("Merge height")
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
תרגלו בעצמכם: קומפיילר Python אונליין