Scikit Learn - MultiTaskElasticNet
MultiTaskElasticNet
É um modelo Elastic-Net que permite ajustar vários problemas de regressão em conjunto, obrigando os recursos selecionados a serem os mesmos para todos os problemas de regressão, também chamados de tarefas. Sklearn fornece um modelo linear denominadoMultiTaskElasticNet, treinado com uma norma mista L1, L2-norm e L2 para regularização, que estima coeficientes esparsos para problemas de regressão múltipla em conjunto. Nesse caso, a resposta y é um array 2D de forma (n_samples, n_tasks).
A seguir está a função objetivo para minimizar -
$$ \ displaystyle \ min \ limits_ {W} \ frac {1} {2n_ {amostras}} \ 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 em MultiTaskLasso, aqui também, Fro indica a norma Frobenius -
$$ \ lVert A \ rVert_ {Fro} = \ sqrt {\ displaystyle \ sum \ limits_ {ij}} a_ {ij} ^ 2 $$E L1L2 leva ao seguinte -
$$ \ lVert A \ rVert_ {21} = \ displaystyle \ sum \ limits_ {i} \ sqrt {\ displaystyle \ sum \ limits_ {j}} a_ {ij} ^ 2 $$o parameters e a attributes para MultiTaskElasticNet são como aqueles de ElasticNet. A única diferença está no li_ratio, ou seja, no parâmetro de mistura ElasticNet. DentroMultiTaskElasticNetseu intervalo é 0 <l1_ratio <= 1. Se l1_ratio = 1, a penalidade seria a penalidade L1 / L2. Se l1_ratio = 0, a penalidade seria uma penalidade L2. Se o valor da razão l1 estiver entre 0 e 1, a penalidade seria a combinação de L1 / L2 e L2.
E, oposto a ElasticNet, MultiTaskElasticNet não tem precompute atributo.
Exemplo de Implementação
Para mostrar a diferença, estamos implementando o mesmo exemplo que fizemos em 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