Menu
CoddyTech
flag Ar iconالعربيةdown icon

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 مدى الانتشار، لذا فإن الميزة بوحدات كبيرة، مثل البرولين الذي تُقاس قيمته بالمئات، تتفوق لمجرد حجمها:

خريطتان لـ PCA للنبيذ الـ 178. اليسرى، من دون تحجيم: تتداخل الأصناف الثلاثة في كتلة واحدة. اليمنى، بعد التحجيم أولًا: ثلاث مجموعات واضحة

challenge icon

التحدي

متوسط

يختبر مختبر مياه زجاجات من ثلاثة ينابيع، مع 8 قياسات لكل زجاجة. هل يمكن لخريطة ثنائية الأبعاد أن تميّز بين الينابيع؟ تلوّن draw_springs(ax, points) أي نقاط ثنائية الأبعاد حسب النبع.

  1. قِس X، ثم اختزلها إلى مكوّنين باستخدام PCA، واحفظ الناتج في points.
  2. اطبع عدد السمات قبل الاختزال وبعده.
  3. ارسم النقاط باستخدام draw_springs واعرضها.

في مختبر آخر، مع 6 قياسات:

From 6 features to 2

مخطط بعنوان مياه الينابيع في بُعدين، مع المكوّن الأول على المحور الأفقي والثاني على المحور الرأسي: زجاجات الينابيع الألبية في أسفل اليسار، والبركانية في أسفل اليمين، والساحلية في الأعلى، مع وسيلة إيضاح

يصف 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")


# يعرض نقاطًا ثنائية الأبعاد في مخطط مبعثر، بمجموعة لكل ينبوع، مع مفتاح توضيحي
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 عبر الإنترنت