Sinu esimene samm andmeteaduses. Titanic

Lühike sissejuhatav sõna

Usun, et saaksime teha rohkem asju, kui meile antaks samm-sammult juhised, mis ütleksid meile, mida ja kuidas teha. Ma ise mäletan hetki oma elust, mil ma ei saanud millegagi alustada, sest oli lihtsalt raske aru saada, kust alustada. Võib-olla nägite kunagi Internetis sõnu "Andmeteadus" ja otsustasite, et olete sellest kaugel ja inimesed, kes seda teevad, olid kuskil seal teises maailmas. Ei, nad on siinsamas. Ja võib-olla ilmus teie voos tänu selle valdkonna inimestele artikkel. Seal on palju kursusi, mis aitavad teil selle käsitööga harjuda, kuid siin aitan teil teha esimese sammu.

Noh, kas olete valmis? Ütlen teile kohe, et peate Python 3 tundma, kuna seda ma siin kasutan. Samuti soovitan teil see eelnevalt Jupyteri sülearvutisse installida või vaadata, kuidas google colabi kasutada.

Step One

Sinu esimene samm andmeteaduses. Titanic

Kaggle on selles küsimuses teie oluline abiline. Põhimõtteliselt saate ilma selleta hakkama, kuid ma räägin sellest teises artiklis. See on platvorm, mis korraldab andmeteaduse võistlusi. Igal sellisel võistlusel saate algstaadiumis ebareaalsel hulgal kogemusi erinevat laadi probleemide lahendamisel, arenduskogemust ja meeskonnatöö kogemust, mis on meie ajal oluline.

Võtame sealt oma ülesande. Seda nimetatakse "Titanicuks". Tingimus on järgmine: ennustage, kas iga inimene jääb ellu. Üldiselt on DS-iga seotud inimese ülesanne andmete kogumine, töötlemine, mudeli koolitamine, prognoosimine jne. Kaggle'is on meil lubatud andmete kogumise etapp vahele jätta - need esitatakse platvormil. Peame need alla laadima ja saame alustada!

Seda saate teha järgmiselt.

vahekaart Andmed sisaldab andmeid sisaldavaid faile

Sinu esimene samm andmeteaduses. Titanic

Sinu esimene samm andmeteaduses. Titanic

Laadisime andmed alla, valmistasime ette oma Jupyteri märkmikud ja...

Teine etapp

Kuidas me nüüd neid andmeid laadime?

Esiteks impordime vajalikud teegid:

import pandas as pd
import numpy as np

Pandas lubab meil .csv-faile edasiseks töötlemiseks alla laadida.

Numpy on vajalik meie andmetabeli esitamiseks numbritega maatriksina.
Lase käia. Võtame faili train.csv ja laadime selle meile üles:

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

Viitame oma train.csv-andmete valikule andmestiku muutuja kaudu. Vaatame, mis seal on:

dataset.head()

Sinu esimene samm andmeteaduses. Titanic

Funktsioon head() võimaldab meil vaadata andmeraami esimesi ridu.

Ellujäänud veerud on täpselt meie tulemused, mis on selles andmeraamis teada. Ülesande küsimuse jaoks peame ennustama test.csv andmete veergu Ellujäänud. Need andmed salvestavad teavet teiste Titanicu reisijate kohta, mille tulemust me probleemi lahendamisel ei tea.

Niisiis, jagame oma tabeli sõltuvateks ja sõltumatuteks andmeteks. Siin on kõik lihtne. Sõltuvad andmed on need andmed, mis sõltuvad tulemustes sisalduvatest sõltumatutest andmetest. Sõltumatud andmed on need andmed, mis mõjutavad tulemust.

Näiteks on meil järgmine andmekogum:

"Vova õpetas arvutiteadust - ei.
Vova sai arvutiteaduses 2.

Arvutiteaduse hinne sõltub vastusest küsimusele: kas Vova õppis arvutiteadust? Kas on selge? Liigume edasi, oleme juba eesmärgile lähemal!

Sõltumatute andmete traditsiooniline muutuja on X. Sõltuvate andmete puhul y.

Teeme järgmist:

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

Mis see on? Funktsiooniga iloc[:, 2: ] ütleme Pythonile: Ma tahan näha muutujas X andmeid alates teisest veerust (kaasa arvatud ja eeldusel, et loendamine algab nullist). Teisel real ütleme, et tahame näha esimese veeru andmeid.

[ a:b, c:d ] on sulgudes kasutatava konstruktsioon. Kui te muutujaid ei määra, salvestatakse need vaikimisi. See tähendab, et saame määrata [:,: d] ja siis saame andmeraami kõik veerud, välja arvatud need, mis lähevad alates numbrist d. Muutujad a ja b määravad stringid, kuid me vajame neid kõiki, seega jätame selle vaikeväärtuseks.

Vaatame, mis meil on:

X.head()

Sinu esimene samm andmeteaduses. Titanic

y.head()

Sinu esimene samm andmeteaduses. Titanic

Selle väikese õppetunni lihtsustamiseks eemaldame veerud, mis nõuavad erilist hoolt või ei mõjuta üldse ellujäämist. Need sisaldavad str-tüüpi andmeid.

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

Super! Liigume edasi järgmise sammu juurde.

Kolmas samm

Siin peame oma andmed kodeerima, et masin saaks paremini aru, kuidas need andmed tulemust mõjutavad. Kuid me ei kodeeri kõike, vaid ainult str-andmeid, mille jätsime. Veerg "Seks". Kuidas me tahame kodeerida? Esitagem andmed inimese soo kohta vektorina: 10 - mees, 01 - naine.

Esmalt teisendame oma tabelid NumPy maatriksiks:

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

Ja nüüd vaatame:

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

Sklearni teek on nii lahe raamatukogu, mis võimaldab meil andmeteaduses täielikku tööd teha. See sisaldab suurt hulka huvitavaid masinõppemudeleid ja võimaldab meil ka andmeid ette valmistada.

OneHotEncoder võimaldab meil kodeerida selles esituses oleva isiku soo, nagu me kirjeldasime. Luuakse 2 klassi: meeste, naiste. Kui isik on mees, siis veergu “mees” kirjutatakse vastavalt 1 ja veergu “naine” vastavalt 0.

Pärast OneHotEncoder() on [1] – see tähendab, et tahame kodeerida veeru numbri 1 (loendades nullist).

Super. Liigume veelgi kaugemale!

Reeglina juhtub see nii, et mõned andmed jäetakse tühjaks (st NaN - mitte arv). Näiteks on info inimese kohta: tema nimi, sugu. Tema vanuse kohta aga andmed puuduvad. Sel juhul rakendame järgmist meetodit: leiame kõigi veergude aritmeetilise keskmise ja kui veerus on mõned andmed puudu, siis täidame tühimiku aritmeetilise keskmisega.

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

Nüüd võtame arvesse, et olukordi tuleb ette, kui andmed on väga suured. Mõned andmed on vahemikus [0:1], samas kui mõned võivad ületada sadu ja tuhandeid. Sellise hajuvuse kõrvaldamiseks ja arvuti arvutuste täpsemaks muutmiseks skaneerime andmed ja skaleerime need. Kõik arvud ei tohi ületada kolme. Selleks kasutame funktsiooni StandardScaler.

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

Nüüd näevad meie andmed välja sellised:

Sinu esimene samm andmeteaduses. Titanic

Klass. Oleme juba oma eesmärgile lähedal!

Neljas samm

Treenime oma esimest modelli! Sklearni raamatukogust leiame tohutult palju huvitavat. Rakendasin sellele probleemile Gradient Boosting Classifier mudelit. Me kasutame klassifikaatorit A, kuna meie ülesanne on klassifitseerimisülesanne. Prognoos tuleks määrata 1-le (ellu jäänud) või 0-le (ei jäänud ellu).

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

Sobivusfunktsioon ütleb Pythonile: laske mudelil otsida sõltuvusi X ja y vahel.

Vähem kui sekund ja mudel on valmis.

Sinu esimene samm andmeteaduses. Titanic

Kuidas seda rakendada? Vaatame nüüd!

Viies samm. Järeldus

Nüüd peame laadima tabeli oma testandmetega, mille kohta peame tegema prognoosi. Selle tabeliga teeme kõik samad toimingud, mida tegime X puhul.

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

Rakendame oma mudelit kohe!

gbc_predict = gbc.predict(X_test)

Kõik. Tegime prognoosi. Nüüd tuleb see CSV-vormingus salvestada ja saidile saata.

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

Valmis. Saime faili, mis sisaldab ennustusi iga reisija kohta. Jääb vaid need lahendused kodulehele üles laadida ja prognoosile hinnang saada. Selline primitiivne lahendus annab avalikkusele mitte ainult 74% õigetest vastustest, vaid annab andmeteaduses ka tõuke. Uudishimulikumad võivad mulle igal ajal privaatsõnumitesse kirjutada ja küsimuse esitada. Aitäh kõigile!

Allikas: www.habr.com

Lisa kommentaar