PCA
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 26 מתוך 51.
PCA מוצא את הכיוון שבו הפיזור הוא הגדול ביותר, ואז את הכיוון הטוב ביותר שניצב לו, וכן הלאה: אלה הרכיבים. עבור תאומי היין:
ההיטל של כל שורה על הרכיבים הראשונים הופך למאפיינים החדשים שלה:
from sklearn.decomposition import PCA
scaled = StandardScaler().fit_transform(X)
points = PCA(n_components=2).fit_transform(scaled)
print(X.shape, points.shape)עבור כל 13 המדידות של היין, זה מדפיס (178, 13) (178, 2).
קודם מבצעים קנה מידה. PCA מחפש פיזור, לכן תכונה ביחידות גדולות, כמו proline במאות, מנצחת רק בזכות הגודל שלה:
אתגר
בינוניבמעבדת מים בודקים בקבוקים משלושה מעיינות, עם 8 מדידות לכל אחד. האם מפה דו־ממדית יכולה להבחין בין המעיינות? draw_springs(ax, points) צובעת כל נקודה דו־ממדית לפי המעיין.
- בצעו קנה מידה ל־
X, ואז צמצמו אותו ל־2 רכיבים באמצעות PCA, אל תוךpoints. - הדפיסו את מספר התכונות לפני ואחרי.
- ציירו את הנקודות בעזרת
draw_springsוהציגו אותן.
למעבדה אחרת, עם 6 מדידות:
From 6 features to 2Coddy מתאר את המפה שלך.
נסו בעצמכם
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
# מעבדת מים: 8 מדידות לכל אחד מ־120 בקבוקים משלושה מעיינות
waters = pd.read_csv("waters.csv")
X = waters.drop(columns="spring")
# מציג נקודות 2D בתרשים פיזור, קבוצה אחת לכל מעיין, עם מקרא
def draw_springs(ax, points):
for spring in ["alpine", "volcanic", "coastal"]:
rows = (waters["spring"] == spring).to_numpy()
ax.scatter(points[rows, 0], points[rows, 1], s=16, label=spring)
ax.legend()
fig, ax = plt.subplots()
ax.set_title("Spring Waters in 2D")
ax.set_xlabel("First component")
ax.set_ylabel("Second component")
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
תרגלו בעצמכם: קומפיילר Python אונליין