Γραμμική Παλινδρόμηση

2.1.1

Γραμμική Παλινδρόμηση

Ενημέρωση 2020-01-29 Ανάγνωση 3 λεπτά
Σύνοψη
  • Η γραμμική παλινδρόμηση μοντελοποιεί τη γραμμική σχέση μεταξύ εισόδων και εξόδων και παρέχει μια βάση αναφοράς που είναι τόσο προβλεπτική όσο και ερμηνεύσιμη.
  • Η μέθοδος ελαχίστων τετραγώνων εκτιμά τους συντελεστές ελαχιστοποιώντας το άθροισμα των τετραγωνικών υπολοίπων, δίνοντας μια λύση κλειστής μορφής.
  • Η κλίση μας λέει πόσο αλλάζει η έξοδος όταν η είσοδος αυξάνεται κατά μία μονάδα, ενώ η τεταγμένη στην αρχή αντιπροσωπεύει την αναμενόμενη τιμή όταν η είσοδος είναι μηδέν.
  • Όταν ο θόρυβος ή οι ακραίες τιμές είναι μεγάλες, εξετάστε την τυποποίηση και τις ανθεκτικές παραλλαγές, ώστε η προεπεξεργασία και η αξιολόγηση να παραμένουν αξιόπιστες.

Εισαγωγή #

Αυτή η μέθοδος πρέπει να ερμηνεύεται μέσα από τις υποθέσεις της, τις συνθήκες των δεδομένων και τον τρόπο με τον οποίο οι επιλογές παραμέτρων επηρεάζουν τη γενίκευση.

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

Μαθηματική Διατύπωση #

Ένα μονομεταβλητό γραμμικό μοντέλο γράφεται ως

$$ y = w x + b. $$

Ελαχιστοποιώντας το άθροισμα των τετραγωνικών υπολοίπων \(\epsilon_i = y_i - (w x_i + b)\)

$$ L(w, b) = \sum_{i=1}^{n} \big(y_i - (w x_i + b)\big)^2, $$

λαμβάνουμε την αναλυτική λύση

$$ w = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{n} (x_i - \bar{x})^2}, \qquad b = \bar{y} - w \bar{x}, $$

όπου \(\bar{x}\) και \(\bar{y}\) είναι οι μέσοι όροι των \(x\) και \(y\). Η ίδια ιδέα επεκτείνεται στην πολυμεταβλητή παλινδρόμηση με διανύσματα και πίνακες.

Πειράματα σε Python #

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

from __future__ import annotations

import japanize_matplotlib
import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

def plot_simple_linear_regression(n_samples: int = 100) -> None:
    """Plot a fitted linear regression model for synthetic data.

    Args:
        n_samples: Number of synthetic samples to generate.
    """
    japanize_matplotlib.japanize()
    rng = np.random.default_rng(seed=0)

    X: np.ndarray = np.linspace(-5.0, 5.0, n_samples, dtype=float)[:, np.newaxis]
    noise: np.ndarray = rng.normal(scale=2.0, size=n_samples)
    y: np.ndarray = 2.0 * X.ravel() + 1.0 + noise

    model = make_pipeline(StandardScaler(with_mean=False), LinearRegression())
    model.fit(X, y)
    y_pred: np.ndarray = model.predict(X)

    fig, ax = plt.subplots(figsize=(10, 5))
    ax.scatter(X, y, marker="x", label="Observed data", c="orange")
    ax.plot(X, y_pred, label="Regression fit")
    ax.set_xlabel("$x$")
    ax.set_ylabel("$y$")
    ax.legend()
    fig.tight_layout()
    plt.show()

plot_simple_linear_regression()

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

Ανάγνωση των αποτελεσμάτων #

  • Κλίση \(w\): δείχνει πόσο αυξάνεται ή μειώνεται η έξοδος όταν η είσοδος αυξάνεται κατά μία μονάδα. Η εκτίμηση πρέπει να είναι κοντά στην πραγματική κλίση.
  • Τεταγμένη στην αρχή \(b\): δείχνει την αναμενόμενη έξοδο όταν η είσοδος είναι 0, ρυθμίζοντας την κατακόρυφη θέση της ευθείας.
  • Η τυποποίηση των χαρακτηριστικών με StandardScaler σταθεροποιεί τη μάθηση όταν οι είσοδοι διαφέρουν σε κλίμακα.

Αναφορές #

  • Draper, N. R., & Smith, H. (1998). Applied Regression Analysis (3rd ed.). John Wiley & Sons.
  • Hastie, T., Tibshirani, R., & Friedman, J. (2009). The Elements of Statistical Learning. Springer.