Ensimmäinen askeleesi tietotieteessä. Titanic

Lyhyt johdantosana

Uskon, että voisimme tehdä enemmän asioita, jos meille annettaisiin vaiheittaiset ohjeet, jotka kertoisivat, mitä tehdä ja miten se tehdään. Itse muistan elämäni hetkiä, jolloin en voinut aloittaa jotain, koska oli yksinkertaisesti vaikea ymmärtää, mistä aloittaa. Ehkä kerran Internetissä näit sanat "Data Science" ja päätit, että olit kaukana tästä, ja ihmiset, jotka tekevät tätä, olivat jossain siellä, toisessa maailmassa. Ei, he ovat täällä. Ja kenties tämän alan ihmisten ansiosta syötteeseesi ilmestyi artikkeli. On paljon kursseja, jotka auttavat sinua tottumaan tähän käsityöhön, mutta tässä autan sinua ottamaan ensimmäisen askeleen.

No, oletko valmis? Kerron heti, että sinun tulee tietää Python 3, koska sitä aion käyttää täällä. Suosittelen myös asentamaan sen Jupyter Notebookiin etukäteen tai katsomaan kuinka google colabia käytetään.

Vaihe yksi

Ensimmäinen askeleesi tietotieteessä. Titanic

Kaggle on tärkeä avustajasi tässä asiassa. Periaatteessa voit tehdä ilman sitä, mutta puhun tästä toisessa artikkelissa. Tämä on alusta, joka isännöi Data Science -kilpailuja. Jokaisessa tällaisessa kilpailussa saa alkuvaiheessa epärealistisen määrän kokemusta erilaisten ongelmien ratkaisemisesta, kehityskokemusta ja kokemusta tiimityöskentelystä, mikä on meidän aikanamme tärkeää.

Otamme tehtävämme sieltä. Sen nimi on "Titanic". Edellytys on tämä: ennusta, selviääkö jokainen yksittäinen henkilö. Yleisesti ottaen DS:ään osallistuvan henkilön tehtävänä on kerätä dataa, käsitellä sitä, kouluttaa mallia, ennustaa ja niin edelleen. Kagglessa voimme ohittaa tiedonkeruuvaiheen - ne esitetään alustalla. Meidän on ladattava ne ja voimme aloittaa!

Voit tehdä tämän seuraavasti:

Tiedot-välilehti sisältää tiedostoja, jotka sisältävät tietoja

Ensimmäinen askeleesi tietotieteessä. Titanic

Ensimmäinen askeleesi tietotieteessä. Titanic

Latasimme tiedot, valmistelimme Jupyter-muistikirjamme ja...

Vaihe kaksi

Kuinka lataamme nämä tiedot nyt?

Tuodaan ensin tarvittavat kirjastot:

import pandas as pd
import numpy as np

Pandat antavat meille mahdollisuuden ladata .csv-tiedostoja jatkokäsittelyä varten.

Numpy tarvitaan esittämään tietotaulukkoamme matriisina, jossa on numeroita.
Mene eteenpäin. Otetaan tiedosto train.csv ja ladataan se meille:

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

Viitataan train.csv-tietovalikoimaamme tietojoukkomuuttujan kautta. Katsotaan mitä siellä on:

dataset.head()

Ensimmäinen askeleesi tietotieteessä. Titanic

Head()-funktion avulla voimme tarkastella datakehyksen ensimmäisiä rivejä.

Survived-sarakkeet ovat juuri meidän tuloksiamme, jotka tunnetaan tässä tietokehyksessä. Tehtäväkysymyksessä meidän on ennustettava test.csv-tiedon Survived-sarake. Nämä tiedot tallentavat tietoja muista Titanicin matkustajista, joiden lopputulosta ongelmaa ratkaiseessamme emme tiedä.

Joten jaetaan taulukkomme riippuvaisiin ja riippumattomiin tietoihin. Täällä kaikki on yksinkertaista. Riippuvaiset tiedot ovat niitä tietoja, jotka riippuvat tuloksissa olevista riippumattomista tiedoista. Riippumattomat tiedot ovat niitä tietoja, jotka vaikuttavat lopputulokseen.

Meillä on esimerkiksi seuraava tietojoukko:

"Vova opetti tietojenkäsittelytiedettä - ei.
Vova sai tietojenkäsittelytieteestä 2.

Tietojenkäsittelytieteen arvosana riippuu vastauksesta kysymykseen: opiskeliko Vova tietojenkäsittelytiedettä? Onko selvä? Jatketaan, olemme jo lähempänä tavoitetta!

Perinteinen muuttuja riippumattomalle datalle on X. Riippuville tiedoille y.

Teemme seuraavat:

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

Mikä se on? Funktiolla iloc[:, 2: ] kerromme Pythonille: Haluan nähdä muuttujassa X tiedot alkaen toisesta sarakkeesta (mukaan lukien ja edellyttäen, että laskenta alkaa nollasta). Toisella rivillä sanomme, että haluamme nähdä ensimmäisen sarakkeen tiedot.

[ a:b, c:d ] on suluissa käyttämämme rakennus. Jos et määritä muuttujia, ne tallennetaan oletusarvoiksi. Eli voimme määrittää [:,: d] ja sitten saamme kaikki tietokehyksen sarakkeet, paitsi ne, jotka alkavat numerosta d eteenpäin. Muuttujat a ja b määrittelevät merkkijonot, mutta tarvitsemme ne kaikki, joten jätämme tämän oletusarvoksi.

Katsotaan mitä saamme:

X.head()

Ensimmäinen askeleesi tietotieteessä. Titanic

y.head()

Ensimmäinen askeleesi tietotieteessä. Titanic

Tämän pienen oppitunnin yksinkertaistamiseksi poistamme sarakkeet, jotka vaativat erityistä huolellisuutta tai eivät vaikuta selviytymiseen ollenkaan. Ne sisältävät tietoja, joiden tyyppi on str.

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

Super! Siirrytään seuraavaan vaiheeseen.

Kolmas vaihe

Tässä meidän on koodattava tietomme, jotta kone ymmärtää paremmin kuinka nämä tiedot vaikuttavat tulokseen. Mutta emme koodaa kaikkea, vaan vain str-dataa, jonka jätimme. Sarake "Seksi". Miten haluamme koodata? Esitetään tiedot henkilön sukupuolesta vektorina: 10 - mies, 01 - nainen.

Muunnetaan ensin taulukot NumPy-matriisiksi:

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

Ja nyt katsotaan:

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-kirjasto on niin hieno kirjasto, jonka avulla voimme tehdä täydellistä työtä Data Sciencessä. Se sisältää suuren määrän mielenkiintoisia koneoppimismalleja ja mahdollistaa myös tietojen valmistelun.

OneHotEncoderin avulla voimme koodata henkilön sukupuolen kyseisessä esityksessä kuvatulla tavalla. Luodaan 2 luokkaa: mies, nainen. Jos henkilö on mies, 1 kirjoitetaan "mies" -sarakkeeseen ja 0 "nainen" -sarakkeeseen.

OneHotEncoder():n jälkeen on [1] - tämä tarkoittaa, että haluamme koodata sarakkeen numero 1 (nollasta laskettuna).

Super. Mennään vielä pidemmälle!

Yleensä näin tapahtuu, että jotkut tiedot jätetään tyhjiksi (eli NaN - ei numero). Esimerkiksi henkilöstä on tietoja: hänen nimensä, sukupuolensa. Mutta hänen iästään ei ole tietoa. Tässä tapauksessa käytetään seuraavaa menetelmää: etsimme aritmeettisen keskiarvon kaikista sarakkeista ja jos sarakkeesta puuttuu tietoja, täytämme tyhjiön aritmeettisella keskiarvolla.

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

Otetaan nyt huomioon, että tilanteita sattuu, kun data on erittäin suuri. Jotkut tiedot ovat välillä [0:1], kun taas jotkut voivat ylittää satoja ja tuhansia. Sellaisen hajaantumisen poistamiseksi ja tietokoneen laskelmien tarkentamiseksi skannaamme tiedot ja skaalaamme sen. Kaikki luvut eivät saa ylittää kolmea. Käytämme tähän StandardScaler-toimintoa.

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

Nyt tietomme näyttävät tältä:

Ensimmäinen askeleesi tietotieteessä. Titanic

Luokka. Olemme jo lähellä tavoitettamme!

Vaihe neljä

Koulutetaan ensimmäinen mallimme! Sklearn-kirjastosta löydämme valtavan määrän mielenkiintoisia asioita. Käytin Gradient Boosting Classifier -mallia tähän ongelmaan. Käytämme A-luokitusta, koska tehtävämme on luokitustehtävä. Ennuste tulee antaa arvoon 1 (eloonjäänyt) tai 0 (ei selvinnyt).

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

Sovitusfunktio kertoo Pythonille: Anna mallin etsiä riippuvuuksia X:n ja y:n välillä.

Alle sekunti ja malli on valmis.

Ensimmäinen askeleesi tietotieteessä. Titanic

Kuinka soveltaa sitä? Katsotaan nyt!

Vaihe viisi. Johtopäätös

Nyt meidän on ladattava taulukko testitiedoillamme, joille meidän on tehtävä ennuste. Tällä taulukolla teemme kaikki samat toiminnot kuin X:lle.

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

Otetaan mallimme käyttöön nyt!

gbc_predict = gbc.predict(X_test)

Kaikki. Teimme ennusteen. Nyt se on tallennettava csv-muodossa ja lähetettävä sivustolle.

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

Valmis. Saimme tiedoston jokaista matkustajaa varten. Jäljelle jää vain ladata nämä ratkaisut verkkosivustolle ja saada arvio ennusteesta. Tällainen primitiivinen ratkaisu ei anna vain 74% oikeista vastauksista yleisölle, vaan myös jonkin verran sysäystä tietotieteeseen. Uteliaisimmat voivat kirjoittaa minulle yksityisviesteinä milloin tahansa ja kysyä. Kiitos kaikille!

Lähde: will.com

Lisää kommentti