Ihr erster Schritt in Data Science. Titanic

Eine kleine Einführung


Ich glaube, wir könnten mehr tun, wenn wir Schritt für Schritt Anweisungen erhalten, die erklären, was und wie zu tun ist. Ich selbst erinnere mich in meinem Leben an jene Momente, in denen ein Unternehmen nicht gegründet werden konnte, weil es einfach schwierig war zu verstehen, wo man anfangen sollte. Vielleicht haben Sie einmal im Internet die Worte „Data Science“ gesehen und festgestellt, dass Sie weit davon entfernt sind, und die Leute, die dies irgendwo da draußen in einer anderen Welt tun. Also nein, sie sind genau hier. Und vielleicht ist dank Menschen aus dieser Sphäre ein Artikel in Ihrem Feed erschienen. Es gibt viele Kurse, die Ihnen helfen, sich mit diesem Handwerk vertraut zu machen. Hier werde ich Ihnen helfen, den ersten Schritt zu tun.

Bist du bereit? Ich muss sofort sagen, dass Sie Python 3 kennen müssen, da ich es hier verwenden werde. Außerdem empfehle ich Ihnen, eine Vorinstallation auf dem Jupyter Notebook durchzuführen oder zu erfahren, wie Sie Google Colab verwenden.

Schritt eins


Bild

Kaggle ist Ihr wichtiger Assistent in dieser Angelegenheit. Im Prinzip können Sie darauf verzichten, aber ich werde in einem anderen Artikel darüber sprechen. Dies ist die Plattform, auf der der Data Science-Wettbewerb stattfindet. In jedem dieser Wettbewerbe in der Anfangsphase erhalten Sie eine unrealistische Menge an Erfahrung in der Lösung verschiedener Probleme, Entwicklungserfahrung und Teamarbeitserfahrung, was in unserer Zeit wichtig ist.

Wir werden unsere Aufgabe von dort übernehmen. Es heißt so: "Titanic". Die Bedingung ist folgende: Um vorherzusagen, dass jede einzelne Person überleben wird. Im Allgemeinen besteht die Aufgabe der an DS beteiligten Person in der Erfassung von Daten, ihrer Verarbeitung, Modellschulung, Prognose usw. Bei kaggle dürfen wir die Datenerfassungsphase überspringen - sie werden auf der Plattform präsentiert. Wir müssen sie herunterladen und Sie können loslegen!

Sie können dies wie folgt tun:

Auf der Registerkarte Daten befinden sich die Dateien, die die Daten enthalten.

Bild

Bild

Heruntergeladene Daten, vorbereitete Jupyter-Notizbücher und ...

Zweiter Schritt


Wie laden wir diese Daten jetzt herunter?

Zuerst importieren wir 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.
Mach weiter. Nehmen Sie die Datei train.csv und laden Sie sie zu uns hoch:

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

Wir werden über die Dataset-Variable auf unsere Beispieldaten für train.csv verweisen. Werfen wir einen Blick darauf, was sich dort befindet:

dataset.head()

Bild

Mit der Funktion head () können wir die ersten Zeilen des Datenrahmens anzeigen.

Überlebende Spalten sind nur unsere Ergebnisse, die in diesem Datenrahmen bekannt sind. In Bezug auf das Problem müssen wir die Spalte "Überlebt" für test.csv-Daten vorhersagen. Diese Daten speichern Informationen über andere Passagiere der Titanic, für die wir als Entscheidungsträger die Ergebnisse nicht kennen.

Also werden wir unsere Tabelle in abhängige und unabhängige Daten unterteilen. Hier ist alles einfach. Abhängige Daten sind Daten, die unabhängig von den Ergebnissen sind. Unabhängige Daten sind Daten, die das Ergebnis beeinflussen.

Zum Beispiel haben wir einen solchen Datensatz:

„Vova hat Informatik unterrichtet - nein.
Vova erhielt auf Informatik 2. "

Die Bewertung in der Informatik hängt von der Antwort auf die Frage ab: Hat Vova Informatik unterrichtet? Ist das klar? Im weiteren Verlauf sind wir dem Ziel näher!

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

Wir machen folgendes:

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

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

[a: b, c: d] ist eine Konstruktion dessen, was wir in Klammern verwenden. Wenn Sie keine Variablen angeben, bleiben diese standardmäßig erhalten. Das heißt, wir können [:,: d] angeben und erhalten dann im Datenrahmen alle Spalten mit Ausnahme derjenigen, die ab der Zahl d und weiter gehen. Die Variablen a und b definieren Zeichenfolgen, aber wir alle benötigen sie, daher belassen wir diese Standardeinstellung.

Lass uns nachsehen, was passiert ist:

X.head()

Bild

y.head()

Bild

Um diese kleine Lektion zu vereinfachen, werden wir Spalten entfernen, die besondere „Pflege“ erfordern oder das Überleben überhaupt nicht beeinträchtigen. Sie enthalten Daten vom Typ str.

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

Super! Wir gehen zum nächsten Schritt.

Schritt drei


Hier müssen wir unsere Daten codieren, damit die Maschine besser versteht, wie sich diese Daten auf das Ergebnis auswirken. Wir werden aber nicht alles verschlüsseln, sondern nur die Daten vom Typ str, die wir hinterlassen haben. Spalte "Sex". Wie wollen wir codieren? Stellen Sie sich die Daten zum menschlichen Geschlecht anhand des Vektors vor: 10 - männlich, 01 - weiblich.

Zu Beginn übersetzen wir unsere Tabellen in die NumPy-Matrix:

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

Und jetzt schauen wir:

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, dass wir die gesamte Arbeit in Data Science erledigen können. Es enthält eine große Anzahl interessanter Modelle für maschinelles Lernen und ermöglicht uns auch die Datenaufbereitung.

Mit OneHotEncoder können wir das Geschlecht der Person in dieser Darstellung wie beschrieben codieren. Es werden 2 Klassen erstellt: männlich, weiblich. Wenn eine Person ein Mann ist, wird 1 in die Spalte "männlich" bzw. 0 geschrieben.

Nach OneHotEncoder () kostet es [1] - dies bedeutet, dass wir Spalte Nummer 1 codieren möchten (von Grund auf neu zählen).

Super. Wir bewegen uns noch weiter!

In der Regel bleiben einige Daten leer (dh NaN - keine Zahl). Zum Beispiel gibt es Informationen über eine Person: ihren Namen, Geschlecht. Es gibt jedoch keine Daten zu seinem Alter. In diesem Fall verwenden wir diese Methode: Wir finden das arithmetische Mittel aller Spalten und füllen die Lücke mit dem arithmetischen Mittel, wenn einige Daten in der Spalte 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 solche Situationen auftreten, wenn die Daten sehr verstreut sind. Einige Daten liegen im Intervall [0: 1], andere können Hunderte und Tausende umfassen. Um eine solche Streuung auszuschließen und der Computer bei den Berechnungen genauer war, werden wir die Daten skalieren, skalieren. Lassen Sie alle Zahlen drei nicht überschreiten. Verwenden Sie dazu die Funktion StandartScaler.

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

Jetzt sehen unsere Daten so aus:

Bild

Klasse. Wir sind schon nah an unserem Ziel!

Vierter Schritt


Trainiere unser erstes Modell! In der sklearn-Bibliothek finden wir eine Menge interessanter Dinge. Ich habe das Gradient Boosting Classifier-Modell auf diese Aufgabe angewendet. Wir verwenden einen Klassifikator, da unsere Aufgabe eine Klassifizierungsaufgabe ist. Es ist notwendig, die Prognose 1 (überlebt) oder 0 (nicht überlebt) zuzuordnen.

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

Die Anpassungsfunktion teilt Python mit: Lassen Sie das Modell nach Abhängigkeiten zwischen X und y suchen.

In weniger als einer Sekunde ist das Modell fertig.

Bild

Wie wende ich es an? Wir werden jetzt sehen!

Schritt fünf Fazit


Jetzt müssen wir die Tabelle mit unseren Testdaten laden, für die wir eine Prognose erstellen müssen. Mit dieser Tabelle führen wir dieselben Aktionen aus, die wir für X ausgefü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:])

Wir werden unser Modell bereits anwenden!

gbc_predict = gbc.predict(X_test)

Alle. Wir haben eine Prognose abgegeben. Jetzt muss es in csv aufgezeichnet und an die Site gesendet werden.

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

Erledigt. Ich habe eine Datei mit Vorhersagen für jeden Passagier erhalten. Es bleibt, diese Entscheidungen auf die Website hochzuladen und eine Schätzung der Prognose zu erhalten. Eine solche primitive Lösung gibt nicht nur 74% der richtigen Antworten in der Öffentlichkeit, sondern auch einige Impulse für Data Science. Die Neugierigsten können mir jederzeit private Nachrichten schreiben und eine Frage stellen. Danke an alle!

All Articles