W drugiej części laboratorium studentki i studenci zapoznają się z metodami tworzenia drzew decyzyjnych w środowisku scikit-learn
Przed rozpoczęciem ćwiczenia zapoznaj się z krótkim wprowadzeniem do Jupyter Notebook. Jeśli chcesz, możesz też zapoznać się z dłuższym wprowadzeniem.
1. Uruchom notatnik otwierając konsolę Anakondy i uruchamiając polecenie jupyter notebook
2. Zaimportuj potrzebne biblioteki i załaduj zbiór danych
from __future__ import print_function import os import subprocess import pandas as pd import numpy as np from sklearn.tree import DecisionTreeClassifier, export_graphviz fn = "https://raw.githubusercontent.com/pydata/pandas/master/pandas/tests/data/iris.csv" try: df = pd.read_csv(fn) except: exit("Błąd pobierania pliku iris.csv") df
3. Obejrzyj pobrane dane
print("* df.head()", df.head(), sep="\n", end="\n\n") print("* df.tail()", df.tail(), sep="\n", end="\n\n") print("* iris types:", df["Name"].unique(), sep="\n")
4. Dokonaj zakodowania zmiennej celu do postaci liczbowej
df2 = df.copy() targets = df2["Name"].unique() map_to_int = {name: n for n, name in enumerate(targets)} df2["Target"] = df2["Name"].replace(map_to_int) features = list(df2.columns[:4]) print("* df2.head()", df2[["Target", "Name"]].head(), sep="\n", end="\n\n") print("* df2.tail()", df2[["Target", "Name"]].tail(), sep="\n", end="\n\n") print("* targets", targets, sep="\n", end="\n\n") print("* features:", features, sep="\n")
5. Dopasuj model drzewa decyzyjnego do zbioru uczącego
y = df2["Target"] X = df2[features] dt = DecisionTreeClassifier(min_samples_split=20, random_state=99) dt.fit(X, y)
6. Dokonaj wizualizacji model
with open("dt.dot", 'w') as f: export_graphviz(dt, out_file=f, feature_names=features) command = ["dot", "-Tpng", "dt.dot", "-o", "dt.png"] try: subprocess.check_call(command) except: exit("Brak pakietu graphviz do wizualizacji modelu")
Powyższy przykład zawiera tylko najprostszy szkielet skryptu do uczenia drzew decyzyjnych. W trakcie laboratorium możecie połączyć się w zespoły max do 3 osób i rozbudować przykład o następujące punkty (każdy punkt jest wart 2 XP):
1. Atrybuty nie zostały poddane żadnemu przetwarzaniu wstępnemu. Dokonaj normalizacji atrybutów PetalLengh
i PetalWidth
korzystając z modułu sklearn.preprocessing
2. W chwili obecnej model jest uczony na całym zbiorze danych. Dokonaj podziału zbioru na zbiór uczący i testujący przy użyciu modułu sklearn.model_selection
3. Wyświetl macierz pomyłek oraz dokładność klasyfikatora. Posłuż się w tym celu modułem sklearn.metrics
4. Wyświetl ważność atrybutów wyliczoną przez model drzewa decyzyjnego
5. Zamień model drzewa decyzyjnego na model lasu losowego (dostępny w module sklearn.ensemble) i porównaj dokładność modelu RF z modelem DT.
Zapisz swój notatnik jako plik *.ipynb
i wyślij na adres mailto:Mikolaj.Morzy@put.poznan.pl
Zainteresowane osoby mogą pobrać notatnik z rozwiązaniami zadania samodzielnego i otworzyć notatnik na swoim lokalnym serwerze.