Scikit Learn - Erweiterte lineare Modellierung

Dieses Kapitel konzentriert sich auf die Polynommerkmale und Pipelining-Tools in Sklearn.

Einführung in Polynomfunktionen

Lineare Modelle, die auf nichtlinearen Funktionen von Daten trainiert werden, erhalten im Allgemeinen die schnelle Leistung linearer Methoden. Es ermöglicht ihnen auch, einen viel größeren Datenbereich anzupassen. Aus diesem Grund werden beim maschinellen Lernen solche linearen Modelle verwendet, die auf nichtlinearen Funktionen trainiert werden.

Ein solches Beispiel ist, dass eine einfache lineare Regression erweitert werden kann, indem Polynommerkmale aus den Koeffizienten konstruiert werden.

Angenommen, wir haben ein lineares Standardregressionsmodell, dann würde es für 2D-Daten folgendermaßen aussehen:

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

Jetzt können wir die Merkmale in Polynomen zweiter Ordnung kombinieren und unser Modell sieht wie folgt aus:

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

Das Obige ist immer noch ein lineares Modell. Hier haben wir gesehen, dass die resultierende Polynomregression in derselben Klasse linearer Modelle liegt und auf ähnliche Weise gelöst werden kann.

Zu diesem Zweck stellt scikit-learn ein Modul mit dem Namen bereit PolynomialFeatures. Dieses Modul wandelt eine Eingabedatenmatrix in eine neue Datenmatrix eines bestimmten Grades um.

Parameter

Die folgende Tabelle enthält die von verwendeten Parameter PolynomialFeatures Modul

Sr.Nr. Parameter & Beschreibung
1

degree - Ganzzahl, Standard = 2

Es repräsentiert den Grad der Polynommerkmale.

2

interaction_only - Boolean, Standard = false

Standardmäßig ist es falsch, aber wenn es auf true gesetzt ist, werden die Features erzeugt, die Produkte mit den meisten Grad unterschiedlicher Eingabe-Features sind. Solche Merkmale werden Interaktionsmerkmale genannt.

3

include_bias - Boolean, Standard = true

Es enthält eine Vorspannungsspalte, dh das Merkmal, in dem alle Polynomkräfte Null sind.

4

order - str in {'C', 'F'}, Standard = 'C'

Dieser Parameter repräsentiert die Reihenfolge des Ausgabearrays im dichten Fall. 'F'-Reihenfolge bedeutet schneller zu berechnen, kann jedoch nachfolgende Schätzer verlangsamen.

Attribute

Die folgende Tabelle enthält die von verwendeten Attribute PolynomialFeatures Modul

Sr.Nr. Attribute & Beschreibung
1

powers_ - Array, Form (n_output_features, n_input_features)

Es zeigt, dass Potenzen_ [i, j] der Exponent des j-ten Eingangs im i-ten Ausgang ist.

2

n_input_features _ - int

Wie der Name schon sagt, gibt es die Gesamtzahl der Eingabefunktionen an.

3

n_output_features _ - int

Wie der Name schon sagt, gibt es die Gesamtzahl der Polynomausgabemerkmale an.

Implementierungsbeispiel

Das folgende Python-Skript verwendet PolynomialFeatures Transformator zur Umwandlung eines Arrays von 8 in Form (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)

Ausgabe

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

Rationalisierung mit Pipeline-Tools

Die obige Art der Vorverarbeitung, dh das Transformieren einer Eingabedatenmatrix in eine neue Datenmatrix eines bestimmten Grades, kann mit dem optimiert werden Pipeline Tools, mit denen grundsätzlich mehrere Schätzer zu einem verkettet werden.

Beispiel

Die folgenden Python-Skripte verwenden die Pipeline-Tools von Scikit-learn, um die Vorverarbeitung zu optimieren (passen zu Polynomdaten der Ordnung 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_

Ausgabe

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

Die obige Ausgabe zeigt, dass das auf Polynommerkmalen trainierte lineare Modell die genauen Eingabepolynomkoeffizienten wiederherstellen kann.