Scikit Learn - Modellazione lineare estesa
Questo capitolo si concentra sulle caratteristiche polinomiali e sugli strumenti di pipelining in Sklearn.
Introduzione alle caratteristiche polinomiali
I modelli lineari addestrati su funzioni non lineari dei dati generalmente mantengono le prestazioni veloci dei metodi lineari. Inoltre, consente loro di adattare una gamma di dati molto più ampia. Questo è il motivo per cui nell'apprendimento automatico vengono utilizzati tali modelli lineari, addestrati su funzioni non lineari.
Uno di questi esempi è che una semplice regressione lineare può essere estesa costruendo caratteristiche polinomiali dai coefficienti.
Matematicamente, supponiamo di avere un modello di regressione lineare standard, quindi per i dati 2-D sarebbe simile a questo:
$$ Y = W_ {0} + W_ {1} X_ {1} + W_ {2} X_ {2} $$Ora possiamo combinare le caratteristiche in polinomi di secondo ordine e il nostro modello avrà il seguente aspetto:
$$ 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 $$Quanto sopra è ancora un modello lineare. Qui, abbiamo visto che la regressione polinomiale risultante è nella stessa classe di modelli lineari e può essere risolta in modo simile.
Per fare ciò, scikit-learn fornisce un modulo denominato PolynomialFeatures. Questo modulo trasforma una matrice di dati di input in una nuova matrice di dati di un determinato grado.
Parametri
La tabella seguente è costituita dai parametri utilizzati da PolynomialFeatures modulo
Suor n | Parametro e descrizione |
---|---|
1 | degree - intero, predefinito = 2 Rappresenta il grado delle caratteristiche polinomiali. |
2 | interaction_only - Booleano, predefinito = false Per impostazione predefinita, è falso, ma se impostato come vero, vengono prodotte le funzionalità che sono prodotti di funzionalità di input più distinte. Tali funzionalità sono chiamate funzionalità di interazione. |
3 | include_bias - Booleano, predefinito = vero Include una colonna di polarizzazione, ovvero la caratteristica in cui tutte le potenze dei polinomi sono zero. |
4 | order - str in {'C', 'F'}, default = 'C' Questo parametro rappresenta l'ordine della matrice di output nel caso denso. L'ordine 'F' significa più veloce da calcolare ma d'altra parte, può rallentare gli stimatori successivi. |
Attributi
La tabella seguente è costituita dagli attributi utilizzati da PolynomialFeatures modulo
Suor n | Attributi e descrizione |
---|---|
1 | powers_ - array, forma (n_output_features, n_input_features) Mostra potenze_ [i, j] è l'esponente del j-esimo input nell'i-esimo output. |
2 | n_input_features _ - int Come suggerisce il nome, fornisce il numero totale di funzioni di input. |
3 | n_output_features _ - int Come suggerisce il nome, fornisce il numero totale di funzioni di output polinomiali. |
Esempio di implementazione
Seguendo gli usi dello script Python PolynomialFeatures trasformatore per trasformare array di 8 in 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)
Produzione
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.]
]
)
Razionalizzazione utilizzando gli strumenti della pipeline
Il tipo di pre-elaborazione di cui sopra, ovvero la trasformazione di una matrice di dati di input in una nuova matrice di dati di un determinato grado, può essere semplificato con il Pipeline strumenti, che sono fondamentalmente utilizzati per concatenare più stimatori in uno solo.
Esempio
Gli script Python seguenti che utilizzano gli strumenti Pipeline di Scikit-learn per semplificare la preelaborazione (si adatteranno a dati polinomiali di ordine 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_
Produzione
array([ 3., -2., 1., -1.])
L'output sopra mostra che il modello lineare addestrato sulle caratteristiche polinomiali è in grado di recuperare gli esatti coefficienti polinomiali di input.