added DecisionTree and not working implementaion

This commit is contained in:
Lukas Karras
2024-10-24 17:56:19 +02:00
parent 2e2e627bf3
commit 3ff4a05d7f
3 changed files with 96 additions and 16 deletions

View File

@@ -0,0 +1,56 @@
from typing import Self
import csv
import ast
from classes.concept import Concept
from classes.feature_vector import FeatureVector
class DecisionTree:
def __init__(self, children: dict = {}, parent: Self = None, concept: Concept = Concept.UNKNOWN, depth: int = 0) -> None:
self.children: dict = children # (number, DecisionTree)
self.parent: Self = parent
self.concept: Concept = concept
self.depth: int = depth
# TODO
# IMPLEMENTATION IS NOT WORKING
def classify(self, feature_vector: FeatureVector) -> tuple[Concept, int]:
if len(self.children) == 0:
return self.concept, self.depth
feature_value = feature_vector.features_list[self.depth] # get feature value of vector based on current depth
try:
new_decision_tree: Self = self.children[feature_value] # get sub decition tree for feature
except KeyError:
return Concept.UNKNOWN, self.depth
return new_decision_tree.classify(feature_vector) # classify new desicion tree
def learn(self, training_set: list[FeatureVector]) -> None:
i = 0
while not self._finished(i, len(training_set)*2):
vector: FeatureVector = training_set[i % len(training_set)]
concept, depth = self.classify(vector)
print(f"concept is {vector.concept}, was classified as {concept} in depth: {depth}")
if concept == Concept.UNKNOWN:
self.concept = vector.concept
i+=1
elif concept == vector.concept:
i+=1
else:
self.concept = Concept.UNKNOWN
self.children.update({vector.features_list[depth]: DecisionTree(concept=vector.concept, parent=self, depth=depth+1, children={})})
def _finished(self, i: int, num_training_data: int):
# TODO implement proper finished condition
if i < num_training_data:
return False
return True