En liten innledning
Jeg mener at vi kunne ha gjort mye mer dersom vi fikk trinn-for-trinn-instruksjoner som forklarte hva vi skulle gjÞre og hvordan. Jeg husker i mitt liv Þyeblikk hvor jeg ikke kunne begynne pÄ et prosjekt fordi det rett og slett var vanskelig Ä forstÄ hvor man skulle begynne. Kanskje for lenge siden sÄ du ordet «Data Science» pÄ internett og tenkte at dette var langt unna deg, og at folk i denne bransjen holdt til et helt annet sted. Men nei, de er rett her. Og kanskje takket vÊre folk i dette feltet har en artikkel kommet i feeden din. Det finnes masser av kurs som kan hjelpe deg Ä mestre dette hÄndverket, her vil jeg hjelpe deg med Ä ta det fÞrste steget.
SÄ, er du klar? Jeg vil med en gang si at du mÄ kunne Python 3, ettersom det er det jeg skal bruke her. Jeg anbefaler ogsÄ at du installerer Jupyter Notebook pÄ forhÄnd eller ser hvordan du bruker Google Colab.
FĂžrste steg

Kaggle er din betydelige hjelper i denne prosessen. Generelt kan du klare deg uten det, men dette vil jeg ta opp i en annen artikkel. Det er en plattform hvor konkurranser i Data Science avholdes. I hvert av disse konkurransene vil du i begynnelsen fÄ en enorm mengde erfaring fra Ä lÞse ulike oppgaver, utvikle prosjekter, og jobbe i team, noe som er viktig i vÄr tid.
Vi tar oppgaven vĂ„r derfra. Den heter «Titanic». Oppgaven er som fĂžlger: forutsi om hver enkelt person overlever. Generelt sagt, oppgaven til en person som jobber med DS er Ă„ samle data, bearbeide dem, trene en modell, lage prognoser, og sĂ„ videre. PĂ„ Kaggle blir vi imidlertid spart for datainnsamlingsprosessen â de er allerede tilgjengelige pĂ„ plattformen. Vi mĂ„ laste dem opp, og sĂ„ kan vi begynne arbeidet!
Dette kan gjÞres pÄ fÞlgende mÄte:
Under fanen Data ligger filene som inneholder dataene.


Vi har lastet opp dataene, forberedt Jupyter-notatbÞkene vÄre, og ...
Andre steg
Hvordan laster vi nÄ opp disse dataene?
For det fĂžrste importerer vi de nĂždvendige bibliotekene:
import pandas as pd
import numpy as np
Pandas lar oss laste opp .csv-filer for videre behandling.
Numpy er nÞdvendig for Ä representere datatabellen vÄr som en matrise med tall.
La oss gÄ videre. Vi tar filen train.csv og laster den opp til oss:
dataset = pd.read_csv('train.csv')
Vi vil referere til vÄrt datasett fra train.csv gjennom variabelen dataset. La oss se hva som er der:
dataset.head()

Funksjonen head() lar oss se de fĂžrste radene av datasettet.
Kolonnen Survived er vÄre resultater som er kjent i dette datasettet. I denne oppgaven mÄ vi forutsi kolonnen Survived for dataene i test.csv. I disse dataene finnes informasjon om andre passasjerer av Titanic, for hvem vi, som jobber med oppgaven, ikke kjenner utfallet.
SÄ, la oss dele opp tabellen vÄr i avhengige og uavhengige data. Her er det enkelt. Avhengige data er de som avhenger av uavhengige - det som er i utfallet. Uavhengige data er de som pÄvirker utfallet.
For eksempel har vi fĂžlgende datasett:
«Vova lÊrte informatikk - nei.
Vova fikk 2 i informatikk.»
Karakteren i informatikk avhenger av svaret pÄ spÞrsmÄlet: lÊrte Vova informatikk? ForstÄtt? La oss gÄ videre, vi er allerede nÊrmere mÄlet!
Den tradisjonelle variabelen for uavhengige data er X. For avhengige er det y.
Vi gjĂžr fĂžlgende:
X = dataset.iloc[ : , 2 : ]
y = dataset.iloc[ : , 1 : 2 ]
Hva er dette? Ved Ă„ bruke iloc[:, 2: ] sier vi til Python: jeg vil se dataene som starter fra den andre kolonnen (inkludert, og med forutsetning om at tellingen begynner fra null). I den andre linjen sier vi at vi vil se dataene fra den fĂžrste kolonnen i y.
[ a:b, c:d ] - dette er konstruksjonen vi bruker i parentesene. Hvis vi ikke angir noen variabler, vil de bli beholdt som standard. Det vil si at vi kan spesifisere [:,: d] og da vil vi fÄ alle kolonnene i datasettet, unntatt de som begynner fra nummer d og videre. Variablene a og b definerer radene, men vi trenger alle, sÄ vi lar dette vÊre standard.
La oss se hva vi har fÄtt ut:
X.head() 
y.head() 
For Ä forenkle denne lille leksjonen, vil vi fjerne de kolonnene som krever spesielt «vedlikehold» eller som ikke pÄvirker overlevelsen i det hele tatt. De inneholder data av type str.
count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X.drop(count, inplace=True, axis=1)
Supert! La oss gÄ videre til neste steg.
Trinn tre
Her mĂ„ vi koding av dataene vĂ„re, slik at maskinen bedre forstĂ„r hvordan disse dataene pĂ„virker resultatet. Men vi vil ikke kode alt, bare data av typen str som vi har lĂ„tt stĂ„. Kolonnen «Sex». Hvordan Ăžnsker vi Ă„ kode dette? La oss representere dataene om en persons kjĂžnn som en vektor: 10 â mannlig, 01 â kvinnelig.
La oss fÞrst oversette tabellene vÄre til en NumPy-matrise:
X = np.array(X)
y = np.array(y)
Og nÄ ser vi:
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 fantastisk bibliotek som lar oss utfÞre hele arbeidet innen Data Science. Det inneholder en stor mengde interessante modeller for maskinlÊring, og gjÞr det ogsÄ mulig Ä arbeide med dataklargjÞring.
OneHotEncoder vil la oss kode en persons kjÞnn i det formatet vi har beskrevet. Det vil bli opprettet 2 klasser: mannlig, kvinnelig. Hvis personen er mann, blir 1 skrevet i kolonnen «mannlig», og 0 i «kvinnelig».
Etter OneHotEncoder() stĂ„r [1] â dette betyr at vi Ăžnsker Ă„ kode kolonne nummer 1 (teller fra null).
Supert! La oss gÄ videre!
Som regel skjer det at noen data forblir ufullstendige (det vil si NaN â ikke et tall). For eksempel har vi informasjon om en person: hans navn, kjĂžnn. Men vi har ingen data om hans alder. I sĂ„ fall bruker vi fĂžlgende metode: vi finner det aritmetiske gjennomsnittet av alle kolonner, og hvis det er noen tomme data i en kolonne, fyller vi inn med det aritmetiske gjennomsnittet.
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X)
X = imputer.transform(X)
Og nÄ mÄ vi ta hensyn til at det kan oppstÄ situasjoner der dataene er veldig spredte. Noen data ligger i intervallet [0:1], mens andre kan vÊre i hundrevis og tusenvis. For Ä eliminere slik spredning og for at datamaskinen skal vÊre mer presis i beregningene, vil vi skalere dataene, det vil si normalisere dem. La oss si at alle tall ikke skal overstige tre. For dette bruker vi funksjonen StandardScaler.
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X[:, 2:] = sc.fit_transform(X[:, 2:])
NÄ ser dataene vÄre slik ut:

Flott! Vi er allerede nÊr mÄlet vÄrt!
Trinn fire
La oss trene vÄr fÞrste modell! Fra biblioteken sklearn kan vi finne et stort antall interessante ting. Jeg brukte Gradient Boosting Classifier-modellen for denne oppgaven. Vi bruker en klassifikator, siden oppgaven vÄr er en klassifiseringsoppgave. Vi mÄ forutsi om resultatet er 1 (overlevd) eller 0 (ikke overlevd).
from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier(learning_rate=0.5, max_depth=5, n_estimators=150)
gbc.fit(X, y)
Fit-funksjonen sier til Python: La modellen finne sammenhenger mellom X og y.
PĂ„ mindre enn ett sekund er modellen klar.

Hvordan bruke den? Det skal vi se nÄ!
Trinn fem. Konklusjon
NÄ mÄ vi laste opp tabellen med testdataene vÄre, for hvilke vi trenger Ä lage en prognose. Vi vil gjÞre akkurat det samme med denne tabellen som vi gjorde med 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)
Ferdig. Vi har laget en prognose. NÄ mÄ vi lagre den i CSV og sende den til nettstedet.
np.savetxt('my_gbc_predict.csv', gbc_predict, delimiter=",", header = 'Survived')
Ferdig. Vi har fÄtt en fil som inneholder spÄdommer for hver passasjer. Det gjenstÄr bare Ä laste opp disse lÞsningene pÄ nettstedet og fÄ vurderingen av prognosen. Denne primitive lÞsningen gir ikke bare 74% nÞyaktighet offentlig, men ogsÄ et visst trykk i Data Science. De mest nysgjerrige kan nÄr som helst sende meg en privat melding og stille spÞrsmÄl. Takk alle sammen!
Kilde: habr.com
