Sklearn-Grundkonzepte

Wenn Sie Sklearn für maschinelles Lernen verwenden, müssen Sie einige grundlegende Konzepte verstehen.

Sklearn bietet eine einheitliche und prägnante API, um verschiedene Algorithmen und Arbeitsabläufe des maschinellen Lernens zu implementieren und uns zu helfen, verschiedene Aufgaben des maschinellen Lernens schnell zu bewältigen.

Als Nächstes werden wir die folgenden Konzepte ausführlich erläutern:Datenrepräsentation, Modelltypen, Vorverarbeitungsmethoden, Bewertungsmetriken, Modelloptimierungusw.


1. Datenrepräsentation: Datensätze und Merkmale

Der Datensatz ist eines der grundlegendsten Konzepte in Sklearn.

Die Kernaufgabe des maschinellen Lernens besteht darin, Muster aus Daten zu lernen, und die Art und Weise, wie Daten repräsentiert werden, ist entscheidend.

Datensatz

In scikit-learn werden Daten normalerweise durch zwei Hauptobjekte dargestellt:MerkmalsmatrixundZielvektor。

Feature-Matrix:Jede Zeile repräsentiert eine Datenprobe, und jede Spalte repräsentiert ein Merkmal (d. h. eine Eingabevariable). Sie ist ein zweidimensionales Array oder eine Matrix, normalerweise gespeichert als NumPy-Array oder pandas DataFrame.

Angenommen, wir haben 3 Proben, jede mit 2 Merkmalen.

Beispiel

import numpy as np
X = np.array([[1.0, 2.0], [2.0, 3.0], [3.0, 4.0]])

Zielvektor:Er repräsentiert das Ziel jeder Probe (d. h. das Ausgabelabel), normalerweise ein eindimensionales Array.

Zum Beispiel ist in einer Klassifikationsaufgabe das Ziel das Klassenlabel jeder Probe.

Der entsprechende Zielvektor:

y = np.array([0, 1, 0])  # 0 类别和 1 类别

Merkmale und Labels

  • Merkmale: sind die Eingabevariablen im Datensatz, die zum Trainieren des Modells verwendet werden. Im obigen Beispiel,Xist die Feature-Matrix, die alle Eingabevariablen enthält.

  • Labels: sind die Zielausgaben des Machine-Learning-Modells. Beim überwachten Lernen sind Labels die Ergebnisse, die das Modell vorhersagen soll. Im obigen Beispiel,yist der Label- oder Zielvektor, der die Klasse jeder Probe enthält.

Aufteilung des Datensatzes

In praktischen Anwendungen ist es üblicherweise notwendig, den Datensatz in ein Trainingsset und ein Testset aufzuteilen.

scikit-learn bietet eine praktische Funktiontrain_test_split(), um dies zu erreichen:

Beispiel

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
  • Der obige Code rufttrain_test_splitdie Funktion auf und weist das Ergebnis vier Variablen zu:X_train、X_test、y_trainundy_test。
  • Xundywerden übergeben antrain_test_splitdie Funktionsparameter, die jeweils den Merkmalsdatensatz und die Zielvariable (Labels) darstellen. ÜblicherweiseXist ein zweidimensionales Array,yein eindimensionales Array ist.
  • test_size=0.3Der Parameter legt fest, dass die Größe des Testsets 30% des ursprünglichen Datensatzes betragen soll. Das bedeutet, dass 70% der Daten als Trainingsset verwendet werden und die verbleibenden 30% als Testset verwendet werden.
  • random_state=42Der Parameter ist ein Zufallsseed, der sicherstellt, dass bei jedem Aufteilen des Datensatzes dasselbe Ergebnis erzielt wird. Dies ist bei Experimenten und der Modellvalidierung sehr nützlich, da es die Reproduzierbarkeit der Ergebnisse gewährleistet.

2. Modelle und Algorithmen

Überwachtes und unüberwachtes Lernen

In scikit-learn werden Machine-Learning-Modelle grob in zwei große Kategorien unterteilt:Überwachtes LernenundUnüberwachtes Lernen。

Überwachtes Lernen:Beim überwachten Lernen lernt das Modell während des Trainings aus gelabelten Daten; diese Labels sind die Ergebnisse, die das Modell vorhersagen soll.

Häufige Aufgaben des überwachten Lernens sind Klassifikation und Regression.

  • Klassifikation: Datenpunkten vordefinierten Kategorien zuweisen. Zum Beispiel die Bestimmung, ob eine E-Mail Spam oder kein Spam ist.
  • Regression: Kontinuierliche Wertausgaben vorhersagen. Zum Beispiel die Vorhersage von Hauspreisen, Temperaturen usw.

Verwendung eines Entscheidungsbaums für eine Klassifikationsaufgabe:

Beispiel

from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)

Unüberwachtes Lernen:Unüberwachtes Lernen bezieht sich auf Lernen ohne gelabelte Daten; das Modell lernt nur aus den Merkmalen der Eingabedaten selbst.

Zu den häufigen Aufgaben des unüberwachten Lernens gehören Clustering und Dimensionsreduktion.

  • Clustering: Daten so gruppieren, dass Daten innerhalb derselben Gruppe ähnlich sind. Häufige Clustering-Algorithmen umfassenK-Means、DBSCANusw.
  • Dimensionsreduktion: Die Anzahl der Merkmale in den Daten reduzieren, oft für Datenkompression oder Visualisierung verwendet. Häufige Methoden zur Dimensionsreduktion umfassenPCA(Principal Component Analysis) undt-SNE(t-distributed Stochastic Neighbor Embedding), usw.

Verwendung von K-Means-Clustering:

Beispiel

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3)
kmeans.fit(X_train)
y_pred = kmeans.predict(X_test)

Vorverarbeitung und Feature-Engineering

Bevor man scikit-learn für maschinelles Lernen verwendet, ist es üblicherweise notwendig, die Daten vorzuverarbeiten. Dies umfasst die folgenden häufigen Aufgaben:

1. Standardisierung:Vereinheitliche die Skala der Merkmale, sodass jedes Merkmal einen Mittelwert von null und eine Varianz von eins hat.

Beispiel

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

2. Normalisierung:Skaliere die Werte der Merkmale auf einen festen Bereich (normalerweise 0 bis 1).

Beispiel

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_normalized = scaler.fit_transform(X)

3. Kodierung kategorischer Variablen:Wandle kategorische Daten in numerische Daten um (z. B. One-Hot-Encoding).


3. Modellbewertung und -validierung

Nach dem Training eines Machine-Learning-Modells muss seine Leistung bewertet werden, um seine Generalisierungsfähigkeit sicherzustellen.

scikit-learn bietet einige Werkzeuge zur Bewertung der Modellleistung.

Kreuzvalidierung

Die Kreuzvalidierung ist eine übliche Methode zur Modellbewertung, insbesondere wenn die Datenmenge begrenzt ist.

Durch die Aufteilung der Daten in mehrere Teilmengen, wobei jeweils eine Teilmenge als Validierungsset und der Rest als Trainingsset verwendet wird, wird das Modell wiederholt mehrfach trainiert und bewertet, und schließlich wird die durchschnittliche Leistung des Modells berechnet.

Beispiel

from sklearn.model_selection import cross_val_score
scores = cross_val_score(clf, X, y, cv=5)  # 5-fache Kreuzvalidierung
print("Kreuzvalidierungs-Scores:", scores)

Häufige Bewertungsmetriken

Evaluationsmetriken für Klassifikationsaufgaben:

  • Genauigkeit: Der Anteil korrekt vorhergesagter Stichproben an allen Stichproben.
  • Präzision: Der Anteil tatsächlich positiver Klassen unter den als positiv vorhergesagten Klassen.
  • Trefferquote: Der Anteil korrekt vorhergesagter Stichproben unter den tatsächlich positiven Klassen.
  • F1-Score: Das harmonische Mittel von Präzision und Trefferquote.

Beispiel

from sklearn.metrics import accuracy_score, classification_report
print("Genauigkeit:", accuracy_score(y_test, y_pred))
print("Klassifikationsbericht:\n", classification_report(y_test, y_pred))

Evaluationsmetriken für Regressionsaufgaben:

  • Mittlerer quadratischer Fehler (MSE): Der Mittelwert der quadrierten Differenzen zwischen vorhergesagten Werten und tatsächlichen Werten.
  • Bestimmtheitsmaß (R²): Misst die Fähigkeit des Modells, die Variabilität der Daten zu erklären.

Beispiel

from sklearn.metrics import mean_squared_error, r2_score
print("MSE:", mean_squared_error(y_test, y_pred))
print("R²:", r2_score(y_test, y_pred))

4. Modellauswahl und Tuning

Gittersuche

Gittersucheist eine häufig verwendete Methode zur Hyperparameter-Optimierung, die die beste Hyperparameter-Kombination findet, indem sie alle möglichen Parameterkombinationen durchläuft.

Beispiel

from sklearn.model_selection import GridSearchCV

param_grid = {'max_depth': [3, 5, 7], 'min_samples_split': [2, 5, 10]}
grid_search = GridSearchCV(DecisionTreeClassifier(), param_grid, cv=5)
grid_search.fit(X_train, y_train)
print("Beste Parameter:", grid_search.best_params_)

Zufallssuche

Zufallssucheist eine Methode, die durch zufällige Auswahl von Hyperparameter-Kombinationen nach optimalen Hyperparametern sucht. Sie ist effizienter als die Gittersuche.

Beispiel

from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint

param_dist = {'max_depth': [3, 5, 7], 'min_samples_split': randint(2, 10)}
random_search = RandomizedSearchCV(DecisionTreeClassifier(), param_dist, n_iter=10, cv=5)
random_search.fit(X_train, y_train)
print("Beste Parameter:", random_search.best_params_)
Andere Erweiterungen