SI_Traktor/Justyna.md

78 lines
2.5 KiB
Markdown
Raw Normal View History

2020-06-03 08:34:20 +02:00
# 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:
```py
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:
```py
#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:
```py
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'].
```py
['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*.