SI_Traktor/Justyna.md
2020-06-03 08:34:20 +02:00

2.5 KiB

Drzewa decyzyjne, algorytm ID3

autor Justyna Zarzycka

Opis projektu

Projekt implementuje tworzenie drzewa decyzyjnego wykorzystującego algorytm ID3, ktióre pomaga określić chęci do pracy agenta na podstawie warunków panujących na planszy.

Tworzenie drzewa decyzyjnego

funkcja budująca drzewo za pomocą algorymu ID3:

def ID3(data, original_data, features, target_attribute_name, parent_node_class=None):
        
        item_values = [info_gain(data, feature, target_attribute_name) for feature in
                       features]
        best_feature_index = np.argmax(item_values)
        best_feature = features[best_feature_index]
        tree = {best_feature: {}}
        features = [i for i in features if i != best_feature]
        for value in np.unique(data[best_feature]):

            sub_data = data.where(data[best_feature] == value).dropna()
            subtree = ID3(sub_data, data, features, target_attribute_name, parent_node_class)

            tree[best_feature][value] = subtree

        return (tree)

Drzewo budowane jest w oparciu o najlepsze możliwe podziały:

#obliczanie wartości przyrostu informacji
def info_gain(data, split_attribute_name, target_name):

    # Wartość entropii zbioru
    total_entropy = entropy(data[target_name])

    # Wyodrębnienie poszczególnych "podzbiorów"
    vals, counts = np.unique(data[split_attribute_name], return_counts=True)

    # Średnia ważona entropii każdego podzbioru
    weighted_entropy = np.sum(
        [(counts[i] / np.sum(counts)) * entropy(data.where(data[split_attribute_name] == vals[i]).dropna()[target_name])
         for i in range(len(vals))])

    # Przyrost informacji
    information_gain = total_entropy - weighted_entropy

    return information_gain

Entropia:

def entropy(target_col):
    values, counts = np.unique(target_col, return_counts=True)
    entropy = np.sum(
        [(-counts[i] / np.sum(counts)) * np.log2(counts[i] / np.sum(counts)) for i in range(len(values))])
    return entropy

Zestaw uczący

Zestaw budujący drzewo to lista zawierająca 20 przykładów waruków panujących na polu. Atrybyty zapisane są w formacie ['pogoda', 'ile_chwastow', 'ile_burakow', 'czy_chce_pracowac'].

    ['slonecznie', 'duzo', 'bardzo_malo', 'srednio'],
    ['deszcz', 'bardzo_duzo', 'malo', 'nie'],
    ['grad', 'bardzo_duzo', 'bardzo_malo', 'nie'],
    ['zachmurzenie', 'srednio', 'srednio', 'tak']

Implementacja w projekcie

Podprojet uruchamiany jest za pomocą klawisza F5.