Scikit Learn - Modelagem Linear Estendida

Este capítulo enfoca os recursos polinomiais e ferramentas de pipelining no Sklearn.

Introdução aos recursos polinomiais

Modelos lineares treinados em funções não lineares de dados geralmente mantêm o desempenho rápido dos métodos lineares. Também permite que eles ajustem uma gama muito mais ampla de dados. Essa é a razão pela qual no aprendizado de máquina esses modelos lineares, que são treinados em funções não lineares, são usados.

Um exemplo é que uma regressão linear simples pode ser estendida pela construção de recursos polinomiais a partir dos coeficientes.

Matematicamente, suponha que temos um modelo de regressão linear padrão, então para dados 2-D ficaria assim -

$$ Y = W_ {0} + W_ {1} X_ {1} + W_ {2} X_ {2} $$

Agora, podemos combinar os recursos em polinômios de segunda ordem e nosso modelo se parecerá com o seguinte -

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

O acima ainda é um modelo linear. Aqui, vimos que a regressão polinomial resultante está na mesma classe de modelos lineares e pode ser resolvida de forma semelhante.

Para fazer isso, o scikit-learn oferece um módulo chamado PolynomialFeatures. Este módulo transforma uma matriz de dados de entrada em uma nova matriz de dados de determinado grau.

Parâmetros

A tabela a seguir consiste nos parâmetros usados ​​por PolynomialFeatures módulo

Sr. Não Parâmetro e Descrição
1

degree - inteiro, padrão = 2

Ele representa o grau dos recursos polinomiais.

2

interaction_only - Booleano, padrão = falso

Por padrão, é falso, mas se definido como verdadeiro, os recursos que são produtos de recursos de entrada de muitos graus distintos são produzidos. Esses recursos são chamados de recursos de interação.

3

include_bias - Booleano, padrão = verdadeiro

Inclui uma coluna de polarização, ou seja, o recurso em que todas as potências de polinômios são zero.

4

order - str em {'C', 'F'}, padrão = 'C'

Este parâmetro representa a ordem da matriz de saída no caso denso. A ordem 'F' significa mais rápido para calcular, mas por outro lado, pode desacelerar estimadores subsequentes.

Atributos

A tabela a seguir consiste nos atributos usados ​​por PolynomialFeatures módulo

Sr. Não Atributos e descrição
1

powers_ - matriz, forma (n_output_features, n_input_features)

Mostra que powers_ [i, j] é o expoente da j-ésima entrada na i-ésima saída.

2

n_input_features _ - int

Como o nome sugere, ele fornece o número total de recursos de entrada.

3

n_output_features _ - int

Como o nome sugere, ele fornece o número total de recursos de saída polinomial.

Exemplo de Implementação

O seguinte script Python usa PolynomialFeatures transformador para transformar a matriz de 8 em 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)

Resultado

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.]
   ]
)

Racionalizando usando ferramentas Pipeline

O tipo de pré-processamento acima, ou seja, transformar uma matriz de dados de entrada em uma nova matriz de dados de um determinado grau, pode ser simplificado com o Pipeline ferramentas, que são basicamente usadas para encadear vários estimadores em um.

Exemplo

Os scripts python abaixo usando as ferramentas Pipeline do Scikit-learn para agilizar o pré-processamento (caberá em dados polinomiais de ordem 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_

Resultado

array([ 3., -2., 1., -1.])

A saída acima mostra que o modelo linear treinado em recursos polinomiais é capaz de recuperar os coeficientes polinomiais de entrada exatos.