In che modo la standardizzazione e la normalizzazione influiscono sui coefficienti dei modelli lineari?
Un vantaggio della creazione di un modello lineare è che puoi guardare i coefficienti che il modello apprende e interpretarli. Ad esempio, puoi vedere quali funzioni hanno il potere predittivo maggiore e quali no.
Come, se non del tutto, cambia l'interpretabilità delle caratteristiche se normalizziamo (ridimensioniamo tutte le caratteristiche a 0-1) tutte le nostre caratteristiche rispetto alla standardizzazione (sottrarre la media e dividere per la deviazione standard) prima di adattare il modello.
Ho letto altrove che "perdi l'interpretabilità delle caratteristiche se normalizzi le tue caratteristiche", ma non riesci a trovare una spiegazione del motivo. Se è vero, potresti spiegare per favore?
Ecco due screenshot dei coefficienti per due modelli di regressione lineare multipla che ho costruito. Utilizza i dati e le statistiche di Gapminder 2008 su ciascun paese per prevedere il suo tasso di fertilità.
Nel primo, ho ridimensionato le funzionalità utilizzando StandardScaler. Nel secondo, ho usato MinMaxScaler. Le funzionalità Region_ sono categoriali e sono state codificate a caldo e non ridimensionate.
Non solo i coefficienti sono cambiati in base alle diverse scale, ma anche il loro ordine (di importanza?)! Perché è così? Cosa significa?


Risposte
Quando hai una regressione lineare (senza alcun ridimensionamento, solo numeri semplici) e hai un modello con una variabile esplicativa $x$ e coefficienti $\beta_0=0$ e $\beta_1=1$, quindi essenzialmente hai una funzione (stimata):
$$y = 0 + 1x .$$
Questo ti dice che quando $x$ va su (giù) di un'unità, $y$va su (giù) di un'unità. In questo caso è solo una funzione lineare con pendenza 1.
Ora quando riduci $x$ (i numeri semplici) come:
scale(c(1,2,3,4,5))
[,1]
[1,] -1.2649111
[2,] -0.6324555
[3,] 0.0000000
[4,] 0.6324555
[5,] 1.2649111
essenzialmente hai unità diverse o una scala diversa (con media = 0, sd = 1).
Tuttavia, il modo in cui funziona OLS sarà lo stesso, ti dice ancora "se $x$ va su (giù) di un'unità, $y$ cambierà da $\beta_1$unità. Quindi in questo caso (data una scala diversa di$x$), $\beta_1$ sarà diverso.
L'interpretazione qui sarebbe "se $x$ cambia di una deviazione standard ... ". Questo è molto utile quando ne hai diversi $x$con diverse unità. Quando standardizzi tutte le diverse unità, le rendi comparabili in una certa misura. Cioè il$\beta$ i coefficienti della tua regressione saranno confrontabili in termini di intensità dell'impatto delle variabili $y$è. Questo a volte è chiamato coefficienti beta o coefficienti standardizzati .
Una cosa molto simile accade quando ti normalizzi. In questo caso cambierai anche la scala di$x$, quindi il modo in cui $x$ è misurato.
Vedi anche questo volantino .
Credo con il ridimensionamento, il coeff. vengono ridimensionati dello stesso livello, ovvero Std. Tempi di deviazione con Standardizzazione e Tempi (Max-Min) con Normalizzazione
Se guardiamo tutte le funzionalità individualmente, le stiamo sostanzialmente spostando e quindi ridimensionandole di un costante ma $y$ è invariato.
Quindi, se immaginiamo una linea in uno spazio 2-D , manteniamo l'estensione$y$ stesso e stringendo il file $x$ da una costante (supponiamo che = $C$).
Ciò implica (Assumendo Coeff. = Slope =$tan{\theta}$= dy / dx), anche
la pendenza aumenterà della stessa quantità, ad es$C$volte. (Da allora, dx è stato diviso per una costante ($C$) ma dy è lo stesso, quindi $tan{\theta}$ cioè pendenza = $C$* old_slope (cioè la pendenza prima del ridimensionamento)
Possiamo osservare in questo frammento che entrambi i coefficienti sono rispettivamente nel rapporto tra la deviazione standard e (Max - Min) rispetto al coefficiente non graduato
import sys;import os;import pandas as pd, numpy as np
os.environ['KAGGLE_USERNAME'] = "10xAI"
os.environ['KAGGLE_KEY'] = "<<Your Key>>"
import kaggle
!kaggle datasets download -d camnugent/california-housing-prices
dataset = pd.read_csv("/content/california-housing-prices.zip")
y = dataset.pop('median_house_value')
x = dataset.iloc[:,:4]
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x,y)
old_coef = model.coef_
x_s = (x-x.mean())/x.std()
model.fit(x_s,y)
std_coef = model.coef_
print("###Ratio of Scaled Coeff and Std. Deviation times Standardized Coeff")
print(std_coef/(old_coef*x.std()))
x_n = (x-x.min())/(x.max()-x.min())
model.fit(x_n,y)
nor_coef = model.coef_
print("###Ratio of Scaled Coeff and (Max - Min) times Normalized Coeff")
print(nor_coef/(old_coef*(x.max()-x.min())))

Quindi, puoi calcolare il coefficiente non graduato da coeff. Standardizzato e normalizzato.
Importanza
L'ordine (poiché è valori ordinati) potrebbe cambiare perché la deviazione standard non sarà uguale a (Max - Min) .
Ma questo non dovrebbe influire sull'importanza. L'importanza dovrebbe essere misurata nello spazio dati originale O l'unità dovrebbe essere di deviazione standard ( come spiegato da Peter ) O (Max - Min) ma potrebbe non essere molto intuitivo per ogni utente.