Aprender Scikit - MultiTaskElasticNet

MultiTaskElasticNet

Es un modelo Elastic-Net que permite ajustar múltiples problemas de regresión haciendo que las características seleccionadas sean las mismas para todos los problemas de regresión, también llamados tareas. Sklearn proporciona un modelo lineal llamadoMultiTaskElasticNet, entrenado con una norma mixta L1, L2 y L2 para la regularización, que estima coeficientes escasos para problemas de regresión múltiple de manera conjunta. En esto, la respuesta y es una matriz 2D de forma (n_samples, n_tasks).

A continuación se muestra la función objetivo para minimizar:

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

Como en MultiTaskLasso, aquí también, Fro indica la norma Frobenius -

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

Y L1L2 conduce a lo siguiente:

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

los parameters y el attributes para MultiTaskElasticNet son como los de ElasticNet. La única diferencia está en li_ratio, es decir, en el parámetro de mezcla de ElasticNet. EnMultiTaskElasticNetsu rango es 0 <l1_ratio <= 1. Si l1_ratio = 1, la penalización sería L1 / L2. Si l1_ratio = 0, la penalización sería una penalización L2. Si el valor de la relación l1 está entre 0 y 1, la penalización sería la combinación de L1 / L2 y L2.

Y, frente a ElasticNet, MultiTaskElasticNet no tiene precompute atributo.

Ejemplo de implementación

Para mostrar la diferencia, estamos implementando el mismo ejemplo que hicimos en 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