PC A.el

PC A.el

Ενημέρωση 2026-02-24 Ανάγνωση 2 λεπτά
Σύνοψη
  • Ο PCA βρίσκει ορθογώνιες κατευθύνσεις μέγιστης διακύμανσης και προβάλλει τα δεδομένα στις κυρίαρχες συνιστώσες.
  • Οι αναλογίες εξηγούμενης διακύμανσης παρέχουν ποσοτικό τρόπο επιλογής του αριθμού συνιστωσών.
  • Η κλιμάκωση χαρακτηριστικών επηρεάζει σημαντικά τον PCA, οπότε η τυποποίηση είναι συχνά υποχρεωτική.

Εισαγωγή #

Ο PCA περιστρέφει το σύστημα συντεταγμένων προς κατευθύνσεις που συλλαμβάνουν το μεγαλύτερο μέρος της μεταβλητότητας. Διατηρώντας μόνο τους ισχυρότερους άξονες, συμπιέζει τα δεδομένα ενώ διατηρεί την κυρίαρχη δομή.

Αναλυτική Επεξήγηση #

1. Γιατί PCA; #

  • Τα δεδομένα υψηλών διαστάσεων είναι δύσκολο να ερμηνευτούν και να οπτικοποιηθούν· ο PCA βρίσκει ορθογώνιες κατευθύνσεις που συνοψίζουν το μεγαλύτερο μέρος της διακύμανσης.
  • Η μέθοδος είναι μη επιβλεπόμενη: δεν χρησιμοποιεί ετικέτες, μόνο τη δομή συνδιακύμανσης των δεδομένων.
  • Μόλις προβάλλουμε στις κύριες συνιστώσες, μπορούμε να οπτικοποιήσουμε, να αφαιρέσουμε θόρυβο ή να τροφοδοτήσουμε τα συμπιεσμένα χαρακτηριστικά σε μοντέλα κατάντη.

2. Μαθηματικά #

Δεδομένου ενός πίνακα δεδομένων με μηδενικό μέσο (X \in \mathbb{R}^{n \times d}):

  1. Πίνακας συνδιακύμανσης $$ \Sigma = \frac{1}{n} X^\top X $$
  2. Ιδιοανάλυση $$ \Sigma v_j = \lambda_j v_j $$ όπου (v_j) είναι τα ιδιοδιανύσματα (κύριοι άξονες) και (\lambda_j) οι ιδιοτιμές (εξηγούμενη διακύμανση).
  3. Προβολή $$ Z = X V_k $$ χρησιμοποιώντας τα κορυφαία (k) ιδιοδιανύσματα.

3. Δημιουργία δείγματος δεδομένων #

import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from sklearn.datasets import make_blobs

X, y = make_blobs(n_samples=600, n_features=3, random_state=117117)

fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(projection="3d")
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y)
ax.set_xlabel("$x_1$")
ax.set_ylabel("$x_2$")
ax.set_zlabel("$x_3$")

Τρισδιάστατα blobs


4. Εκτέλεση PCA με scikit-learn #

from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

pca = PCA(n_components=2, whiten=True)
X_pca = pca.fit_transform(StandardScaler().fit_transform(X))

plt.figure(figsize=(8, 8))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y)
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.title("2-D embedding via PCA")
plt.show()

Προβολή PCA


5. Η κλιμάκωση έχει σημασία #

from sklearn.preprocessing import StandardScaler

X, y = make_blobs(
    n_samples=200,
    n_features=3,
    random_state=11711,
    centers=3,
    cluster_std=2.0,
)
X[:, 1] *= 1000
X[:, 2] *= 0.01

X_ss = StandardScaler().fit_transform(X)

pca = PCA(n_components=2).fit(X)
X_pca = pca.transform(X)

pca_ss = PCA(n_components=2).fit(X_ss)
X_pca_ss = pca_ss.transform(X_ss)

plt.figure(figsize=(10, 5))
plt.subplot(121)
plt.title("Unscaled features")
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, marker="x", alpha=0.6)
plt.subplot(122)
plt.title("Scaled features")
plt.scatter(X_pca_ss[:, 0], X_pca_ss[:, 1], c=y, marker="x", alpha=0.6)
plt.show()

Επίδραση κλιμάκωσης

Ο PCA κυριαρχείται από χαρακτηριστικά με μεγάλη διακύμανση· η κλιμάκωση (ή λεύκανση) είναι απαραίτητη όταν οι μονάδες χαρακτηριστικών διαφέρουν.


6. Πρακτικές εκτιμήσεις #

  • Αναλογία εξηγούμενης διακύμανσης: (\lambda_j / \sum_i \lambda_i) βοηθά να αποφασίσετε πόσες κύριες συνιστώσες να κρατήσετε (συνήθως 80–90%).
  • Υπολογισμός: ο PCA υλοποιείται μέσω SVD εσωτερικά· χρησιμοποιήστε svd_solver='randomized' για μεγάλα σύνολα δεδομένων.
  • Kernel PCA: όταν ο γραμμικός PCA δεν αρκεί, μεταβείτε σε πυρήνες (δείτε την αντίστοιχη ενότητα) ή δοκιμάστε UMAP/t-SNE για τοπική δομή.