ÄŖ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
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
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()
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()
y.head()
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:
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.
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