Az első lépés az adattudományban. Óriási

Egy rövid bevezető szó

Úgy gondolom, hogy több dolgot is megtehetnénk, ha lépésről lépésre kapnánk utasításokat, amelyek megmondanák, mit és hogyan tegyünk. Jómagam emlékszem olyan pillanatokra az életemből, amikor nem tudtam elkezdeni valamit, mert egyszerűen nehéz volt megérteni, hol kezdjem. Talán egyszer az interneten megláttad az „Adattudomány” szavakat, és úgy döntöttél, hogy távol vagy ettől, és az emberek, akik ezt teszik, valahol odakint, egy másik világban vannak. Nem, itt vannak. És talán az e területen dolgozó embereknek köszönhetően megjelent egy cikk a hírfolyamodban. Rengeteg tanfolyam van, ami segít megszokni ezt a mesterséget, de itt segítek megtenni az első lépést.

Nos, készen állsz? Hadd mondjam el azonnal, hogy ismernie kell a Python 3-at, mivel itt ezt fogom használni. Azt is tanácsolom, hogy előre telepítse a Jupyter Notebookra, vagy nézze meg a google colab használatát.

Шаг первый

Az első lépés az adattudományban. Óriási

Kaggle az Ön jelentős asszisztense ebben a kérdésben. Elvileg meg lehet csinálni anélkül is, de erről egy másik cikkben fogok beszélni. Ez egy olyan platform, amely Data Science versenyeknek ad otthont. Minden ilyen versenyen a korai szakaszban irreálisan sok tapasztalatot szerezhet a különféle problémák megoldásában, fejlesztési tapasztalatot és csapatban végzett munkatapasztalatot, ami korunkban fontos.

Innen fogjuk átvenni a feladatunkat. "Titanic"-nak hívják. A feltétel a következő: jósold meg, hogy minden egyes személy túléli-e. Általánosságban elmondható, hogy a DS-ben érintett személy feladata az adatok gyűjtése, feldolgozása, modell betanítása, előrejelzés stb. A kaggle-ben kihagyhatjuk az adatgyűjtési szakaszt – ezek a platformon jelennek meg. Le kell töltenünk őket, és már indulhatunk is!

Ezt a következőképpen teheti meg:

az Adatok lap adatokat tartalmazó fájlokat tartalmaz

Az első lépés az adattudományban. Óriási

Az első lépés az adattudományban. Óriási

Letöltöttük az adatokat, elkészítettük Jupyter notebookjainkat és...

Шаг второй

Hogyan töltsük fel most ezeket az adatokat?

Először is importáljuk a szükséges könyvtárakat:

import pandas as pd
import numpy as np

A Pandas lehetővé teszi számunkra, hogy .csv fájlokat töltsünk le további feldolgozás céljából.

A Numpy szükséges ahhoz, hogy az adattáblázatunkat számokkal rendelkező mátrixként ábrázoljuk.
Menj tovább. Vegyük a train.csv fájlt és töltsük fel nekünk:

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

Az adatkészlet-változón keresztül hivatkozunk a train.csv adatkiválasztásunkra. Lássuk, mi van ott:

dataset.head()

Az első lépés az adattudományban. Óriási

A head() függvény lehetővé teszi, hogy megnézzük az adatkeret első néhány sorát.

A Survived oszlopok pontosan a mi eredményeink, amelyek ebben az adatkeretben ismertek. A feladatkérdéshez meg kell jósolnunk a Túléltek oszlopot a test.csv adatokhoz. Ezek az adatok a Titanic többi utasáról tárolnak információkat, amelyeknek mi, a problémát megoldva, nem ismerjük az eredményt.

Tehát osszuk fel a táblázatunkat függő és független adatokra. Itt minden egyszerű. A függő adatok azok az adatok, amelyek az eredményekben szereplő független adatoktól függenek. A független adatok azok az adatok, amelyek befolyásolják az eredményt.

Például a következő adatkészlettel rendelkezünk:

„Vova informatikát tanított – nem.
Vova 2-est kapott számítástechnikából.”

Az informatika osztályzata a kérdésre adott választól függ: tanult-e Vova informatikát? Érthető? Menjünk tovább, már közelebb vagyunk a célhoz!

A független adatok hagyományos változója X. Függő adatok esetén y.

A következőket tesszük:

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

Ami? Az iloc[:, 2: ] függvénnyel azt mondjuk a Pythonnak: X változóban szeretném látni az adatokat a második oszloptól kezdve (beleértve, feltéve, hogy a számolás nulláról indul). A második sorban azt mondjuk, hogy az első oszlopban lévő adatokat szeretnénk látni.

Az [ a:b, c:d ] annak a felépítése, amit zárójelben használunk. Ha nem ad meg változókat, akkor a rendszer alapértelmezettként menti őket. Vagyis megadhatjuk a [:,: d] értéket, és ekkor megkapjuk az adatkeret összes oszlopát, kivéve azokat, amelyek a d számtól kezdődnek. Az a és b változók karakterláncokat határoznak meg, de mindegyikre szükségünk van, ezért ezt hagyjuk alapértelmezettként.

Lássuk, mit kaptunk:

X.head()

Az első lépés az adattudományban. Óriási

y.head()

Az első lépés az adattudományban. Óriási

Ennek a kis leckének az egyszerűsítése érdekében eltávolítjuk azokat az oszlopokat, amelyek különös gondot igényelnek, vagy egyáltalán nem befolyásolják a túlélést. Str típusú adatokat tartalmaznak.

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

Szuper! Térjünk át a következő lépésre.

A harmadik lépés

Itt kell kódolnunk az adatainkat, hogy a gép jobban megértse, hogyan befolyásolják ezek az adatok az eredményt. De nem mindent kódolunk, csak a meghagyott str adatokat. "Sex" oszlop. Hogyan akarunk kódolni? Ábrázoljunk egy személy nemére vonatkozó adatokat vektorként: 10 - férfi, 01 - nő.

Először alakítsuk át a táblázatainkat NumPy mátrixmá:

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

És most nézzük:

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

A sklearn könyvtár olyan nagyszerű könyvtár, amely lehetővé teszi számunkra, hogy teljes munkát végezzünk a Data Science területén. Számos érdekes gépi tanulási modellt tartalmaz, és lehetővé teszi az adatok előkészítését is.

A OneHotEncoder lehetővé teszi számunkra, hogy kódoljuk egy személy nemét az ábrázolásban, ahogy azt leírtuk. 2 osztály jön létre: férfi, nő. Ha a személy férfi, akkor a „férfi” oszlopba 1, a „nő” oszlopba 0 kerül.

A OneHotEncoder() után van [1] - ez azt jelenti, hogy az 1-es oszlopot akarjuk kódolni (nullától számolva).

Szuper. Lépjünk még tovább!

Általában ez úgy történik, hogy néhány adat üresen marad (vagyis NaN - nem szám). Például van információ egy személyről: neve, neme. De az életkoráról nincs információ. Ebben az esetben a következő módszert alkalmazzuk: minden oszlopon megkeressük a számtani átlagot, és ha az oszlopból hiányzik néhány adat, akkor az űrt kitöltjük a számtani átlaggal.

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

Most vegyük figyelembe, hogy előfordulnak olyan helyzetek, amikor az adatok nagyon nagyok. Egyes adatok a [0:1] intervallumban vannak, míg néhány száz és ezret túlléphet. Az ilyen szóródások kiküszöbölése és a számítógép számításainak pontosabbá tétele érdekében az adatokat szkenneljük és méretezzük. Az összes szám ne haladja meg a hármat. Ehhez a StandardScaler függvényt fogjuk használni.

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

Adataink most így néznek ki:

Az első lépés az adattudományban. Óriási

Osztály. Már közel járunk a célunkhoz!

Negyedik lépés

Tanítsuk meg első modellünket! A sklearn könyvtárból rengeteg érdekességet találhatunk. Erre a problémára a Gradient Boosting Classifier modellt alkalmaztam. Azért használunk A osztályozót, mert a feladatunk egy osztályozási feladat. A prognózist 1-hez (túlélte) vagy 0-hoz (nem élte túl) kell hozzárendelni.

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

Az illeszkedés függvény azt mondja a Pythonnak: Hagyja, hogy a modell keressen függőséget X és y között.

Kevesebb mint egy másodperc, és a modell készen áll.

Az első lépés az adattudományban. Óriási

Hogyan kell alkalmazni? most meglátjuk!

Ötödik lépés. Következtetés

Most be kell töltenünk egy táblázatot a tesztadatokkal, amelyre előrejelzést kell készítenünk. Ezzel a táblázattal ugyanazokat a műveleteket hajtjuk végre, mint az X esetében.

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

Alkalmazzuk most a modellünket!

gbc_predict = gbc.predict(X_test)

Minden. Előrejelzést készítettünk. Most csv-ben kell rögzíteni és elküldeni a webhelyre.

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

Kész. Kaptunk egy fájlt, amely minden utasra vonatkozóan előrejelzéseket tartalmaz. Nincs más hátra, mint feltölteni ezeket a megoldásokat a weboldalra, és megkapni az előrejelzés értékelését. Egy ilyen primitív megoldás nemcsak a helyes válaszok 74%-át adja a nyilvánosság számára, hanem némi lendületet is ad az adattudományban. A legkíváncsibbak bármikor írhatnak nekem privát üzenetben és kérdezhetnek. Köszönet mindenkinek!

Forrás: will.com

Hozzászólás