Jūsu pirmais solis datu zinātnē. Titāniks

ÄŖss ievadvārds

Es uzskatu, ka mēs varētu darÄ«t vairāk, ja mums sniegtu soli pa solim instrukcijas, kas mums pateiktu, kas un kā jādara. Es pats atceros savas dzÄ«ves brīžus, kad nevarēju kaut ko uzsākt, jo vienkārÅ”i bija grÅ«ti saprast, ar ko sākt. Iespējams, reiz internetā jÅ«s redzējāt vārdus ā€œDatu zinātneā€ un nolēmāt, ka esat tālu no tā, un cilvēki, kas to dara, atrodas kaut kur ārpusē, citā pasaulē. Nē, viņi ir tepat. Un, iespējams, pateicoties cilvēkiem no Ŕīs jomas, jÅ«su plÅ«smā parādÄ«jās raksts. Ir daudz kursu, kas palÄ«dzēs pierast pie Ŕī amata, taču Å”eit es jums palÄ«dzÄ“Å”u spert pirmo soli.

Nu, vai esat gatavs? Ä»aujiet man uzreiz pateikt, ka jums bÅ«s jāzina Python 3, jo tas ir tas, ko es Å”eit izmantoÅ”u. Es arÄ« iesaku to iepriekÅ” instalēt uz Jupyter Notebook vai redzēt, kā izmantot Google colab.

Step One

Jūsu pirmais solis datu zinātnē. Titāniks

Kaggle ir jÅ«su nozÄ«mÄ«gais palÄ«gs Å”ajā jautājumā. Principā jÅ«s varat iztikt bez tā, bet par to es runāŔu citā rakstā. Å Ä« ir platforma, kurā tiek rÄ«koti datu zinātnes konkursi. Katrā Ŕādā konkursā sākumposmā iegÅ«si nereāli lielu pieredzi dažāda veida problēmu risināŔanā, attÄ«stÄ«bas pieredzi un pieredzi darbā komandā, kas mÅ«su laikā ir svarÄ«gi.

Mēs veiksim savu uzdevumu no turienes. To sauc par "Titāniku". NosacÄ«jums ir Ŕāds: prognozējiet, vai katra atseviŔķa persona izdzÄ«vos. VispārÄ«gi runājot, DS iesaistÄ«tās personas uzdevums ir datu vākÅ”ana, apstrāde, modeļa apmācÄ«ba, prognozÄ“Å”ana utt. Kaggle mums ir atļauts izlaist datu vākÅ”anas posmu - tie tiek parādÄ«ti platformā. Mums tie ir jālejupielādē, un mēs varam sākt!

To var izdarīt Ŕādi:

cilnē Dati ir faili, kas satur datus

Jūsu pirmais solis datu zinātnē. Titāniks

Jūsu pirmais solis datu zinātnē. Titāniks

Mēs lejupielādējām datus, sagatavojām Jupyter piezīmju grāmatiņas un...

Otrais solis

Kā mēs tagad ielādēsim Å”os datus?

Vispirms importēsim nepiecieÅ”amās bibliotēkas:

import pandas as pd
import numpy as np

Pandas ļaus mums lejupielādēt .csv failus turpmākai apstrādei.

Numpy ir nepiecieÅ”ams, lai attēlotu mÅ«su datu tabulu kā matricu ar skaitļiem.
Uz priekÅ”u. Paņemsim failu train.csv un augÅ”upielādēsim to mums:

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

Mēs atsauksimies uz mūsu train.csv datu atlasi, izmantojot datu kopas mainīgo. Apskatīsim, kas tur ir:

dataset.head()

Jūsu pirmais solis datu zinātnē. Titāniks

Funkcija head() ļauj mums apskatīt dažas pirmās datu rāmja rindas.

IzdzÄ«votās kolonnas ir tieÅ”i mÅ«su rezultāti, kas ir zināmi Å”ajā datu rāmÄ«. Uzdevuma jautājumam mums ir jāparedz kolonna IzdzÄ«vojuÅ”ie test.csv datiem. Å ajos datos tiek glabāta informācija par citiem Titānika pasažieriem, kuriem mēs, risinot problēmu, nezinām iznākumu.

Tātad, sadalÄ«sim tabulu atkarÄ«gos un neatkarÄ«gos datos. Å eit viss ir vienkārÅ”i. AtkarÄ«gie dati ir tie dati, kas ir atkarÄ«gi no neatkarÄ«giem datiem, kas ir rezultātos. NeatkarÄ«gi dati ir tie dati, kas ietekmē rezultātu.

Piemēram, mums ir Ŕāda datu kopa:

ā€œVova mācÄ«ja datorzinātnes - nē.
Vova saņēma 2 datorzinātnēs.

Datorzinātņu atzīme ir atkarīga no atbildes uz jautājumu: vai Vova studēja datorzinātnes? Vai tas ir skaidrs? Ejam tālāk, esam jau tuvāk mērķim!

Tradicionālais mainīgais neatkarīgiem datiem ir X. Atkarīgajiem datiem y.

Mēs veicam Ŕādas darbÄ«bas:

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

Kas tas ir? Ar funkciju iloc[:, 2: ] mēs sakām Python: Es gribu redzēt mainÄ«gajā X datus, sākot no otrās kolonnas (ieskaitot un ar nosacÄ«jumu, ka skaitÄ«Å”ana sākas no nulles). Otrajā rindā mēs sakām, ka mēs vēlamies redzēt datus pirmajā kolonnā.

[ a:b, c:d ] ir iekavās lietojamā konstrukcija. Ja nenorādīsit nevienu mainīgo, tie tiks saglabāti kā noklusējuma. Tas ir, mēs varam norādīt [:,: d], un tad mēs iegūsim visas kolonnas datu ietvarā, izņemot tās, kas iet no numura d. Mainīgie a un b nosaka virknes, taču mums tās visas ir vajadzīgas, tāpēc mēs to atstājam kā noklusējuma vērtību.

Apskatīsim, ko esam ieguvuŔi:

X.head()

Jūsu pirmais solis datu zinātnē. Titāniks

y.head()

Jūsu pirmais solis datu zinātnē. Titāniks

Lai vienkārÅ”otu Å”o nelielo nodarbÄ«bu, mēs noņemsim kolonnas, kurām nepiecieÅ”ama Ä«paÅ”a piesardzÄ«ba vai kuras vispār neietekmē izdzÄ«voÅ”anu. Tie satur str. tipa datus.

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

Super! Pāriesim pie nākamās darbības.

TreŔais solis

Å eit mums ir jākodē savi dati, lai iekārta labāk saprastu, kā Å”ie dati ietekmē rezultātu. Bet mēs nekodēsim visu, bet tikai str datus, kurus atstājām. Kolonna "Sekss". Kā mēs vēlamies kodēt? Kā vektoru attēlosim datus par personas dzimumu: 10 - vÄ«rietis, 01 - sieviete.

Vispirms pārveidosim savas tabulas par NumPy matricu:

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

Un tagad paskatīsimies:

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 bibliotēka ir tik forÅ”a bibliotēka, kas ļauj mums veikt pilnÄ«gu darbu datu zinātnē. Tas satur lielu skaitu interesantu maŔīnmācÄ«Å”anās modeļu, kā arÄ« ļauj mums veikt datu sagatavoÅ”anu.

OneHotEncoder ļaus mums iekodēt personas dzimumu Å”ajā attēlojumā, kā mēs aprakstÄ«jām. Tiks izveidotas 2 klases: vÄ«rieÅ”u, sievieÅ”u. Ja persona ir vÄ«rietis, tad ailē "vÄ«rietis" tiks ierakstÄ«ts 1, bet ailē "sieviete" - 0.

Pēc OneHotEncoder() ir [1] - tas nozīmē, ka mēs vēlamies iekodēt kolonnas numuru 1 (skaitot no nulles).

Super. Ejam vēl tālāk!

Parasti tas notiek tā, ka daži dati tiek atstāti tukÅ”i (tas ir, NaN - nevis skaitlis). Piemēram, ir informācija par personu: viņa vārds, dzimums. Bet par viņa vecumu informācijas nav. Å ajā gadÄ«jumā mēs izmantosim Ŕādu metodi: mēs atradÄ«sim vidējo aritmētisko visās kolonnās un, ja kolonnā trÅ«kst dažu datu, aizpildÄ«sim tukÅ”umu ar vidējo aritmētisko.

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

Tagad ņemsim vērā, ka notiek situācijas, kad dati ir ļoti lieli. Daži dati ir intervālā [0:1], savukārt daži var pārsniegt simtus un tÅ«kstoÅ”us. Lai novērstu Ŕādu izkliedi un padarÄ«tu datoru precÄ«zākus aprēķinos, mēs skenēsim datus un mērogosim tos. Lai visi skaitļi nepārsniedz trÄ«s. Lai to izdarÄ«tu, mēs izmantosim funkciju StandardScaler.

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

Tagad mūsu dati izskatās Ŕādi:

Jūsu pirmais solis datu zinātnē. Titāniks

Klase. Esam jau tuvu mērķim!

Ceturtais solis

ApmācÄ«sim savu pirmo modeli! Sklearn bibliotēkā mēs varam atrast ļoti daudz interesantu lietu. Å ai problēmai es izmantoju Gradient Boosting Classifier modeli. Mēs izmantojam A klasifikatoru, jo mÅ«su uzdevums ir klasifikācijas uzdevums. Prognozei jāpieŔķir 1 (izdzÄ«voja) vai 0 (neizdzÄ«voja).

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

Fiksācijas funkcija norāda Python: Ļaujiet modelim meklēt atkarības starp X un y.

Mazāk nekā sekunde un modelis ir gatavs.

Jūsu pirmais solis datu zinātnē. Titāniks

Kā to pielietot? Tagad redzēsim!

Piektais solis. Secinājums

Tagad mums ir jāielādē tabula ar mÅ«su testa datiem, kuriem mums ir jāizveido prognoze. Izmantojot Å”o tabulu, mēs veiksim visas tās paÅ”as darbÄ«bas, kuras veicām ar 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:])

Pielietosim mūsu modeli tūlīt!

gbc_predict = gbc.predict(X_test)

Visi. Mēs izveidojām prognozi. Tagad tas jāieraksta csv formātā un jānosūta uz vietni.

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

Gatavs. Mēs saņēmām failu, kurā bija prognozes katram pasažierim. Atliek tikai augÅ”upielādēt Å”os risinājumus vietnē un iegÅ«t prognozes novērtējumu. Šāds primitÄ«vs risinājums sniedz ne tikai 74% pareizo atbilžu sabiedrÄ«bai, bet arÄ« zināmu impulsu datu zinātnē. ZiņkārÄ«gākie var man jebkurā laikā rakstÄ«t privātās ziņās un uzdot jautājumu. Paldies visiem!

Avots: www.habr.com

Pievieno komentāru