Ären éischte Schrëtt an Data Science. Titanic

E kuerzen Aféierungswuert

Ech gleewen, datt mir méi Saache maache kéinte wa mir Schrëtt-fir-Schrëtt Instruktioune géife kréien, déi eis soen wat mir maache sollen a wéi et maache soll. Ech selwer erënnere mech un Momenter a mengem Liewen, wou ech eppes net konnt ufänken, well et einfach schwéier war ze verstoen wou ufänken. Vläicht hutt Dir eemol um Internet d'Wierder "Data Science" gesinn an decidéiert datt Dir wäit dovunner sidd, an déi Leit, déi dat maachen, waren iergendwou dobaussen, an enger anerer Welt. Nee, si sinn hei. An, vläicht, dank Leit aus dësem Beräich, ass en Artikel op Ärem Feed opgetaucht. Et gi vill Coursen déi Iech hëllefe mat dësem Handwierk gewinnt ze ginn, awer hei hëllefen ech Iech den éischte Schrëtt ze huelen.

Gutt, sidd Dir prett? Loosst mech Iech direkt soen datt Dir Python 3 wësse musst, well dat ass wat ech hei benotze wäert. Ech roden Iech och am Viraus op Jupyter Notebook ze installéieren oder ze kucken wéi Dir Google Colab benotzt.

Step One

Ären éischte Schrëtt an Data Science. Titanic

Kaggle ass Äre bedeitende Assistent an dëser Matière. Prinzipiell kënnt Dir ouni et maachen, awer ech wäert iwwer dëst an engem aneren Artikel schwätzen. Dëst ass eng Plattform déi Data Science Concoursen organiséiert. An all esou Concours, an de fréie Stadien kritt Dir eng onrealistesch Quantitéit un Erfahrung fir Probleemer vu verschiddenen Aarte ze léisen, Entwécklungserfahrung an Erfahrung an engem Team ze schaffen, wat an eiser Zäit wichteg ass.

Mir huelen eis Aufgab vun do aus. Et gëtt "Titanic" genannt. D'Konditioun ass dëst: virauszesoen ob all eenzel Persoun iwwerlieft. Allgemeng ass d'Aufgab vun enger Persoun, déi an DS involvéiert ass, Daten ze sammelen, ze veraarbecht, e Modell ze trainéieren, Prognosen, asw. Am Kaggle däerfe mir d'Datesammlungsstadium iwwersprangen - si ginn op der Plattform presentéiert. Mir mussen se eroflueden a mir kënnen ufänken!

Dëst kann esou gemaach ginn:

den Tab Data enthält Dateien déi Daten enthalen

Ären éischte Schrëtt an Data Science. Titanic

Ären éischte Schrëtt an Data Science. Titanic

Mir hunn d'Donnéeën erofgelueden, eis Jupyter Notizbicher virbereet an ...

Schrëtt zwou

Wéi luede mir elo dës Donnéeën?

Als éischt, loosst eis déi néideg Bibliothéiken importéieren:

import pandas as pd
import numpy as np

Pandas erlaabt eis .csv Dateien fir weider Veraarbechtung erofzelueden.

Numpy ass gebraucht fir eis Datentabelle als Matrix mat Zuelen ze representéieren.
Maach weider. Loosst eis d'train.csv Datei huelen an eis eroplueden:

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

Mir bezéien eis op eis train.csv Dateauswiel duerch d'Datasazvariabel. Loosst eis kucken wat do ass:

dataset.head()

Ären éischte Schrëtt an Data Science. Titanic

D'Funktioun Head () erlaabt eis déi éischt Reihen vun engem Dataframe ze kucken.

D'Survived Kolonnen si genee eis Resultater, déi an dësem Dateframe bekannt sinn. Fir d'Aufgab Fro musse mir d'Survived Kolonn fir test.csv Daten virauszesoen. Dës Donnéeë späicheren Informatiounen iwwer aner Passagéier vun der Titanic, fir déi mir, de Problem léisen, d'Resultat net wëssen.

Also, loosst eis eis Tabell an ofhängeg an onofhängeg Donnéeën opdeelen. Alles ass einfach hei. Ofhängeg Donnéeën sinn déi Donnéeën déi ofhängeg vun den onofhängegen Donnéeën déi an de Resultater sinn. Onofhängeg Donnéeën sinn déi Donnéeën déi d'Resultat beaflossen.

Zum Beispill hu mir de folgenden Dateset:

"Vova huet Informatik geléiert - nee.
Vova krut en 2 an der Informatik.

De Grad an der Informatik hänkt vun der Äntwert op d'Fro of: huet de Vova Informatik studéiert? Ass et kloer? Loosst eis weidergoen, mir si scho méi no beim Zil!

Déi traditionell Variabel fir onofhängeg Donnéeën ass X. Fir ofhängeg Donnéeën, y.

Mir maachen déi folgend:

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

Wat ass et? Mat der Funktioun iloc [:, 2: ] soen mir Python: Ech wëll an der Variabel X d'Donnéeën aus der zweeter Kolonn gesinn (inklusiv a virausgesat datt d'Zählen vun Null ufänkt). An der zweeter Linn soen mir datt mir d'Donnéeën an der éischter Kolonn wëllen gesinn.

[a:b, c:d] ass de Konstruktioun vun deem wat mir an parentheses benotzen. Wann Dir keng Variabelen uginn hutt, ginn se als Standard gespäichert. Dat heescht, mir kënnen [:,: d] spezifizéieren an da kréie mir all d'Kolonn am Dateframe, ausser déi, déi vun der Nummer d u goen. D'Variabelen a a b definéieren Strings, awer mir brauchen se all, also verloosse mir dëst als Standard.

Loosst eis kucken wat mir hunn:

X.head()

Ären éischte Schrëtt an Data Science. Titanic

y.head()

Ären éischte Schrëtt an Data Science. Titanic

Fir dës kleng Lektioun ze vereinfachen, wäerte mir Sailen ewechhuelen, déi speziell Betreiung erfuerderen oder guer net d'Iwwerliewensfäegkeet beaflossen. Si enthalen Daten vum Typ str.

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

Super! Loosst eis op den nächste Schrëtt weidergoen.

Step drei

Hei musse mir eis Donnéeën codéieren fir datt d'Maschinn besser versteet wéi dës Donnéeën d'Resultat beaflossen. Awer mir wäerten net alles codéieren, awer nëmmen d'Str Daten déi mir verlooss hunn. Kolonn "Sex". Wéi wëlle mir codéieren? Loosst eis Daten iwwer d'Geschlecht vun enger Persoun als Vektor representéieren: 10 - männlech, 01 - weiblech.

Als éischt, loosst eis eis Dëscher an eng NumPy Matrix konvertéieren:

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

An elo kucke mer:

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))

D'sklearn Bibliothéik ass sou eng cool Bibliothéik déi eis erlaabt komplett Aarbecht an Data Science ze maachen. Et enthält eng grouss Zuel vun interessant Maschinn Léieren Modeller an erlaabt eis och Daten Virbereedung ze maachen.

OneHotEncoder erlaabt eis d'Geschlecht vun enger Persoun an där Representatioun ze codéieren, wéi mir beschriwwen hunn. Et ginn 2 Klasse geschaf: männlech, weiblech. Wann d'Persoun e Mann ass, da gëtt 1 an der Kolonn "männlech" geschriwwen, respektiv 0 an der Kolonn "weiblech".

No OneHotEncoder () gëtt et [1] - dat heescht, datt mir Kolonn Nummer 1 encoding wëllen (vun null zielen).

Super. Loosst eis nach méi wäit goen!

Als Regel, geschitt dat, datt e puer Donnéeën eidel lénks (dat ass, NaN - net eng Zuel). Zum Beispill gëtt et Informatioun iwwer eng Persoun: säin Numm, Geschlecht. Awer et gëtt keng Informatioun iwwer säin Alter. An dësem Fall wäerte mir déi folgend Method uwenden: mir fanne de arithmetesche Mëttel iwwer all Kolonnen a wann e puer Donnéeën an der Kolonn fehlen, da fëllen mir d'Void mat dem arithmetesche Moyenne.

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

Loosst eis elo berücksichtegen datt Situatiounen geschéien wann d'Donnéeën ganz grouss sinn. E puer Donnéeë sinn am Intervall [0:1], während e puer kënnen iwwer Honnerte an Dausende goen. Fir esou Streuung z'eliminéieren an de Computer méi präzis a senge Berechnungen ze maachen, scannen mir d'Donnéeën a skaléieren se. Loosst all Zuelen net méi wéi dräi. Fir dëst ze maachen, benotze mir d'StandardScaler Funktioun.

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

Elo kucken eis Daten esou aus:

Ären éischte Schrëtt an Data Science. Titanic

Klass. Mir si schonn no bei eisem Zil!

Schrëtt Véier

Loosst eis eisen éischte Modell trainéieren! Vun der sklearn Bibliothéik kënne mir eng grouss Zuel vun interessant Saachen fannen. Ech hunn de Gradient Boosting Classifier Modell op dëse Problem applizéiert. Mir benotzen E Klassifizéierer well eis Aufgab eng Klassifizéierungsaufgab ass. D'Prognose soll op 1 (iwwerlieft) oder 0 (net iwwerlieft) zougewisen ginn.

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

D'Fitfunktioun seet Python: Loosst de Modell no Ofhängegkeeten tëscht X an y kucken.

Manner wéi eng Sekonn an de Modell ass prett.

Ären éischte Schrëtt an Data Science. Titanic

Wéi applizéiert een? Mir gesinn elo!

Schrëtt fënnef. Conclusioun

Elo musse mir en Dësch mat eisen Testdaten lueden, fir déi mir eng Prognose musse maachen. Mat dëser Tabell wäerte mir all déiselwecht Aktiounen maachen, déi mir fir X gemaach hunn.

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:])

Loosst eis elo eise Modell uwenden!

gbc_predict = gbc.predict(X_test)

All. Mir hunn eng Prognose gemaach. Elo muss et an csv opgeholl ginn an op de Site geschéckt ginn.

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

Fäerdeg. Mir kruten e Fichier mat Prognosen fir all Passagéier. Alles wat bleift ass dës Léisungen op d'Websäit eropzelueden an eng Bewäertung vun der Prognose ze kréien. Esou eng primitiv Léisung gëtt net nëmmen 74% vun korrekt Äntwerten op de Public, mä och e puer Impulser an Data Science. Déi Virwëtzegste kënnen mir zu all Moment a Privatnoriichten schreiwen an eng Fro stellen. Merci un all!

Source: will.com

Setzt e Commentaire