Praktisches maschinelles Lernen in Kaggle: Teil 1 – Datenvorverarbeitung und Funktionsauswahl | von luna4tech | Juli 2023

0
25


Datensatz: Titanic – Maschinelles Lernen aus der Katastrophe

Lassen Sie uns mit einem praktischen Ansatz in die aufregende Welt des maschinellen Lernens eintauchen. In diesem spannenden Blogbeitrag arbeiten wir an einer Kaggle-Herausforderung mit dem Titel „Titanic – Maschinelles Lernen aus einer Katastrophe“ und erkunden die wesentlichen Schritte, um Ihre Reise zum maschinellen Lernen anzukurbeln.

In dieser zweiteiligen Serie werden wir die folgenden Themen behandeln:

  • Datenvorverarbeitung zur Kodierung und Verarbeitung fehlender Werte
  • Funktionsauswahl mittels Heatmap
  • Datenaufteilung zur Validierung und zum Testen
  • Coaching mit Entscheidungsbäumen und Random-Forest-Algorithmen
  • Hyperparameter-Tuning

Wenn Sie wie ich ein Software program-Ingenieur sind, der sich für ML und KI interessiert, werde ich am Ende dieses Artikels einige hilfreiche Ressourcen vorstellen, die mir den Einstieg in meine ML-Reise erleichtert haben.

Dieses Downside warfare das erste, das ich gelöst habe, nachdem ich einige Schlüsselkonzepte kennengelernt hatte, die auf jedes ML-Downside anwendbar sind und die wir in diesem Artikel praxisnah behandeln werden.

Indem Sie dieses Downside von Anfang bis Ende lösen, erhalten Sie einen Überblick über alle notwendigen Schritte zur Lösung eines ML-Issues und gewinnen Sicherheit für die Bewältigung zukünftiger Herausforderungen. Es ist eine großartige Möglichkeit, Ihr Gelerntes in die Praxis umzusetzen und eine solide Grundlage in ML aufzubauen.

Um den Code zu implementieren, habe ich mich auf die folgenden Python-Bibliotheken verlassen:

  • Pandas: Zum Laden und Bearbeiten von Daten.
  • scikit-lernen: Zur Anwendung von Algorithmen für maschinelles Lernen.
  • matplotlib Und seegeboren: Zum Erstellen informativer Diagramme.

Der Titanic-Datensatz enthält wertvolle Informationen über die Passagiere, die auf der Titanic gesegelt sind, einschließlich Particulars wie Geschlecht, Alter, sozioökonomischen Standing und Überlebensergebnis.

Unsere Mission ist es, diese Daten zu analysieren und anhand ihrer Informationen vorherzusagen, ob ein Passagier überlebt hat oder nicht.

Eine detaillierte Beschreibung des Datensatzes finden Sie unter folgendem Hyperlink: Titanic – Maschinelles Lernen aus der Katastrophe.

Zunächst laden wir den Datensatz mithilfe der Pandas-Bibliothek aus CSV-Dateien und untersuchen die ersten fünf Zeilen.

import numpy as np 
import pandas as pd
train_data = pd.read_csv('/kaggle/enter/titanic/prepare.csv')
test_data = pd.read_csv('/kaggle/enter/titanic/take a look at.csv')
train_data.head()

Warten! Was sehen wir? Einige Spalten, wie „Cabin', haben fehlende Werte dargestellt als NaN. Und es gibt auch kategorische (nicht numerische) Spalten wie „Intercourse’ Und ‚Embarked’ die unsere cleveren ML-Algorithmen nicht sofort verstehen.

Kein Downside! Wir werden unser Bestes bei der Datenvorverarbeitung geben. Wir werden diese fehlenden Werte mit behandeln Anrechnung Methoden und wandeln diese kategorialen Werte mithilfe von in numerische Darstellungen um Function-Kodierung Techniken.

Function-Kodierung

Um unsere kategorialen Daten in numerische Type umzuwandeln, stehen uns zwei Techniken zur Verfügung:

1. Eine Scorching-Kodierung: Das können wir nutzen Nominale Variablen deren Werte haben keine logische Reihenfolge. Zum Beispiel:

  • Geschlecht: männlich und weiblich
  • Kabine: wahr oder falsch

Diese Technik schafft neue binäre Spalten für jede eindeutige Kategorie in der ursprünglichen kategorialen Variablen.

Zum Beispiel die Intercourse Spalte würde werden Sex_male Und Sex_femalewobei der entsprechende Spaltenwert auf 1 und der andere Spaltenwert auf 0 gesetzt ist.

Ein Beispiel für eine heiße Codierung

2. Ordinal- oder Label-Kodierung: Das können wir nutzen Ordinale Variablen wessen Daten folgen a logische Reihenfolge. Zum Beispiel,

  • Größe: klein, mittel und groß
  • Bewertung: schlecht, impartial und intestine

Diese Kodierungsmethode weist zu Ganzzahlwerte entsprechend ihrer Reihenfolge den Kategorien zuordnen. Zum Beispiel, Dimension kann als klein=1, mittel=2, groß=3 kodiert werden.

Beispiel für die Etikettenkodierung

Anrechnung

Fehlende Daten können Probleme in Algorithmen für maschinelles Lernen verursachen und zu verzerrten Ergebnissen führen.

Diese Lücken können wir mit verschiedenen Imputationsmethoden schließen:

  1. Mittelwert/Median-Imputation (für numerische Daten): Ersetzen Sie fehlende Werte durch den Mittelwert oder Medianwert der Variablen. Es wird davon ausgegangen, dass die fehlenden Werte ungefähr dem Durchschnitt oder der zentralen Tendenz der verfügbaren Daten entsprechen.
  2. Modusimputation (für kategoriale Daten): Ersetzen Sie das Fehlende kategorisch Werte mit dem Modus, der der am häufigsten vorkommende Wert in der Variablen ist.
  3. Regressionsimputation: Schätzen Sie fehlende Werte basierend auf einem Regressionsmodell, das auf den nicht fehlenden Werten trainiert wurde. Das Modell sagt die fehlenden Werte basierend auf den Beziehungen zwischen anderen Variablen voraus.
  4. kNN-Imputation: Ergänzen Sie fehlende Werte, indem Sie den Mittelwert der nächsten Nachbarn im Datensatz berechnen.

Implementierung in unserem Datensatz

Schauen wir uns nun genauer an, wie wir mit fehlenden Werten umgehen und eine Function-Kodierung in unserem Titanic-Datensatz durchführen können.

Wir untersuchen die Informationen jeder Spalte, z. B. Datentypen und die Anzahl der Nicht-Null-Einträge.

train_data.data()
test_data.data()

Durch die Überprüfung der Ausgabe können wir feststellen, dass der Datensatz sowohl nicht numerische Spalten (Title, Geschlecht, Ticket, Kabine, eingeschifft) als auch Spalten mit fehlenden Werten (Alter, Kabine, eingeschifft) enthält.

1. Kombinieren Sie Coaching und Check

Um die Konsistenz der Datenvorverarbeitungsschritte sowohl für die Trainings- als auch für die Testdaten sicherzustellen, können wir die Datensätze kombinieren und eine neue Spalte mit dem Namen hinzufügen supply um zu identifizieren, ob jeder Datensatz zum „Zug“- oder „Check“-Satz gehört.

train_data['source'] = 'prepare'
test_data['source'] = 'take a look at'
total_data = pd.concat((train_data, test_data), axis=0)
total_data.reset_index(inplace=True, drop=True)
total_data.data()

2. Neue Funktion erstellen HasCabin

Aus dem Datensatz können wir ersehen, dass einige Passagiere Kabinencodes haben, während andere leere Einträge haben (NaN).

Wir werden diese Spalte in eine umwandeln neue Funktion genannt HasCabin. Wenn ein Passagier einen Kabinencode hat, wird dieser als gekennzeichnet true. Andernfalls wird es als gekennzeichnet false.

# Modify characteristic
total_data["HasCabin"] = pd.notna(total_data["Cabin"])

# drop the unique column
total_data.drop(['Cabin'], axis=1, inplace=True)

total_data.head()

3. Neue Funktion erstellen IsAlone

Unser gesunder Menschenverstand sagt, dass die Überlebenschancen hoch sind, wenn der Passagier alleine reist. Erstellen wir additionally eine neue Spalte IsAlone bezogen auf SibSp Und Parch Wie unten:

total_data['IsAlone'] = (total_data['SibSp'] + total_data['Parch'] == 0)

4. Unterstellen Embarked

Von den 891 Einträgen in unseren Daten haben wir 889 Einträge, die nicht null sind Embarked Spalte, was bedeutet, dass uns 2 Werte fehlen.

Wir können diese fehlenden Werte mit dem häufigsten Wert ergänzen (Modusimputation) von Embarked das im Datensatz erscheint.

# Lacking worth - fill majority worth for embarked
embarked_top = total_data["Embarked"].describe().high
total_data["Embarked"] = total_data["Embarked"].fillna(embarked_top)

4. Kodieren Intercourse, Cabin Und Embarked Säulen

Da die Werte in diesen drei Spalten keiner logischen Reihenfolge folgen, können wir verwenden One-Scorching-Encoder um diese Werte in Zahlen umzuwandeln.

from sklearn.preprocessing import OneHotEncoder

ohe = OneHotEncoder(sparse=False)

sex_df = pd.DataFrame(ohe.fit_transform(total_data[['Sex']]), columns=ohe.get_feature_names_out())
has_cabin_df = pd.DataFrame(ohe.fit_transform(total_data[['HasCabin']]), columns=ohe.get_feature_names_out())
embarked_df = pd.DataFrame(ohe.fit_transform(total_data[['Embarked']]), columns=ohe.get_feature_names_out())

# since one scorching encoding creates new columns we will drop the unique columns
total_data.drop(['Sex', 'HasCabin', 'Embarked'], axis=1, inplace=True)

total_data= pd.concat((total_data, sex_df, has_cabin_df, embarked_df), axis=1)

5. Löschen Sie unnötige Spalten

Wir können unnötige Spalten wie löschen Title Und Ticket die für die Vorhersage nicht nützlich sind.

total_data.drop(['Name', 'Ticket'], axis=1, inplace=True)

6. Teilen Sie die Daten wieder auf

Bevor wir mit dem Auffüllen fehlender Werte für fortfahren Age lasst uns das aufteilen total_data in Zug und Prüfung. Warum? Nun, Sie werden es gleich herausfinden.

train_data_p = total_data[total_data["source"]=="prepare"]
test_data_p = total_data[total_data["source"]=="take a look at"]
train_data_p.drop(['source'], axis=1, inplace=True)
test_data_p.drop(['source'], axis=1, inplace=True)

7. Unterstellen Age

Da uns viele Werte fehlen für Age Spalte können wir einen etwas komplexeren Algorithmus verwenden, z k-nächste Nachbarn Algorithmus zum Auffüllen der fehlenden Werte.

from sklearn.impute import KNNImputer

imputer = KNNImputer(n_neighbors=8)

# study the parameters of kNN and apply the mannequin
# on train_data which incorporates goal variable (Survived)
train_data_p = pd.DataFrame(imputer.fit_transform(train_data_p), columns = train_data_p.columns)

# Apply the kNN mannequin on test_data to foretell the lacking Age values
test_data_p = pd.DataFrame(imputer.rework(test_data_p), columns = test_data_p.columns)

Was sind match, rework Und fit_transform ?

Wenn Sie die Dokumentation von OneHotEncoder oder kNNImputer von scikit-learn durchgehen, werden Sie feststellen, dass diese Instruments die oben genannten drei Methoden bereitstellen, die Sie verwenden können. Schauen wir uns jeden einzelnen genauer an:

match lernt die Parameter aus den Daten. Zum Beispiel,

  • OneHotEncoder Verwendet match, um das zu lernen Anzahl der Kategorien in einer Spalte
  • kNNImputer lernt das Ähnlichkeit zwischen Datenpunkten basierend auf ihren Merkmalswerten.

rework wendet die gelernten Parameter auf die neuen Daten an. Zum Beispiel,

  • OneHotEncoder wandelt kategoriale Variablen in numerische Werte um
  • kNNImputer füllt fehlende Werte basierend auf dem, was es gelernt hat, aus.

Wann sollten Sie es verwenden?

fit_transform ist ein praktischer Combo-Zug, der kombiniert match Und rework in einen Schritt. Dies wird normalerweise verwendet, wenn die erste Transformation durchgeführt wird Trainingsdaten.

rework allein wird verwendet, wenn wir die gelernten Parameter bereits von einem vorherigen haben fit_transform oder match Betrieb. Es übernimmt die zuvor erfassten Parameter und wendet sie auf neue Daten an, ohne alles neu zu lernen. Dies wird häufig bei der Transformation verwendet Check- oder Validierungsdaten nach der Anpassung der Transformation an die Trainingsdaten.

Notiz: Beim Ausfüllen der fehlenden Werte für Agewir wollen verstehen, wie verschiedene Spalten, einschließlich der Survived Spalte, beziehen sich auf Alter. Dann können wir diese Muster verwenden, um das Fehlende abzuschätzen Age Werte in den Testdaten. Deshalb teilen wir die Daten vor diesem Schritt wieder auf, um sie zu trainieren und zu testen.

Erfolgreiche Datenvorverarbeitung

Durch Überprüfen der Ausgabe von train_data_p.data() Und test_data_p.data() Wir können sehen, dass alle Spalten numerisch sind und jede Spalte Nicht-Null-Einträge enthält.

Wenn es um die Vorhersage des Überlebensergebnisses geht, möchten wir die besten Merkmale auswählen, die für die Vorhersage related sind. Aber woher wissen wir, welche Funktionen die besten sind? Hier kommt die Heatmap ins Spiel!

A Wärmekarte ist eine farbcodierte Matrix, die die ‚correlation coefficients' zwischen allen Merkmalspaaren in unserem Datensatz. Der Korrelationskoeffizient stellt die Stärke und Richtung der linearen Beziehung zwischen zwei Variablen dar.

Wir können die besten Merkmale identifizieren, die einen starken Einfluss auf das Überlebensergebnis haben, indem wir diejenigen auswählen, die einen starken Einfluss haben starke constructive oder adverse Korrelation mit der Zielvariablen (dargestellt durch hellere oder dunklere Farbe).

Lassen Sie uns die Heatmap mithilfe unseres Trainingsdatensatzes zeichnen:

import matplotlib.pyplot as plt
import seaborn as sns

plt.determine(figsize=(15,15))
sns.heatmap(train_data_p.corr(), cbar=True, cmap='vlag', vmin=-1, vmax=1, annot=True)

Aus der Heatmap können wir erkennen, dass die Spalten ‚Pclass'Fare'IsAlone'Intercourse'Embarked'Und ‚HasCabin' swie eine stärkere Korrelation mit unserer Zielvariablen ‚Survived'. Achten Sie auf die 2. Zeile bzw. 2. Spalte, wo die absoluten Korrelationswerte größer als 0,1 sind

Basierend auf dieser Analyse werden wir diese sechs Funktionen als die wichtigsten für den Aufbau unseres maschinellen Lernmodells betrachten.

Notiz: Wenn es darum geht, die besten Funktionen auszuwählen und unsere Daten zu untersuchen, können wir auch andere Methoden verwenden, aber für unser Beispiel beginnen wir mit diesen Schritten.

Lustige Aktivität:

Bevor wir mit den nächsten Schritten fortfahren, probieren wir eine unterhaltsame Übung aus. Anhand der Heatmap haben wir beobachtet, dass die Intercourse Spalte spielt eine wichtige Rolle bei der Vorhersage des Überlebensergebnisses.

girls = train_data[train_data.Sex=="female"]["Survived"]
males = train_data[train_data.Sex=="male"]["Survived"]
survivalRateForWomen = sum(girls)/len(girls)
survivalRateForMen = sum(males)/len(males)
print("survivalRateForWomen: ", survivalRateForWomen)
print("survivalRateForMen: ", survivalRateForMen)

Als Experiment nehmen wir additionally an, dass alle Weibchen überlebt haben (wahr) und alle Männchen nicht (falsch), und schauen wir uns an, was die Ergebnisse in Kaggle zeigen.

output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': (test_data.Intercourse=='feminine').astype('int')})
output.to_csv('submission.csv', index=False)

Durch Ausführen dieses Codes generieren Sie eine Übermittlungsdatei mit dem Namen submission.csv die Sie auf Kaggle hochladen und sehen können, welche Punktzahl Sie erhalten. In meinem Fall erhielt ich eine Punktzahl von 0,76555 für diesen Beitrag. Probieren Sie es aus und sehen Sie, wie intestine Sie das Überleben basierend auf dem Geschlecht vorhersagen können!

Entdecken Sie den zweiten Teil unserer Artikelserie, in dem wir uns mit der Implementierung des ML-Algorithmus für die Daten und dem Prozess der Optimierung von Hyperparametern befassen.



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here