Scikit Learn - MultiTaskElasticNet

MultiTaskElasticNet

C'est un modèle Elastic-Net qui permet d'ajuster plusieurs problèmes de régression en imposant conjointement les fonctionnalités sélectionnées pour être les mêmes pour tous les problèmes de régression, également appelés tâches. Sklearn fournit un modèle linéaire nomméMultiTaskElasticNet, formé avec une norme mixte L1, L2 et L2 pour la régularisation, qui estime conjointement les coefficients clairsemés pour les problèmes de régression multiple. En cela, la réponse y est un tableau 2D de forme (n_samples, n_tasks).

Voici la fonction objective pour minimiser -

$$ \ 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 $$

Comme dans MultiTaskLasso, ici aussi, Fro indique la norme de Frobenius -

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

Et L1L2 conduit à ce qui suit -

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

le parameters et le attributes pour MultiTaskElasticNet sont comme celui de ElasticNet. La seule différence réside dans le paramètre li_ratio, c'est-à-dire ElasticNet. DansMultiTaskElasticNetsa plage est 0 <l1_ratio <= 1. Si l1_ratio = 1, la pénalité serait une pénalité L1 / L2. Si l1_ratio = 0, la pénalité serait une pénalité L2. Si la valeur du rapport l1 est comprise entre 0 et 1, la pénalité serait la combinaison de L1 / L2 et L2.

Et, en face de ElasticNet, MultiTaskElasticNet n'a pas precompute attribut.

Exemple d'implémentation

Pour montrer la différence, nous implémentons le même exemple que nous l'avons fait dans 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