Scikit Learn: modelado lineal extendido
Este capítulo se centra en las características polinomiales y las herramientas de canalización en Sklearn.
Introducción a las características polinomiales
Los modelos lineales entrenados en funciones no lineales de datos generalmente mantienen el desempeño rápido de los métodos lineales. También les permite adaptarse a una gama de datos mucho más amplia. Esa es la razón por la que en el aprendizaje automático se utilizan tales modelos lineales, que se entrenan en funciones no lineales.
Un ejemplo de ello es que una regresión lineal simple se puede ampliar construyendo características polinómicas a partir de los coeficientes.
Matemáticamente, supongamos que tenemos un modelo de regresión lineal estándar, entonces para datos 2-D se vería así:
$$ Y = W_ {0} + W_ {1} X_ {1} + W_ {2} X_ {2} $$Ahora, podemos combinar las características en polinomios de segundo orden y nuestro modelo se verá así:
$$ Y = W_ {0} + W_ {1} X_ {1} + W_ {2} X_ {2} + W_ {3} X_ {1} X_ {2} + W_ {4} X_1 ^ 2 + W_ { 5} X_2 ^ 2 $$Lo anterior sigue siendo un modelo lineal. Aquí, vimos que la regresión polinomial resultante pertenece a la misma clase de modelos lineales y se puede resolver de manera similar.
Para hacerlo, scikit-learn proporciona un módulo llamado PolynomialFeatures. Este módulo transforma una matriz de datos de entrada en una nueva matriz de datos de grado dado.
Parámetros
La siguiente tabla consta de los parámetros utilizados por PolynomialFeatures módulo
No Señor | Descripción de parámetros |
---|---|
1 | degree - entero, predeterminado = 2 Representa el grado de las características polinomiales. |
2 | interaction_only - Booleano, predeterminado = falso De forma predeterminada, es falso, pero si se establece como verdadero, se generan las entidades que son productos de la mayoría de las entidades de entrada de grado distinto. Estas características se denominan características de interacción. |
3 | include_bias - Booleano, predeterminado = verdadero Incluye una columna de sesgo, es decir, la característica en la que todas las potencias de los polinomios son cero. |
4 | order - str en {'C', 'F'}, predeterminado = 'C' Este parámetro representa el orden de la matriz de salida en el caso denso. El orden 'F' significa más rápido de calcular pero, por otro lado, puede ralentizar los estimadores posteriores. |
Atributos
La siguiente tabla consta de los atributos utilizados por PolynomialFeatures módulo
No Señor | Atributos y descripción |
---|---|
1 | powers_ - matriz, forma (n_output_features, n_input_features) Muestra poderes_ [i, j] es el exponente de la j-ésima entrada en la i-ésima salida. |
2 | n_input_features _ - int Como sugiere el nombre, proporciona el número total de funciones de entrada. |
3 | n_output_features _ - int Como sugiere el nombre, da el número total de entidades de salida polinomiales. |
Ejemplo de implementación
Siguiendo los usos del script de Python PolynomialFeatures transformador para transformar una matriz de 8 en forma (4,2) -
from sklearn.preprocessing import PolynomialFeatures
import numpy as np
Y = np.arange(8).reshape(4, 2)
poly = PolynomialFeatures(degree=2)
poly.fit_transform(Y)
Salida
array(
[
[ 1., 0., 1., 0., 0., 1.],
[ 1., 2., 3., 4., 6., 9.],
[ 1., 4., 5., 16., 20., 25.],
[ 1., 6., 7., 36., 42., 49.]
]
)
Optimización mediante herramientas de canalización
El tipo de preprocesamiento anterior, es decir, transformar una matriz de datos de entrada en una nueva matriz de datos de un grado dado, se puede simplificar con el Pipeline herramientas, que se utilizan básicamente para encadenar varios estimadores en uno.
Ejemplo
Los siguientes scripts de Python utilizan las herramientas Pipeline de Scikit-learn para agilizar el preprocesamiento (se ajustarán a un polinomio de datos de orden 3).
#First, import the necessary packages.
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
import numpy as np
#Next, create an object of Pipeline tool
Stream_model = Pipeline([('poly', PolynomialFeatures(degree=3)), ('linear', LinearRegression(fit_intercept=False))])
#Provide the size of array and order of polynomial data to fit the model.
x = np.arange(5)
y = 3 - 2 * x + x ** 2 - x ** 3
Stream_model = model.fit(x[:, np.newaxis], y)
#Calculate the input polynomial coefficients.
Stream_model.named_steps['linear'].coef_
Salida
array([ 3., -2., 1., -1.])
El resultado anterior muestra que el modelo lineal entrenado en entidades polinomiales es capaz de recuperar los coeficientes polinomiales de entrada exactos.