Ihr erster Schritt in Data Science. Titanic

Ein kurzes einleitendes Wort

Ich glaube, dass wir mehr erreichen könnten, wenn wir Schritt-für-Schritt-Anleitungen bekämen, die uns sagen, was zu tun ist und wie es zu tun ist. Ich selbst erinnere mich an Momente in meinem Leben, in denen ich etwas nicht anfangen konnte, weil es einfach schwierig war zu verstehen, wo ich anfangen sollte. Vielleicht haben Sie einmal im Internet die Worte „Data Science“ gesehen und beschlossen, dass Sie weit davon entfernt sind und dass die Leute, die dies tun, irgendwo da draußen, in einer anderen Welt, waren. Nein, sie sind genau hier. Und vielleicht ist dank Leuten aus diesem Bereich ein Artikel in Ihrem Feed erschienen. Es gibt viele Kurse, die Ihnen helfen, sich an dieses Handwerk zu gewöhnen, aber hier helfe ich Ihnen, den ersten Schritt zu machen.

Na, bist du bereit? Lassen Sie mich Ihnen gleich sagen, dass Sie Python 3 beherrschen müssen, da ich Python XNUMX hier verwenden werde. Ich empfehle Ihnen außerdem, es im Voraus auf Jupyter Notebook zu installieren oder zu sehen, wie Sie Google Colab verwenden.

Шаг первый

Ihr erster Schritt in Data Science. Titanic

Kaggle ist in dieser Angelegenheit Ihr wichtiger Assistent. Prinzipiell kann man auch darauf verzichten, aber darüber werde ich in einem anderen Artikel sprechen. Dies ist eine Plattform, auf der Data Science-Wettbewerbe stattfinden. In jedem dieser Wettbewerbe sammeln Sie in der Anfangsphase ein unrealistisches Maß an Erfahrung in der Lösung von Problemen unterschiedlicher Art, Entwicklungserfahrung und Erfahrung in der Arbeit im Team, was in unserer Zeit wichtig ist.

Von dort aus werden wir unsere Aufgabe übernehmen. Es heißt „Titanic“. Die Bedingung lautet: Vorhersagen, ob jeder einzelne Mensch überleben wird. Im Allgemeinen besteht die Aufgabe einer an DS beteiligten Person darin, Daten zu sammeln, sie zu verarbeiten, ein Modell zu trainieren, Prognosen zu erstellen usw. In kaggle dürfen wir die Phase der Datenerfassung überspringen – sie werden auf der Plattform präsentiert. Wir müssen sie herunterladen und können loslegen!

Sie können dies wie folgt tun:

Die Registerkarte „Daten“ enthält Dateien, die Daten enthalten

Ihr erster Schritt in Data Science. Titanic

Ihr erster Schritt in Data Science. Titanic

Wir haben die Daten heruntergeladen, unsere Jupyter-Notebooks vorbereitet und ...

Шаг второй

Wie laden wir nun diese Daten?

Importieren wir zunächst die notwendigen Bibliotheken:

import pandas as pd
import numpy as np

Mit Pandas können wir CSV-Dateien zur weiteren Verarbeitung herunterladen.

Numpy wird benötigt, um unsere Datentabelle als Matrix mit Zahlen darzustellen.
Fortfahren. Nehmen wir die Datei train.csv und laden sie zu uns hoch:

dataset = pd.read_csv('train.csv')

Wir werden über die Datensatzvariable auf unsere train.csv-Datenauswahl verweisen. Mal sehen, was da ist:

dataset.head()

Ihr erster Schritt in Data Science. Titanic

Mit der Funktion head() können wir uns die ersten paar Zeilen eines Datenrahmens ansehen.

Die Survived-Spalten sind genau unsere Ergebnisse, die in diesem Datenrahmen bekannt sind. Für die Aufgabenfrage müssen wir die Spalte „Überlebt“ für test.csv-Daten vorhersagen. In diesen Daten werden Informationen über andere Passagiere der Titanic gespeichert, deren Ausgang wir bei der Lösung des Problems nicht kennen.

Teilen wir unsere Tabelle also in abhängige und unabhängige Daten auf. Hier ist alles einfach. Abhängige Daten sind Daten, die von den unabhängigen Daten in den Ergebnissen abhängen. Unabhängige Daten sind solche Daten, die das Ergebnis beeinflussen.

Wir haben zum Beispiel den folgenden Datensatz:

„Vova hat Informatik unterrichtet – nein.
Vova erhielt eine 2 in Informatik.“

Die Note in Informatik hängt von der Antwort auf die Frage ab: Hat Vova Informatik studiert? Ist das klar? Auf geht's, wir sind dem Ziel schon näher!

Die traditionelle Variable für unabhängige Daten ist X. Für abhängige Daten ist y.

Wir machen folgendes:

X = dataset.iloc[ : , 2 : ]
y = dataset.iloc[ : , 1 : 2 ]

Was ist das? Mit der Funktion iloc[:, 2: ] sagen wir Python: Ich möchte in der Variablen X die Daten ab der zweiten Spalte sehen (einschließlich und vorausgesetzt, dass die Zählung bei Null beginnt). In der zweiten Zeile sagen wir, dass wir die Daten in der ersten Spalte sehen möchten.

[ a:b, c:d ] ist die Konstruktion dessen, was wir in Klammern verwenden. Wenn Sie keine Variablen angeben, werden diese als Standard gespeichert. Das heißt, wir können [:,: d] angeben und erhalten dann alle Spalten im Datenrahmen, mit Ausnahme derjenigen, die ab Nummer d aufwärts gehen. Die Variablen a und b definieren Zeichenfolgen, aber wir benötigen sie alle, also belassen wir dies als Standard.

Mal sehen, was wir bekommen haben:

X.head()

Ihr erster Schritt in Data Science. Titanic

y.head()

Ihr erster Schritt in Data Science. Titanic

Um diese kleine Lektion zu vereinfachen, werden wir Spalten entfernen, die besondere Sorgfalt erfordern oder die Überlebensfähigkeit überhaupt nicht beeinträchtigen. Sie enthalten Daten vom Typ str.

count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X.drop(count, inplace=True, axis=1)

Super! Fahren wir mit dem nächsten Schritt fort.

Schritt drei

Hier müssen wir unsere Daten verschlüsseln, damit die Maschine besser versteht, wie sich diese Daten auf das Ergebnis auswirken. Aber wir werden nicht alles kodieren, sondern nur die str-Daten, die wir hinterlassen haben. Kolumne „Sex“. Wie wollen wir codieren? Stellen wir Daten über das Geschlecht einer Person als Vektor dar: 10 – männlich, 01 – weiblich.

Lassen Sie uns zunächst unsere Tabellen in eine NumPy-Matrix umwandeln:

X = np.array(X)
y = np.array(y)

Und jetzt schauen wir mal:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
                       remainder='passthrough')
X = np.array(ct.fit_transform(X))

Die sklearn-Bibliothek ist eine so coole Bibliothek, die es uns ermöglicht, umfassende Arbeiten im Bereich Data Science durchzuführen. Es enthält eine Vielzahl interessanter Modelle für maschinelles Lernen und ermöglicht uns auch die Datenaufbereitung.

OneHotEncoder ermöglicht es uns, das Geschlecht einer Person in dieser Darstellung zu kodieren, wie wir beschrieben haben. Es werden 2 Klassen erstellt: männlich, weiblich. Wenn es sich bei der Person um einen Mann handelt, wird in die Spalte „männlich“ eine 1 und in die Spalte „weiblich“ eine 0 geschrieben.

Nach OneHotEncoder() steht [1] – das bedeutet, dass wir Spalte Nummer 1 kodieren wollen (von Null an gezählt).

Super. Gehen wir noch weiter!

Dies geschieht in der Regel dadurch, dass einige Daten leer bleiben (also NaN – keine Zahl). Es gibt zum Beispiel Informationen über eine Person: ihren Namen, ihr Geschlecht. Es gibt jedoch keine Informationen über sein Alter. In diesem Fall wenden wir die folgende Methode an: Wir ermitteln das arithmetische Mittel über alle Spalten und füllen die Lücke mit dem arithmetischen Mittel, wenn in der Spalte einige Daten fehlen.

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X)
X = imputer.transform(X)

Berücksichtigen wir nun, dass es Situationen gibt, in denen die Daten sehr groß sind. Einige Daten liegen im Intervall [0:1], während andere möglicherweise über Hunderttausende hinausgehen. Um solche Streuungen zu beseitigen und den Computer bei seinen Berechnungen genauer zu machen, scannen wir die Daten und skalieren sie. Alle Zahlen dürfen drei nicht überschreiten. Dazu verwenden wir die StandardScaler-Funktion.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X[:, 2:] = sc.fit_transform(X[:, 2:])

Jetzt sehen unsere Daten so aus:

Ihr erster Schritt in Data Science. Titanic

Klasse. Wir sind unserem Ziel schon nahe!

Schritt vier

Lasst uns unser erstes Modell trainieren! In der sklearn-Bibliothek finden wir eine Vielzahl interessanter Dinge. Ich habe das Gradient Boosting Classifier-Modell auf dieses Problem angewendet. Wir verwenden einen Klassifikator, weil unsere Aufgabe eine Klassifizierungsaufgabe ist. Die Prognose sollte mit 1 (überlebt) oder 0 (nicht überlebt) bewertet werden.

from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier(learning_rate=0.5, max_depth=5, n_estimators=150)
gbc.fit(X, y)

Die Fit-Funktion teilt Python mit: Lassen Sie das Modell nach Abhängigkeiten zwischen X und Y suchen.

Weniger als eine Sekunde und das Modell ist fertig.

Ihr erster Schritt in Data Science. Titanic

Wie wendet man es an? Wir werden es jetzt sehen!

Schritt fünf. Abschluss

Jetzt müssen wir eine Tabelle mit unseren Testdaten laden, für die wir eine Prognose erstellen müssen. Mit dieser Tabelle werden wir dieselben Aktionen ausführen, die wir für X durchgeführt haben.

X_test = pd.read_csv('test.csv', index_col=0)

count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X_test.drop(count, inplace=True, axis=1)

X_test = np.array(X_test)

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
                       remainder='passthrough')
X_test = np.array(ct.fit_transform(X_test))

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X_test)
X_test = imputer.transform(X_test)

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_test[:, 2:] = sc.fit_transform(X_test[:, 2:])

Wenden wir jetzt unser Modell an!

gbc_predict = gbc.predict(X_test)

Alle. Wir haben eine Prognose erstellt. Jetzt muss es im CSV-Format erfasst und an die Site gesendet werden.

np.savetxt('my_gbc_predict.csv', gbc_predict, delimiter=",", header = 'Survived')

Bereit. Wir haben für jeden Passagier eine Datei mit Vorhersagen erhalten. Es bleibt nur noch, diese Lösungen auf die Website hochzuladen und eine Einschätzung der Prognose zu erhalten. Eine solch primitive Lösung liefert nicht nur 74 % der richtigen Antworten in der Öffentlichkeit, sondern auch einige Impulse in der Datenwissenschaft. Die Neugierigsten können mir jederzeit in privaten Nachrichten schreiben und eine Frage stellen. Danke an alle!

Source: habr.com

Kommentar hinzufügen