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.