Ditt første skritt i datavitenskap. Titanic

Et kort innledende ord

Jeg tror at vi kunne gjort flere ting hvis vi fikk trinnvise instruksjoner som forteller oss hva vi skal gjøre og hvordan vi skal gjøre det. Jeg husker selv øyeblikk i livet mitt da jeg ikke kunne starte noe fordi det rett og slett var vanskelig å forstå hvor jeg skulle begynne. Kanskje, en gang i tiden på Internett så du ordene "Data Science" og bestemte deg for at du var langt fra dette, og menneskene som gjør dette var et sted der ute, i en annen verden. Nei, de er her. Og kanskje, takket være folk fra dette feltet, dukket det opp en artikkel på feeden din. Det er nok av kurs som vil hjelpe deg å venne deg til dette håndverket, men her skal jeg hjelpe deg å ta det første steget.

Vel, er du klar? La meg fortelle deg med en gang at du trenger å kjenne til Python 3, siden det er det jeg skal bruke her. Jeg anbefaler deg også å installere den på Jupyter Notebook på forhånd eller se hvordan du bruker google colab.

Step One

Ditt første skritt i datavitenskap. Titanic

Kaggle er din betydelige assistent i denne saken. I prinsippet kan du klare deg uten det, men jeg vil snakke om dette i en annen artikkel. Dette er en plattform som arrangerer Data Science-konkurranser. I hver slik konkurranse vil du i de tidlige stadiene få en urealistisk mengde erfaring med å løse problemer av ulike slag, utviklingserfaring og erfaring med å jobbe i team, noe som er viktig i vår tid.

Vi tar vår oppgave derfra. Den heter "Titanic". Betingelsen er denne: forutsi om hver enkelt person vil overleve. Generelt sett er oppgaven til en person involvert i DS å samle inn data, behandle dem, trene en modell, prognoser og så videre. I kaggle har vi lov til å hoppe over datainnsamlingsstadiet - de presenteres på plattformen. Vi må laste dem ned og vi kan komme i gang!

Du kan gjøre dette på følgende måte:

Data-fanen inneholder filer som inneholder data

Ditt første skritt i datavitenskap. Titanic

Ditt første skritt i datavitenskap. Titanic

Vi lastet ned dataene, forberedte Jupyter-notatbøkene våre og...

Trinn to

Hvordan laster vi disse dataene nå?

Først, la oss importere de nødvendige bibliotekene:

import pandas as pd
import numpy as np

Pandas vil tillate oss å laste ned .csv-filer for videre behandling.

Numpy er nødvendig for å representere datatabellen vår som en matrise med tall.
Gå videre. La oss ta filen train.csv og laste den opp til oss:

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

Vi vil referere til vårt train.csv-datavalg gjennom datasettvariabelen. La oss se hva som er der:

dataset.head()

Ditt første skritt i datavitenskap. Titanic

Head()-funksjonen lar oss se på de første par radene i en dataramme.

Overlevde-kolonnene er nettopp våre resultater, som er kjent i denne datarammen. For oppgavespørsmålet må vi forutsi kolonnen Overlevd for test.csv-data. Disse dataene lagrer informasjon om andre passasjerer på Titanic, som vi, som løser problemet, ikke vet utfallet for.

Så la oss dele tabellen vår inn i avhengige og uavhengige data. Alt er enkelt her. Avhengige data er de dataene som er avhengige av de uavhengige dataene som er i resultatene. Uavhengige data er de dataene som påvirker resultatet.

For eksempel har vi følgende datasett:

«Vova underviste i datavitenskap - nei.
Vova fikk en 2 i informatikk."

Karakteren i informatikk avhenger av svaret på spørsmålet: studerte Vova informatikk? Det er klart? La oss gå videre, vi er allerede nærmere målet!

Den tradisjonelle variabelen for uavhengige data er X. For avhengige data, y.

Vi gjør følgende:

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

Hva det er? Med funksjonen iloc[:, 2: ] forteller vi Python: Jeg vil se i variabel X dataene som starter fra den andre kolonnen (inkludert og forutsatt at tellingen starter fra null). I den andre linjen sier vi at vi ønsker å se dataene i den første kolonnen.

[ a:b, c:d ] er konstruksjonen av det vi bruker i parentes. Hvis du ikke spesifiserer noen variabler, vil de bli lagret som standard. Det vil si at vi kan spesifisere [:,: d] og da får vi alle kolonnene i datarammen, bortsett fra de som går fra nummer d og utover. Variablene a og b definerer strenger, men vi trenger dem alle, så vi lar dette være standard.

La oss se hva vi har:

X.head()

Ditt første skritt i datavitenskap. Titanic

y.head()

Ditt første skritt i datavitenskap. Titanic

For å forenkle denne lille leksjonen vil vi fjerne kolonner som krever spesiell pleie eller som ikke påvirker overlevelsesevnen i det hele tatt. De inneholder data av typen str.

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

Super! La oss gå videre til neste trinn.

Trinn tre

Her må vi kode dataene våre slik at maskinen bedre forstår hvordan disse dataene påvirker resultatet. Men vi vil ikke kode alt, men bare str-dataene som vi forlot. Kolonne "Sex". Hvordan vil vi kode? La oss representere data om en persons kjønn som en vektor: 10 - mann, 01 - kvinne.

Først, la oss konvertere tabellene våre til en NumPy-matrise:

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

Og la oss nå se:

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

Sklearn-biblioteket er et så kult bibliotek som lar oss gjøre fullstendig arbeid i Data Science. Den inneholder et stort antall interessante maskinlæringsmodeller og lar oss også gjøre dataforberedelser.

OneHotEncoder vil tillate oss å kode kjønnet til en person i den representasjonen, slik vi beskrev. Det opprettes 2 klasser: mann, kvinne. Hvis personen er en mann, vil 1 bli skrevet i henholdsvis «mannlig»-kolonnen og 0 i «kvinnelig»-kolonnen.

Etter OneHotEncoder() er det [1] - dette betyr at vi ønsker å kode kolonne nummer 1 (teller fra null).

Super. La oss gå enda lenger!

Som regel skjer dette at noen data blir tomme (det vil si NaN - ikke et tall). For eksempel er det informasjon om en person: hans navn, kjønn. Men det er ingen opplysninger om hans alder. I dette tilfellet vil vi bruke følgende metode: vi vil finne det aritmetiske gjennomsnittet over alle kolonnene, og hvis noen data mangler i kolonnen, vil vi fylle tomrommet med det aritmetiske gjennomsnittet.

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

La oss nå ta i betraktning at situasjoner oppstår når dataene er veldig store. Noen data er i intervallet [0:1], mens noen kan gå utover hundrevis og tusenvis. For å eliminere slik spredning og for å gjøre datamaskinen mer nøyaktig i sine beregninger, vil vi skanne dataene og skalere dem. La alle tallene ikke overstige tre. For å gjøre dette bruker vi StandardScaler-funksjonen.

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

Nå ser dataene våre slik ut:

Ditt første skritt i datavitenskap. Titanic

Klasse. Vi er allerede nær målet!

Trinn fire

La oss trene vår første modell! Fra sklearn-biblioteket kan vi finne et stort antall interessante ting. Jeg brukte Gradient Boosting Classifier-modellen på dette problemet. Vi bruker A klassifiserer fordi oppgaven vår er en klassifiseringsoppgave. Prognosen bør tilordnes 1 (overlevde) eller 0 (overlevde ikke).

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

Tilpasningsfunksjonen forteller Python: La modellen se etter avhengigheter mellom X og y.

Mindre enn et sekund og modellen er klar.

Ditt første skritt i datavitenskap. Titanic

Hvordan bruke det? Vi får se nå!

Trinn fem. Konklusjon

Nå må vi laste en tabell med testdataene våre som vi må lage en prognose for. Med denne tabellen vil vi gjøre alle de samme handlingene som vi gjorde for X.

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

La oss bruke modellen vår nå!

gbc_predict = gbc.predict(X_test)

Alle. Vi laget en prognose. Nå må det tas opp i csv og sendes til nettsiden.

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

Klar. Vi mottok en fil som inneholder spådommer for hver passasjer. Det gjenstår bare å laste opp disse løsningene til nettsiden og få en vurdering av prognosen. En slik primitiv løsning gir ikke bare 74% av riktige svar på offentligheten, men også en viss drivkraft innen Data Science. De mest nysgjerrige kan når som helst skrive til meg i private meldinger og stille et spørsmål. Takk til alle!

Kilde: www.habr.com

Legg til en kommentar