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.