Scikit Learn - Elastic-Net
Elastic-Net è un metodo di regressione regolarizzato che combina linearmente entrambe le penalità, ovvero L1 e L2 dei metodi di regressione Lazo e Ridge. È utile quando sono presenti più funzionalità correlate. La differenza tra Lass e Elastic-Net sta nel fatto che è probabile che Lasso scelga una di queste caratteristiche a caso mentre è probabile che Elastic-Net scelga entrambe contemporaneamente.
Sklearn fornisce un modello lineare denominato ElasticNetche viene allenato con entrambe le norme L1, L2 per la regolarizzazione dei coefficienti. Il vantaggio di tale combinazione è che consente di apprendere un modello sparso in cui pochi pesi sono diversi da zero come il metodo di regolarizzazione del lazo, pur mantenendo le proprietà di regolarizzazione del metodo di regolarizzazione della cresta.
Di seguito è riportata la funzione obiettivo per ridurre al minimo:
$$ \ displaystyle \ min \ limits_ {w} \ frac {1} {2n_ {samples}} \ lVert X_ {w} -Y \ rVert_2 ^ 2 + \ alpha \ rho \ lVert W \ rVert_1 + \ frac {\ alpha \ lgroup 1- \ rho \ rgroup} {2} \ \ lVert W \ rVert_2 ^ 2 $$Parametri
La tabella seguente è composta dai parametri utilizzati da ElasticNet modulo -
Suor n | Parametro e descrizione |
---|---|
1 | alpha - float, opzionale, default = 1.0 Alpha, la costante che moltiplica il termine L1 / L2, è il parametro di tuning che decide quanto si vuole penalizzare il modello. Il valore predefinito è 1.0. |
2 | l1_ratio - galleggiante Questo è chiamato parametro di miscelazione ElasticNet. Il suo range è 0 <= l1_ratio <= 1. Se l1_ratio = 1, la penalità sarebbe L1. Se l1_ratio = 0, la penalità sarebbe una penalità L2. Se il valore del rapporto l1 è compreso tra 0 e 1, la penalità sarebbe la combinazione di L1 e L2. |
3 | fit_intercept- Booleano, facoltativo. Impostazione predefinita = vero Questo parametro specifica che una costante (bias o intercetta) deve essere aggiunta alla funzione di decisione. Nessuna intercetta verrà utilizzata nel calcolo, se verrà impostata su false. |
4 | tol - galleggiante, opzionale Questo parametro rappresenta la tolleranza per l'ottimizzazione. Il valore tol e gli aggiornamenti vengono confrontati e se vengono trovati aggiornamenti inferiori a tol, l'ottimizzazione controlla il doppio gap per l'ottimalità e continua fino a quando non è inferiore a tol. |
5 | normalise - Booleano, opzionale, predefinito = False Se questo parametro è impostato su True, il regressore X verrà normalizzato prima della regressione. La normalizzazione verrà effettuata sottraendo la media e dividendola per la norma L2. Sefit_intercept = False, questo parametro verrà ignorato. |
6 | precompute - True | False | array-like, default = False Con questo parametro possiamo decidere se utilizzare una matrice di Gram precalcolata per velocizzare o meno il calcolo. Per preservare la scarsità, sarebbe sempre vero per l'input scarso. |
7 | copy_X - Booleano, opzionale, predefinito = True Per impostazione predefinita, è vero, il che significa che X verrà copiato. Ma se è impostato su false, X potrebbe essere sovrascritto. |
8 | max_iter - int, opzionale Come suggerisce il nome, rappresenta il numero massimo di iterazioni prese per risolutori di gradiente coniugato. |
9 | warm_start - bool, opzionale, predefinito = false Con questo parametro impostato su True, possiamo riutilizzare la soluzione della chiamata precedente per adattarla come inizializzazione. Se scegliamo default cioè false, cancellerà la soluzione precedente. |
10 | random_state - int, istanza RandomState o None, opzionale, default = nessuno Questo parametro rappresenta il seme del numero pseudo casuale generato che viene utilizzato durante la mescolanza dei dati. Di seguito sono riportate le opzioni:
|
11 | selection - str, default = 'ciclico'
|
Attributi
La tabella seguente è costituita dagli attributi utilizzati da ElasticNet modulo -
Suor n | Attributi e descrizione |
---|---|
1 | coef_ - array, forma (n_tasks, n_features) Questo attributo fornisce i vettori del peso. |
2 | Intercept_ - array, forma (n_tasks) Rappresenta il termine indipendente nella funzione decisionale. |
3 | n_iter_ - int Fornisce il numero di iterazioni eseguite dal risolutore della discesa delle coordinate per raggiungere la tolleranza specificata. |
Esempio di implementazione
Seguendo gli usi dello script Python ElasticNet modello lineare che utilizza ulteriormente la discesa delle coordinate come algoritmo per adattare i coefficienti -
from sklearn import linear_model
ENreg = linear_model.ElasticNet(alpha = 0.5,random_state = 0)
ENreg.fit([[0,0], [1, 1], [2, 2]], [0, 1, 2])
Produzione
ElasticNet(alpha = 0.5, copy_X = True, fit_intercept = True, l1_ratio = 0.5,
max_iter = 1000, normalize = False, positive = False, precompute=False,
random_state = 0, selection = 'cyclic', tol = 0.0001, warm_start = False)
Esempio
Ora, una volta adattato, il modello può prevedere nuovi valori come segue:
ENregReg.predict([[0,1]])
Produzione
array([0.73686077])
Esempio
Per l'esempio sopra, possiamo ottenere il vettore di peso con l'aiuto del seguente script python:
ENreg.coef_
Produzione
array([0.26318357, 0.26313923])
Esempio
Allo stesso modo, possiamo ottenere il valore di intercettazione con l'aiuto del seguente script python -
ENreg.intercept_
Produzione
0.47367720941913904
Esempio
Possiamo ottenere il numero totale di iterazioni per ottenere la tolleranza specificata con l'aiuto del seguente script python -
ENreg.n_iter_
Produzione
15
Possiamo modificare i valori di alfa (verso 1) per ottenere risultati migliori dal modello.
Esempio
Vediamo lo stesso esempio con alpha = 1.
from sklearn import linear_model
ENreg = linear_model.ElasticNet(alpha = 1,random_state = 0)
ENreg.fit([[0,0], [1, 1], [2, 2]], [0, 1, 2])
Output
ElasticNet(alpha = 1, copy_X = True, fit_intercept = True, l1_ratio = 0.5,
max_iter = 1000, normalize = False, positive = False, precompute = False,
random_state = 0, selection = 'cyclic', tol = 0.0001, warm_start = False)
#Predicting new values
ENreg.predict([[1,0]])
Output
array([0.90909216])
#weight vectors
ENreg.coef_
Output
array([0.09091128, 0.09090784])
#Calculating intercept
ENreg.intercept_
Output
0.818180878658411
#Calculating number of iterations
ENreg.n_iter_
Output
10
Dagli esempi precedenti, possiamo vedere la differenza nelle uscite.