Scikit Learn - MultiTaskElasticNet

MultiTaskElasticNet

È un modello Elastic-Net che consente di adattare più problemi di regressione congiuntamente imponendo che le caratteristiche selezionate siano le stesse per tutti i problemi di regressione, chiamati anche task. Sklearn fornisce un modello lineare denominatoMultiTaskElasticNet, addestrato con una norma mista L1, L2 e L2 per la regolarizzazione, che stima i coefficienti sparsi per più problemi di regressione congiuntamente. In questo, la risposta y è un array 2D di forma (n_samples, n_tasks).

Di seguito è riportata la funzione obiettivo per ridurre al minimo:

$$ \ displaystyle \ min \ limits_ {W} \ frac {1} {2n_ {samples}} \ lVert X_ {W} -Y \ rVert_ {fro} ^ 2 + \ alpha \ rho \ lVert W \ rVert_ {21} + \ frac {\ alpha \ lgroup 1- \ rho \ rgroup} {2} \ \ lVert W \ rVert_ {fro} ^ 2 $$

Come in MultiTaskLasso, anche qui Fro indica la norma Frobenius -

$$ \ lVert A \ rVert_ {Fro} = \ sqrt {\ displaystyle \ sum \ limits_ {ij}} a_ {ij} ^ 2 $$

E L1L2 porta a quanto segue:

$$ \ lVert A \ rVert_ {21} = \ displaystyle \ sum \ limits_ {i} \ sqrt {\ displaystyle \ sum \ limits_ {j}} a_ {ij} ^ 2 $$

Il parameters e il attributes per MultiTaskElasticNet sono come quello di ElasticNet. L'unica differenza è nel li_ratio, ovvero nel parametro di miscelazione ElasticNet. InMultiTaskElasticNetil suo range è 0 <l1_ratio <= 1. Se l1_ratio = 1, la penalità sarebbe L1 / L2. 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 / L2 e L2.

E, al contrario di ElasticNet, MultiTaskElasticNet non ha precompute attributo.

Esempio di implementazione

Per mostrare la differenza, stiamo implementando lo stesso esempio che abbiamo fatto in Multi-task Lasso -

from sklearn import linear_model
MTENReg = linear_model.MultiTaskElasticNet(alpha = 0.5)
MTENReg.fit([[0,0], [1, 1], [2, 2]], [[0, 0],[1,1],[2,2]])

Output

MultiTaskElasticNet(alpha = 0.5, copy_X = True, fit_intercept = True, l1_ratio = 0.5,
max_iter = 1000, normalize = False, random_state = None,
selection = 'cyclic', tol = 0.0001, warm_start = False)

Example

#Predicting new values
MTENReg.predict([[1,0]])

Output

array([[0.69056563, 0.69056563]])

Example

#weight vectors
MTENReg.coef_

Output

array([[0.30943437, 0.30938224],
[0.30943437, 0.30938224]])

Example

#Calculating intercept
MTENReg.intercept_

Output

array([0.38118338, 0.38118338])

Example

#Calculating number of iterations
MTENReg.n_iter_

Output

15