ML mit Python - Datenfeature-Auswahl

Im vorherigen Kapitel haben wir ausführlich gesehen, wie Daten für das maschinelle Lernen vorverarbeitet und vorbereitet werden. Lassen Sie uns in diesem Kapitel die Auswahl der Datenmerkmale und verschiedene damit verbundene Aspekte im Detail verstehen.

Bedeutung der Auswahl von Datenmerkmalen

Die Leistung des maschinellen Lernmodells ist direkt proportional zu den Datenmerkmalen, die zum Trainieren verwendet werden. Die Leistung des ML-Modells wird negativ beeinflusst, wenn die ihm zur Verfügung gestellten Datenmerkmale irrelevant sind. Andererseits kann die Verwendung relevanter Datenmerkmale die Genauigkeit Ihres ML-Modells erhöhen, insbesondere die lineare und logistische Regression.

Nun stellt sich die Frage, was ist die automatische Funktionsauswahl? Es kann als der Prozess definiert werden, mit dessen Hilfe wir die Merkmale in unseren Daten auswählen, die für die Ausgabe- oder Vorhersagevariable, an der wir interessiert sind, am relevantesten sind. Dies wird auch als Attributauswahl bezeichnet.

Im Folgenden sind einige der Vorteile der automatischen Funktionsauswahl vor dem Modellieren der Daten aufgeführt:

  • Durch Ausführen der Feature-Auswahl vor der Datenmodellierung wird die Überanpassung verringert.

  • Durch Ausführen der Merkmalsauswahl vor der Datenmodellierung wird die Genauigkeit des ML-Modells erhöht.

  • Durch Ausführen der Funktionsauswahl vor der Datenmodellierung wird die Trainingszeit verkürzt

Techniken zur Funktionsauswahl

Im Folgenden finden Sie Techniken zur automatischen Funktionsauswahl, mit denen wir ML-Daten in Python modellieren können:

Univariate Auswahl

Diese Merkmalsauswahltechnik ist sehr nützlich bei der Auswahl dieser Merkmale mit Hilfe statistischer Tests, die eine stärkste Beziehung zu den Vorhersagevariablen haben. Wir können eine univariate Technik zur Merkmalsauswahl mit Hilfe von SelectKBest0class der scikit-learn Python-Bibliothek implementieren.

Example

In diesem Beispiel verwenden wir den Pima Indians Diabetes-Datensatz, um mithilfe eines statistischen Chi-Quadrat-Tests 4 der Attribute mit den besten Eigenschaften auszuwählen.

from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Als nächstes werden wir das Array in Eingabe- und Ausgabekomponenten unterteilen -

X = array[:,0:8]
Y = array[:,8]

In den folgenden Codezeilen werden die besten Funktionen aus dem Datensatz ausgewählt:

test = SelectKBest(score_func=chi2, k=4)
fit = test.fit(X,Y)

Wir können auch die Daten für die Ausgabe nach unserer Wahl zusammenfassen. Hier setzen wir die Genauigkeit auf 2 und zeigen die 4 Datenattribute mit den besten Merkmalen zusammen mit der besten Punktzahl für jedes Attribut an -

set_printoptions(precision=2)
print(fit.scores_)
featured_data = fit.transform(X)
print ("\nFeatured data:\n", featured_data[0:4])

Output

[ 111.52 1411.89 17.61 53.11 2175.57 127.67 5.39 181.3 ]
Featured data:
[
   [148. 0.  33.6 50. ]
   [ 85. 0.  26.6 31. ]
   [183. 0.  23.3 32. ]
   [ 89. 94. 28.1 21. ]
]

Eliminierung rekursiver Merkmale

Wie der Name schon sagt, entfernt die RFE-Feature-Auswahlmethode (Recursive Feature Elimination) die Attribute rekursiv und erstellt das Modell mit den verbleibenden Attributen. Wir können die RFE-Feature-Auswahlmethode mithilfe der RFE-Klasse der Scikit-Learn-Python-Bibliothek implementieren.

Beispiel

In diesem Beispiel verwenden wir RFE mit logistischem Regressionsalgorithmus, um die besten 3 Attribute mit den besten Merkmalen aus dem Pima Indians Diabetes-Datensatz auszuwählen.

from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Als nächstes werden wir das Array in seine Eingabe- und Ausgabekomponenten unterteilen -

X = array[:,0:8]
Y = array[:,8]

In den folgenden Codezeilen werden die besten Funktionen aus einem Datensatz ausgewählt:

model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Number of Features: %d")
print("Selected Features: %s")
print("Feature Ranking: %s")

Ausgabe

Number of Features: 3
Selected Features: [ True False False False False True True False]
Feature Ranking: [1 2 3 5 6 1 1 4]

Wir können in der obigen Ausgabe sehen, dass RFE Preg, Masse und Pedi als die ersten 3 besten Eigenschaften auswählt. Sie sind in der Ausgabe als 1 markiert.

Hauptkomponentenanalyse (PCA)

PCA, allgemein als Datenreduktionstechnik bezeichnet, ist eine sehr nützliche Methode zur Merkmalsauswahl, da sie die lineare Algebra verwendet, um den Datensatz in eine komprimierte Form umzuwandeln. Wir können die PCA-Feature-Auswahlmethode mithilfe der PCA-Klasse der Scikit-Learn-Python-Bibliothek implementieren. Wir können die Anzahl der Hauptkomponenten in der Ausgabe auswählen.

Beispiel

In diesem Beispiel verwenden wir PCA, um die besten 3 Hauptkomponenten aus dem Diabetes-Datensatz von Pima Indians auszuwählen.

from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Als nächstes werden wir das Array in Eingabe- und Ausgabekomponenten unterteilen -

X = array[:,0:8]
Y = array[:,8]

Die folgenden Codezeilen extrahieren Features aus dem Datensatz -

pca = PCA(n_components=3)
fit = pca.fit(X)
print("Explained Variance: %s") % fit.explained_variance_ratio_
print(fit.components_)

Ausgabe

Explained Variance: [ 0.88854663 0.06159078 0.02579012]
[
   [ 
      -2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-02 
      9.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03
   ]
   [ 
      2.26488861e-02 9.72210040e-01 1.41909330e-01 -5.78614699e-02 
      -9.46266913e-02 4.69729766e-02 8.16804621e-04 1.40168181e-01
   ]
   [ 
      -2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-01 
      2.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01
   ]
]

Aus der obigen Ausgabe können wir ersehen, dass 3 Hauptkomponenten wenig Ähnlichkeit mit den Quelldaten haben.

Funktionsbedeutung

Wie der Name schon sagt, wird die Technik der Merkmalsbedeutung verwendet, um die Wichtigkeitsmerkmale auszuwählen. Grundsätzlich wird ein geschulter überwachter Klassifikator verwendet, um Merkmale auszuwählen. Wir können diese Feature-Auswahl-Technik mit Hilfe der ExtraTreeClassifier-Klasse der Scikit-Learn-Python-Bibliothek implementieren.

Beispiel

In diesem Beispiel verwenden wir ExtraTreeClassifier, um Funktionen aus dem Pima Indians Diabetes-Datensatz auszuwählen.

from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifier
path = r'C:\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(data, names=names)
array = dataframe.values

Als nächstes werden wir das Array in Eingabe- und Ausgabekomponenten unterteilen -

X = array[:,0:8]
Y = array[:,8]

Die folgenden Codezeilen extrahieren Features aus dem Datensatz -

model = ExtraTreesClassifier()
model.fit(X, Y)
print(model.feature_importances_)

Ausgabe

[ 0.11070069 0.2213717 0.08824115 0.08068703 0.07281761 0.14548537 0.12654214 0.15415431]

Anhand der Ausgabe können wir beobachten, dass es für jedes Attribut Bewertungen gibt. Je höher die Punktzahl, desto höher ist die Wichtigkeit dieses Attributs.