Vom Datensatz über den DataFrame bis zur Bereitstellung: Ihr erstes Projekt mit Pandas und Scikit-learnVom Datensatz über den DataFrame bis zur Bereitstellung: Ihr erstes Projekt mit Pandas und Scikit-learn
Bild vom Herausgeber

# Einführung

Ich freue mich darauf, Ihr erstes, überschaubares maschinelles Lernprojekt mit den beliebten Python-Bibliotheken zu starten Pandas Und Scikit-lernenaber Sie wissen nicht, wo Sie anfangen sollen? Suchen Sie nicht weiter.

In diesem Artikel werde ich Sie durch ein sanftes, einsteigerfreundliches Projekt zum maschinellen Lernen führen, in dem wir gemeinsam ein Regressionsmodell erstellen, das das Mitarbeitereinkommen auf der Grundlage sozioökonomischer Merkmale vorhersagt. Unterwegs lernen wir einige wichtige Konzepte und wichtige Methods des maschinellen Lernens kennen.

# Vom Rohdatensatz zum sauberen DataFrame

Zunächst empfiehlt es sich, wie bei jedem Python-basierten Projekt, zunächst die erforderlichen Bibliotheken, Module und Komponenten zu importieren, die wir während des gesamten Prozesses verwenden werden:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
import joblib

Mit den folgenden Anweisungen wird ein öffentlich verfügbarer Datensatz geladen dieses Repository in einen Panda DataFrame Objekt: eine übersichtliche Datenstruktur zum Laden, Analysieren und Verwalten vollständig strukturierter Daten, d. h. Daten im Tabellenformat. Nach dem Laden betrachten wir seine grundlegenden Eigenschaften und Datentypen in seinen Attributen.

url = "https://uncooked.githubusercontent.com/gakudo-ai/open-datasets/important/employees_dataset_with_missing.csv"
df = pd.read_csv(url)
print(df.head())
print(df.data())

Sie werden feststellen, dass der Datensatz 1.000 Einträge oder Instanzen enthält – additionally Daten, die 1.000 Mitarbeiter beschreiben –, aber für die meisten Attribute wie Alter, Einkommen usw. gibt es weniger als 1.000 tatsächliche Werte. Warum? Weil In diesem Datensatz fehlen Werteein häufiges Drawback bei realen Daten, das behoben werden muss.

In unserem Projekt setzen wir uns zum Ziel, das Einkommen eines Mitarbeiters anhand der übrigen Merkmale vorherzusagen. Daher werden wir den Ansatz verfolgen, Zeilen (Mitarbeiter) zu verwerfen, deren Wert für dieses Attribut fehlt. Während es bei Prädiktorattributen manchmal in Ordnung ist, mit fehlenden Werten umzugehen und sie zu schätzen oder zu imputieren, benötigen wir für die Zielvariable vollständig bekannte Bezeichnungen zum Trainieren unseres maschinellen Lernmodells: Der Haken daran ist, dass unser maschinelles Lernmodell lernt, indem es Beispielen mit bekannten Vorhersageausgaben ausgesetzt wird.

Es gibt auch eine spezielle Anweisung, nur nach fehlenden Werten zu suchen:

Additionally, lasst uns unsere reinigen DataFrame um von fehlenden Werten für die Zielvariable Einkommen ausgenommen zu sein. Dieser Code entfernt Einträge mit fehlenden Werten, insbesondere für dieses Attribut.

goal = "earnings"
train_df = df.dropna(subset=(goal))

X = train_df.drop(columns=(goal))
y = train_df(goal)

Wie wäre es additionally mit den fehlenden Werten in den restlichen Attributen? Wir werden uns in Kürze darum kümmern, aber zuerst müssen wir unseren Datensatz in zwei große Teilmengen aufteilen: einen Trainingssatz zum Trainieren des Modells und einen Testsatz zur Bewertung der Leistung unseres Modells nach dem Coaching, bestehend aus Beispielen, die sich von denen unterscheiden, die das Modell während des Trainings gesehen hat. Scikit-learn bietet eine einzelne Anweisung, um diese Aufteilung nach dem Zufallsprinzip durchzuführen:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Der nächste Schritt geht noch einen Schritt weiter, um die Daten in eine großartige Kind für das Coaching eines Modells für maschinelles Lernen umzuwandeln: den Aufbau einer Vorverarbeitungspipeline. Normalerweise sollte diese Vorverarbeitung zwischen numerischen und kategorialen Merkmalen unterscheiden, sodass jeder Merkmalstyp unterschiedlichen Vorverarbeitungsaufgaben entlang der Pipeline unterliegt. Beispielsweise sollen numerische Merkmale typischerweise skaliert werden, während kategoriale Merkmale in numerische Merkmale abgebildet oder kodiert werden können, damit das Modell des maschinellen Lernens sie verarbeiten kann. Zur Veranschaulichung zeigt der folgende Code den gesamten Prozess des Aufbaus einer Vorverarbeitungspipeline. Es umfasst die automatische Identifizierung numerischer und kategorialer Merkmale, sodass jeder Typ korrekt verarbeitet werden kann.

numeric_features = X.select_dtypes(embody=("int64", "float64")).columns
categorical_features = X.select_dtypes(exclude=("int64", "float64")).columns

numeric_transformer = Pipeline((
    ("imputer", SimpleImputer(technique="median"))
))

categorical_transformer = Pipeline((
    ("imputer", SimpleImputer(technique="most_frequent")),
    ("onehot", OneHotEncoder(handle_unknown="ignore"))
))

preprocessor = ColumnTransformer((
    ("num", numeric_transformer, numeric_features),
    ("cat", categorical_transformer, categorical_features)
))

Weitere Informationen zu Datenvorverarbeitungspipelines finden Sie unter dieser Artikel.

Diese Pipeline wurde einmal auf die angewendet DataFrameführt zu einer sauberen, gebrauchsfertigen Model für maschinelles Lernen. Wir werden es jedoch im nächsten Schritt anwenden, indem wir sowohl die Datenvorverarbeitung als auch das Modelltraining für maschinelles Lernen in einer einzigen übergreifenden Pipeline zusammenfassen.

# Vom sauberen DataFrame zum einsatzbereiten Modell

Jetzt definieren wir eine übergreifende Pipeline, die:

  1. Wendet den zuvor definierten Vorverarbeitungsprozess an – gespeichert im preprocessor Variable – sowohl für numerische als auch für kategoriale Attribute.
  2. Trainiert ein Regressionsmodell, nämlich eine zufällige Waldregression, um das Einkommen anhand vorverarbeiteter Trainingsdaten vorherzusagen.
mannequin = Pipeline((
    ("preprocessor", preprocessor),
    ("regressor", RandomForestRegressor(random_state=42))
))

mannequin.match(X_train, y_train)

Wichtig ist, dass die Trainingsphase nur die Trainingsteilmenge erhält, die wir zuvor bei der Aufteilung erstellt haben, nicht den gesamten Datensatz.

Jetzt nehmen wir die andere Teilmenge der Daten, den Testsatz, und bewerten damit die Leistung des Modells an diesen Beispielmitarbeitern. Wir verwenden den mittleren absoluten Fehler (MAE) als unsere Bewertungsmetrik:

preds = mannequin.predict(X_test)
mae = mean_absolute_error(y_test, preds)
print(f"nModel MAE: {mae:.2f}")

Möglicherweise erhalten Sie einen MAE-Wert von etwa 13.000, was akzeptabel, aber nicht brillant ist, wenn man bedenkt, dass die meisten Einkommen im Bereich von 60.000 bis 90.000 liegen. Auf jeden Fall nicht schlecht für ein erstes Modell für maschinelles Lernen!

Abschließend möchte ich Ihnen zeigen, wie Sie Ihr trainiertes Modell für die zukünftige Bereitstellung in einer Datei speichern.

joblib.dump(mannequin, "employee_income_model.joblib")
print("Mannequin saved as employee_income_model.joblib")

Speichern Sie Ihr trainiertes Modell in einem .joblib Die Datei ist für zukünftige Bereitstellungen nützlich, da Sie sie sofort neu laden und wiederverwenden können, ohne sie erneut von Grund auf trainieren zu müssen. Stellen Sie sich das so vor, als würden Sie Ihre gesamte Vorverarbeitungspipeline und das trainierte Modell in einem tragbaren Objekt „einfrieren“. Zu den schnellen Optionen für die zukünftige Verwendung und Bereitstellung gehören das Einbinden in ein einfaches Python-Skript oder -Pocket book oder die Erstellung einer schlanken Net-App, die mit Instruments wie erstellt wurde Streamlit, Gradiooder Flasche.

# Zusammenfassung

In diesem Artikel haben wir ein einführendes Modell für maschinelles Lernen für die Regression zusammengestellt, insbesondere zur Vorhersage des Mitarbeitereinkommens, und die notwendigen Schritte vom Rohdatensatz bis zum sauberen, vorverarbeiteten Datensatz skizziert DataFrameund von DataFrame zum einsatzbereiten Modell.

Iván Palomares Carrascosa ist ein führender Autor, Redner und Berater in den Bereichen KI, maschinelles Lernen, Deep Studying und LLMs. Er schult und leitet andere darin, KI in der realen Welt zu nutzen.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert