# Import potrebných balíčkov
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler, OrdinalEncoder
from sklearn.impute import SimpleImputer
from sklearn.compose import make_column_transformer
from sklearn.pipeline import make_pipeline
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score
from sklearn.model_selection import train_test_split
# Uistíme sa, že máme všetky potrebné dáta
!mkdir -p data/titanic
!wget -nc -O data/titanic.zip https://www.dropbox.com/s/u8u7vcwy3sosbar/titanic.zip?dl=1
!unzip -oq -d data/titanic data/titanic.zip
Ako príklad na predspracovanie dát a tréning modelu pomocou pipelines z balíčka scikit-learn
si uvedieme klasifikáciu na dátovej množine Titanic, kde úlohou je predikovať, ktorí posažieri Titanicu haváriu prežili a ktorí nie.
Zobrazme si najprv opis dát zo súboru description.txt
:
with open("data/titanic/description", "r") as file:
print("".join(file.readlines()))
Z CSV súboru načítame dáta:
df = pd.read_csv("data/titanic/train.csv")
df.head()
df_train, df_test = train_test_split(df, test_size=0.25,
stratify=df["Survived"], random_state=4)
df_train.columns
Napíšte pomocou pipelines kód, ktorý rozdelí dátovú množinu na vstupné a výstupné dáta a vhodne predspracuje relevantné stĺpce.
df_train.dtypes
Nemusí to však stačiť na odlíšenie kategorických premenných od numerických.np.unique(df_train["NAZOV_STLPCA"])
# sem môžete doplniť, ktoré stĺpce sú kategorické,
# ktoré numerické a v ktorom stĺpci je požadovaný výstup
categorical_inputs = [ ]
numeric_inputs = [ ]
output = [ ]
# sem sa dá doplniť pipeline na predspracovanie
# dát z predchádzajúceho príkladu
Rozdelenie dát na vstupy a výstupy:
X_train = df_train[categorical_inputs + numeric_inputs]
Y_train = df_train[output]
X_test = df_test[categorical_inputs + numeric_inputs]
Y_test = df_test[output]
Napíšte kód, na predspracovaných dátach natrénuje model – buď typu DecisionTreeClassifier
alebo iného typu:
# sem sa dá doplniť kód na vytvorenie pipeline-u s modelom
# (DecisionTreeClassifier) a tréning pomocou metódy ``fit``
Natrénovaný model otestujte na testovacích dátach. Zobrazte maticu zámen (confusion matrix) a vypočítajte správnosť (accuracy):
Ako už vieme (alebo sa ešte dozvieme), v niektorých prípadoch (keď je nerovnomerné zastúpenie tried) nestačí vyhodnotiť správnosť – neposkytuje to informáciu o skutočnej úspešnosti predikcie. V našom prípade (dve triedy) sa síce všetky potrebné informácie dajú ľahko vyčítať aj z matice zámen, ale predsa len vyrátajme aj presnosť a úplnosť.
print("Precision = {}".format(precision_score(Y_test, y_test)))
print("Recall = {}".format(recall_score(Y_test, y_test)))