In che modo la standardizzazione e la normalizzazione influiscono sui coefficienti dei modelli lineari?

Aug 22 2020

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

3 Peter Aug 22 2020 at 01:47

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 .

1 10xAI Aug 22 2020 at 18:53

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.