Via unua paŝo en Datuma Scienco. Titanic

Mallonga enkonduka vorto

Mi kredas, ke ni povus fari pli da aferoj, se ni ricevus paŝon post paŝo instrukciojn, kiuj dirus al ni kion fari kaj kiel fari ĝin. Mi mem memoras momentojn en mia vivo, kiam mi ne povis komenci ion ĉar simple estis malfacile kompreni kie komenci. Eble, iam en la Interreto vi vidis la vortojn "Datumoscienco" kaj decidis, ke vi estas malproksime de ĉi tio, kaj la homoj, kiuj faras tion, estis ie ekstere, en alia mondo. Ne, ili estas ĝuste ĉi tie. Kaj eble, danke al homoj de ĉi tiu kampo, artikolo aperis en via nutrado. Estas multaj kursoj, kiuj helpos vin alkutimiĝi al ĉi tiu metio, sed ĉi tie mi helpos vin fari la unuan paŝon.

Nu, ĉu vi pretas? Mi diru al vi tuj, ke vi bezonos koni Python 3, ĉar tion mi uzos ĉi tie. Mi ankaŭ konsilas al vi instali ĝin sur Jupyter Notebook anticipe aŭ vidi kiel uzi google colab.

Unua paŝo

Via unua paŝo en Datuma Scienco. Titanic

Kaggle estas via grava asistanto en ĉi tiu afero. Principe vi povas malhavi ĝin, sed pri tio mi parolos en alia artikolo. Ĉi tio estas platformo, kiu gastigas konkursojn pri Data Science. En ĉiu tia konkurso, en la fruaj stadioj vi akiros nerealan kvanton da sperto pri solvado de diversaj specoj de problemoj, disvolva sperto kaj sperto laboranta en teamo, kio estas grava en nia tempo.

Ni prenos nian taskon de tie. Ĝi nomiĝas "Titanic". La kondiĉo estas jena: antaŭdiri ĉu ĉiu individua persono pluvivos. Ĝenerale, la tasko de persono implikita en DS estas kolekti datumojn, prilabori ĝin, trejni modelon, prognozi ktp. En kaggle, ni rajtas salti la fazon de kolekto de datumoj - ili estas prezentitaj sur la platformo. Ni devas elŝuti ilin kaj ni povas komenci!

Vi povas fari ĉi tion jene:

la langeto Datumoj enhavas dosierojn, kiuj enhavas datumojn

Via unua paŝo en Datuma Scienco. Titanic

Via unua paŝo en Datuma Scienco. Titanic

Ni elŝutis la datumojn, preparis niajn Jupyter kajerojn kaj...

Dua paŝo

Kiel ni nun ŝarĝas ĉi tiujn datumojn?

Unue, ni importu la necesajn bibliotekojn:

import pandas as pd
import numpy as np

Pandoj permesos al ni elŝuti .csv dosierojn por plua prilaborado.

Numpy estas necesa por reprezenti nian datumtabelon kiel matrico kun nombroj.
Antaŭeniri. Ni prenu la dosieron train.csv kaj alŝutu ĝin al ni:

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

Ni raportos al nia elekto de datumoj train.csv per la variablo de datumaroj. Ni vidu kio estas tie:

dataset.head()

Via unua paŝo en Datuma Scienco. Titanic

La funkcio head() permesas al ni rigardi la unuajn vicojn de datumkadro.

La Survived-kolumnoj estas ĝuste niaj rezultoj, kiuj estas konataj en ĉi tiu datuma kadro. Por la taskodemando, ni devas antaŭdiri la Survived-kolumnon por test.csv-datumoj. Ĉi tiuj datumoj konservas informojn pri aliaj pasaĝeroj de la Titanic, por kiuj ni, solvante la problemon, ne scias la rezulton.

Do, ni dividu nian tabelon en dependajn kaj sendependajn datumojn. Ĉio estas simpla ĉi tie. Dependaj datumoj estas tiuj datumoj kiuj dependas de la sendependaj datumoj kiuj estas en la rezultoj. Sendependaj datumoj estas tiuj datumoj, kiuj influas la rezulton.

Ekzemple, ni havas la sekvan datuman aron:

“Vova instruis komputikon - ne.
Vova ricevis 2 en komputiko.”

La grado en komputiko dependas de la respondo al la demando: ĉu Vova studis komputikon? Ĉu estas klare? Ni pluiru, ni jam estas pli proksime al la celo!

La tradicia variablo por sendependaj datumoj estas X. Por dependaj datumoj, y.

Ni faras la jenon:

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

Kio ĝi estas? Per la funkcio iloc[:, 2: ] ni diras al Python: Mi volas vidi en variablo X la datumojn ekde la dua kolumno (inkluzive kaj kondiĉe ke kalkulado komenciĝu de nulo). En la dua linio ni diras, ke ni volas vidi la datumojn en la unua kolumno.

[ a:b, c:d ] estas la konstruo de tio, kion ni uzas en krampoj. Se vi ne specifas ajnajn variablojn, ili estos konservitaj kiel defaŭlte. Tio estas, ni povas specifi [:,: d] kaj tiam ni ricevos ĉiujn kolumnojn en la datumkadro, krom tiuj kiuj iras de numero d pluen. La variabloj a kaj b difinas ŝnurojn, sed ni bezonas ilin ĉiujn, do ni lasas ĉi tion kiel defaŭlta.

Ni vidu, kion ni ricevis:

X.head()

Via unua paŝo en Datuma Scienco. Titanic

y.head()

Via unua paŝo en Datuma Scienco. Titanic

Por simpligi ĉi tiun etan lecionon, ni forigos kolumnojn kiuj postulas specialan zorgon aŭ tute ne influas traviveblecon. Ili enhavas datumojn de tipo str.

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

Bonega! Ni transiru al la sekva paŝo.

Paŝo tri

Ĉi tie ni devas kodi niajn datumojn por ke la maŝino pli bone komprenu kiel ĉi tiuj datumoj influas la rezulton. Sed ni ne kodos ĉion, sed nur la str-datumojn, kiujn ni lasis. Kolumno "Sekso". Kiel ni volas kodi? Ni reprezentu datumojn pri la sekso de homo kiel vektoro: 10 - masklo, 01 - ino.

Unue, ni konvertu niajn tabelojn en NumPy-matricon:

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

Kaj nun ni rigardu:

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

La sklearn-biblioteko estas tiel bonega biblioteko, kiu permesas al ni fari kompletan laboron en Datuma Scienco. Ĝi enhavas grandan nombron da interesaj maŝinlernado-modeloj kaj ankaŭ permesas al ni fari datumpreparon.

OneHotEncoder permesos al ni kodi la sekson de persono en tiu reprezento, kiel ni priskribis. 2 klasoj estos kreitaj: vira, ina. Se la persono estas viro, tiam 1 estos skribita en la "vira" kolumno, kaj 0 en la "virina" kolumno, respektive.

Post OneHotEncoder() estas [1] - tio signifas, ke ni volas kodi kolumnon numeron 1 (kalkulante de nulo).

Super. Ni moviĝu eĉ plu!

Kiel regulo, ĉi tio okazas, ke iuj datumoj estas lasitaj malplenaj (tio estas, NaN - ne nombro). Ekzemple, estas informoj pri persono: lia nomo, sekso. Sed ne estas informo pri lia aĝo. En ĉi tiu kazo, ni aplikos la sekvan metodon: ni trovos la aritmetikan meznomon super ĉiuj kolumnoj kaj, se iuj datumoj mankas en la kolumno, tiam ni plenigos la malplenon per la aritmetika meznombro.

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

Nun ni konsideru, ke situacioj okazas kiam la datumoj estas tre grandaj. Iuj datumoj estas en la intervalo [0:1], dum iuj povas preterpasi centojn kaj milojn. Por forigi tian disvastigon kaj fari la komputilon pli preciza en ĝiaj kalkuloj, ni skanos la datumojn kaj skalos ĝin. Ĉiuj nombroj ne superu tri. Por fari tion, ni uzos la funkcion StandardScaler.

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

Nun niaj datumoj aspektas jene:

Via unua paŝo en Datuma Scienco. Titanic

Klaso. Ni jam estas proksimaj al nia celo!

Paŝo kvar

Ni trejnu nian unuan modelon! El la sklearn biblioteko ni povas trovi grandegan nombron da interesaj aferoj. Mi aplikis la modelon de Gradient Boosting Classifier al ĉi tiu problemo. Ni uzas klasigilon ĉar nia tasko estas klasifika tasko. La prognozo devus esti asignita al 1 (pluvivis) aŭ 0 (ne pluvivis).

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

La taŭga funkcio diras al Python: Lasu la modelon serĉi dependecojn inter X kaj y.

Malpli ol sekundo kaj la modelo estas preta.

Via unua paŝo en Datuma Scienco. Titanic

Kiel apliki ĝin? Ni vidos nun!

Paŝo kvin. Konkludo

Nun ni devas ŝargi tabelon kun niaj testaj datumoj, por kiuj ni devas fari prognozon. Kun ĉi tiu tabelo ni faros ĉiujn samajn agojn, kiujn ni faris por 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:])

Ni apliku nian modelon nun!

gbc_predict = gbc.predict(X_test)

Ĉiuj. Ni faris prognozon. Nun ĝi devas esti registrita en csv kaj sendita al la retejo.

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

Preta. Ni ricevis dosieron enhavantan antaŭdirojn por ĉiu pasaĝero. Restas nur alŝuti ĉi tiujn solvojn al la retejo kaj ricevi takson de la prognozo. Tia primitiva solvo donas ne nur 74% de ĝustaj respondoj al la publiko, sed ankaŭ iom da impulso en Datuma Scienco. La plej scivolemaj povas iam ajn skribi al mi per privataj mesaĝoj kaj fari demandon. Dankon al ĉiuj!

fonto: www.habr.com

Aldoni komenton