Menu
CoddyTech

PCA

חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 26 מתוך 51.

PCA מוצא את הכיוון שבו הפיזור הוא הגדול ביותר, ואז את הכיוון הטוב ביותר שניצב לו, וכן הלאה: אלה הרכיבים. עבור תאומי היין:

תאומי היין המנורמלים כענן העולה ימינה, עם שני חצים אדומים מהמרכז: חץ ארוך, רכיב 1, לאורך הענן, וחץ קצר, רכיב 2, לרוחבו

ההיטל של כל שורה על הרכיבים הראשונים הופך למאפיינים החדשים שלה:

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 במאות, מנצחת רק בזכות הגודל שלה:

שתי מפות PCA של 178 היינות. משמאל, ללא קנה מידה: שלושת הזנים חופפים ומופיעים ככתם אחד. מימין, לאחר ביצוע קנה מידה: שלוש קבוצות ברורות

challenge icon

אתגר

בינוני

במעבדת מים בודקים בקבוקים משלושה מעיינות, עם 8 מדידות לכל אחד. האם מפה דו־ממדית יכולה להבחין בין המעיינות? draw_springs(ax, points) צובעת כל נקודה דו־ממדית לפי המעיין.

  1. בצעו קנה מידה ל־X, ואז צמצמו אותו ל־2 רכיבים באמצעות PCA, אל תוך points.
  2. הדפיסו את מספר התכונות לפני ואחרי.
  3. ציירו את הנקודות בעזרת draw_springs והציגו אותן.

למעבדה אחרת, עם 6 מדידות:

From 6 features to 2

תרשים שכותרתו Spring Waters in 2D, כשהרכיב הראשון מופיע לרוחב והשני למעלה: בקבוקי alpine בפינה השמאלית התחתונה, volcanic בפינה הימנית התחתונה ו-coastal בחלק העליון, עם מקרא

Coddy מתאר את המפה שלך.

נסו בעצמכם

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")

# כתבו את הקוד שלכם למטה
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה למידה בלתי מונחית

תרגלו בעצמכם: קומפיילר Python אונליין