Aprender Scikit - Elastic-Net
Elastic-Net es un método de regresión regularizado que combina linealmente ambas penalizaciones, es decir, L1 y L2 de los métodos de regresión Lasso y Ridge. Es útil cuando hay varias funciones correlacionadas. La diferencia entre Lass y Elastic-Net radica en el hecho de que es probable que Lasso elija una de estas características al azar, mientras que es probable que elastic-net elija ambas a la vez.
Sklearn proporciona un modelo lineal llamado ElasticNetque se entrena con las normas L1, L2 para la regularización de los coeficientes. La ventaja de tal combinación es que permite aprender un modelo disperso donde algunos de los pesos son distintos de cero como el método de regularización de Lasso, mientras se mantienen las propiedades de regularización del método de regularización de Ridge.
A continuación se muestra la función objetivo para minimizar:
$$ \ Displaystyle \ min \ limits_ {w} \ frac {1} {2n_ {samples}} \ lVert X_ {w} -Y \ rVert_2 ^ 2 + \ alpha \ rho \ lVert W \ rVert_1 + \ frac {\ alpha \ lgrupo 1- \ rho \ rgrupo} {2} \ \ lVert W \ rVert_2 ^ 2 $$Parámetros
La siguiente tabla consta de los parámetros utilizados por ElasticNet módulo -
No Señor | Descripción de parámetros |
---|---|
1 | alpha - flotante, opcional, predeterminado = 1.0 Alpha, la constante que multiplica el término L1 / L2, es el parámetro de ajuste que decide cuánto queremos penalizar al modelo. El valor predeterminado es 1.0. |
2 | l1_ratio - flotar Esto se denomina parámetro de mezcla de ElasticNet. Su rango es 0 <= l1_ratio <= 1. Si l1_ratio = 1, la penalización sería L1. 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 y L2. |
3 | fit_intercept- Booleano, opcional. Predeterminado = Verdadero Este parámetro especifica que se debe agregar una constante (sesgo o intersección) a la función de decisión. No se utilizará ninguna intersección en el cálculo, si se establece en falso. |
4 | tol - flotador, opcional Este parámetro representa la tolerancia para la optimización. El valor de tol y las actualizaciones se compararían y, si se encuentran actualizaciones más pequeñas que tol, la optimización comprueba la optimización de la brecha dual y continúa hasta que sea más pequeña que tol. |
5 | normalise - Booleano, opcional, predeterminado = Falso Si este parámetro se establece en Verdadero, el regresor X se normalizará antes de la regresión. La normalización se realizará restando la media y dividiéndola por la norma L2. Sifit_intercept = False, este parámetro será ignorado. |
6 | precompute - Verdadero | Falso | similar a una matriz, predeterminado = Falso Con este parámetro podemos decidir si usar una matriz de Gram precalculada para acelerar el cálculo o no. Para preservar la escasez, siempre sería cierto para la entrada escasa. |
7 | copy_X - Booleano, opcional, predeterminado = Verdadero De forma predeterminada, es verdadero, lo que significa que se copiará X. Pero si se establece en falso, X puede sobrescribirse. |
8 | max_iter - int, opcional Como sugiere el nombre, representa el número máximo de iteraciones tomadas para los solucionadores de gradientes conjugados. |
9 | warm_start - bool, opcional, predeterminado = falso Con este parámetro establecido en True, podemos reutilizar la solución de la llamada anterior para que encaje como inicialización. Si elegimos default, es decir, falso, borrará la solución anterior. |
10 | random_state - int, instancia de RandomState o None, opcional, predeterminado = ninguno Este parámetro representa la semilla del número pseudoaleatorio generado que se usa mientras se barajan los datos. Las siguientes son las opciones:
|
11 | selection - str, predeterminado = 'cíclico'
|
Atributos
La siguiente tabla consta de los atributos utilizados por ElasticNet módulo -
No Señor | Atributos y descripción |
---|---|
1 | coef_ - matriz, forma (n_tareas, n_features) Este atributo proporciona los vectores de peso. |
2 | Intercept_ - matriz, forma (n_tareas) Representa el término independiente en función de decisión. |
3 | n_iter_ - int Proporciona el número de iteraciones ejecutadas por el solucionador de descenso de coordenadas para alcanzar la tolerancia especificada. |
Ejemplo de implementación
Siguiendo los usos del script de Python ElasticNet modelo lineal que utiliza además el descenso de coordenadas como algoritmo para ajustar los coeficientes -
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])
Salida
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)
Ejemplo
Ahora, una vez ajustado, el modelo puede predecir nuevos valores de la siguiente manera:
ENregReg.predict([[0,1]])
Salida
array([0.73686077])
Ejemplo
Para el ejemplo anterior, podemos obtener el vector de peso con la ayuda del siguiente script de Python:
ENreg.coef_
Salida
array([0.26318357, 0.26313923])
Ejemplo
Del mismo modo, podemos obtener el valor de la intercepción con la ayuda de la siguiente secuencia de comandos de Python:
ENreg.intercept_
Salida
0.47367720941913904
Ejemplo
Podemos obtener el número total de iteraciones para obtener la tolerancia especificada con la ayuda del siguiente script de Python:
ENreg.n_iter_
Salida
15
Podemos cambiar los valores de alfa (hacia 1) para obtener mejores resultados del modelo.
Ejemplo
Veamos el mismo ejemplo 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
De los ejemplos anteriores, podemos ver la diferencia en las salidas.