Váš první krok v Data Science. Titánský

Krátké úvodní slovo

Věřím, že bychom mohli udělat více věcí, kdybychom dostali pokyny krok za krokem, které by nám řekly, co a jak dělat. Sám si pamatuji chvíle ve svém životě, kdy jsem nemohl něco začít, protože bylo prostě těžké pochopit, kde začít. Možná jste kdysi na internetu viděli slova „Data Science“ a rozhodli jste se, že jste od toho daleko a lidé, kteří to dělají, byli někde tam, v jiném světě. Ne, jsou přímo tady. A možná díky lidem z tohoto oboru se na vašem feedu objevil článek. Existuje spousta kurzů, které vám pomohou se s tímto řemeslem sžít, ale zde vám pomohu udělat první krok.

No, jste připraveni? Hned vám řeknu, že budete potřebovat znát Python 3, protože to je to, co zde budu používat. Také vám doporučuji, abyste si jej nainstalovali na Jupyter Notebook předem nebo se podívali, jak používat google colab.

Шаг первый

Váš první krok v Data Science. Titánský

Kaggle je v této věci váš významný pomocník. V zásadě se bez toho obejdete, ale o tom budu mluvit v jiném článku. Toto je platforma, která pořádá soutěže Data Science. V každé takové soutěži získáte v raných fázích neskutečné množství zkušeností s řešením problémů různého druhu, vývojové zkušenosti a zkušenosti s prací v týmu, což je v naší době důležité.

Odtud převezmeme svůj úkol. Jmenuje se "Titanic". Podmínka je tato: předpovědět, zda každý jednotlivec přežije. Obecně lze říci, že úkolem osoby zapojené do DS je shromažďovat data, zpracovávat je, trénovat model, prognózovat a podobně. V kaggle můžeme přeskočit fázi sběru dat – jsou prezentovány na platformě. Musíme si je stáhnout a můžeme začít!

Můžete to udělat následovně:

karta Data obsahuje soubory, které obsahují data

Váš první krok v Data Science. Titánský

Váš první krok v Data Science. Titánský

Stáhli jsme data, připravili naše notebooky Jupyter a...

Шаг второй

Jak nyní tato data načteme?

Nejprve importujme potřebné knihovny:

import pandas as pd
import numpy as np

Pandy nám umožní stáhnout soubory .csv pro další zpracování.

Numpy je potřeba k reprezentaci naší datové tabulky jako matice s čísly.
Pokračuj. Vezměme soubor train.csv a nahrajte ho k nám:

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

Budeme odkazovat na náš výběr dat train.csv prostřednictvím proměnné datové sady. Podívejme se, co tam je:

dataset.head()

Váš první krok v Data Science. Titánský

Funkce head() nám umožňuje podívat se na prvních několik řádků datového rámce.

Sloupce Survived jsou přesně naše výsledky, které jsou v tomto datovém rámci známé. U otázky úkolu potřebujeme předpovědět sloupec Survived pro data test.csv. V těchto datech jsou uloženy informace o dalších pasažérech Titaniku, u kterých my, řešící problém, neznáme výsledek.

Rozdělme tedy naši tabulku na závislá a nezávislá data. Všechno je zde jednoduché. Závislá data jsou data, která závisí na nezávislých datech, která jsou ve výsledcích. Nezávislá data jsou data, která ovlivňují výsledek.

Máme například následující soubor dat:

"Vova učil informatiku - ne.
Vova získala dvojku z informatiky."

Známka z informatiky závisí na odpovědi na otázku: studoval Vova informatiku? Je to jasné? Jdeme dál, už jsme blíž k cíli!

Tradiční proměnná pro nezávislá data je X. Pro závislá data je y.

Provádíme následující:

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

co to je? Pomocí funkce iloc[:, 2: ] říkáme Pythonu: Chci vidět v proměnné X data začínající od druhého sloupce (včetně a za předpokladu, že počítání začíná od nuly). Ve druhém řádku říkáme, že chceme vidět data v prvním sloupci.

[ a:b, c:d ] je konstrukce toho, co používáme v závorkách. Pokud nezadáte žádné proměnné, budou uloženy jako výchozí. To znamená, že můžeme zadat [:,: d] a pak získáme všechny sloupce v datovém rámci, kromě těch, které jdou od čísla d výše. Proměnné aab definují řetězce, ale potřebujeme je všechny, takže toto necháme jako výchozí.

Podívejme se, co máme:

X.head()

Váš první krok v Data Science. Titánský

y.head()

Váš první krok v Data Science. Titánský

Abychom tuto malou lekci zjednodušili, odstraníme sloupce, které vyžadují zvláštní péči nebo vůbec neovlivňují přežití. Obsahují data typu str.

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

Super! Přejděme k dalšímu kroku.

Třetí krok

Zde musíme naše data zakódovat, aby stroj lépe pochopil, jak tato data ovlivňují výsledek. Ale nebudeme kódovat vše, ale pouze str data, která jsme nechali. Sloupec "Sex". Jak chceme kódovat? Reprezentujme údaje o pohlaví člověka jako vektor: 10 - muž, 01 - žena.

Nejprve převedeme naše tabulky na matici NumPy:

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

A teď se podívejme:

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

Knihovna sklearn je tak skvělá knihovna, která nám umožňuje dělat kompletní práci v Data Science. Obsahuje velké množství zajímavých modelů strojového učení a umožňuje nám také přípravu dat.

OneHotEncoder nám umožní zakódovat pohlaví osoby v této reprezentaci, jak jsme popsali. Budou vytvořeny 2 třídy: muž, žena. Pokud je osobou muž, pak se do sloupce „muž“ zapíše 1 a do sloupce „žena“ 0.

Po OneHotEncoder() je [1] - to znamená, že chceme zakódovat sloupec číslo 1 (počítáno od nuly).

Super. Posuňme se ještě dále!

Zpravidla se stává, že některé údaje zůstanou prázdné (tedy NaN - nikoli číslo). Existují například informace o osobě: její jméno, pohlaví. O jeho věku ale nejsou žádné informace. V tomto případě použijeme následující metodu: najdeme aritmetický průměr přes všechny sloupce a pokud ve sloupci některá data chybí, vyplníme mezeru aritmetickým průměrem.

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

Vezměme nyní v úvahu situace, kdy jsou data velmi velká. Některá data jsou v intervalu [0:1], zatímco některá mohou přesahovat stovky a tisíce. Abychom tento rozptyl eliminovali a počítač zpřesnil ve výpočtech, naskenujeme data a upravíme jejich měřítko. Všechna čísla ať nepřesahují tři. K tomu nám poslouží funkce StandardScaler.

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

Nyní naše data vypadají takto:

Váš první krok v Data Science. Titánský

Třída. Už jsme blízko našeho cíle!

Krok čtyři

Pojďme trénovat náš první model! Z knihovny sklearn najdeme obrovské množství zajímavostí. Na tento problém jsem aplikoval model Gradient Boosting Classifier. Používáme klasifikátor A, protože náš úkol je klasifikační úkol. Prognóza by měla být přiřazena k 1 (přežil) nebo 0 (nepřežil).

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

Funkce fit říká Pythonu: Nechte model hledat závislosti mezi X a y.

Necelá sekunda a model je připraven.

Váš první krok v Data Science. Titánský

Jak to aplikovat? Teď uvidíme!

Krok pět. Závěr

Nyní musíme načíst tabulku s našimi testovacími daty, pro které musíme vytvořit předpověď. S touto tabulkou uděláme všechny stejné akce, které jsme udělali pro 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:])

Pojďme nyní použít náš model!

gbc_predict = gbc.predict(X_test)

Všechno. Udělali jsme předpověď. Nyní je potřeba zaznamenat ve formátu csv a odeslat na web.

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

Připraveno. Obdrželi jsme soubor obsahující předpovědi pro každého cestujícího. Zbývá pouze nahrát tato řešení na web a nechat si vyhodnotit předpověď. Takovéto primitivní řešení dává veřejnosti nejen 74 % správných odpovědí, ale také určitý impuls v Data Science. Ti největší zvědavci mi mohou kdykoliv napsat do soukromých zpráv a zeptat se. Děkuji všem!

Zdroj: www.habr.com

Přidat komentář