package MachineLearning; import java.util.*; /** * Klasa reprezentująca węzeł drzewa decyzyjnego. Dziedziczy po liściu drzewa * @author Angello * */ public class TermostatNode extends TermostatLeaf { /** * Rodzaj testu wykonywanego w danym węźle */ public NominalTest Test; /** * Mapa zawierająca węzły lub liście do których prowadzi dany węzeł */ HashMap m_listOfLeaves = new HashMap(); /** * Konstruktor * @param test Test * @param category Kategoria większościowa * @param P Lista przykładów uczących */ public TermostatNode(NominalTest test, Integer category, ArrayList P) { Test = test; m_category = category; m_P = new ArrayList(P); } /** * Konstruktor domyślny */ public TermostatNode() { } /** * Dodaje liść lub węzeł do którego można przejść z danego węzła * @param r * @param node */ public void addNode(Integer r, TermostatLeaf node) { if (!m_listOfLeaves.containsKey(r)) m_listOfLeaves.put(r, node); } /** * Rekurencyjne przeszukuje drzewo żeby znaleźć kategorię podanego zestawu atrybutów */ public Integer getCategory(Object[] attributes) { Integer key = (Integer)attributes[Test.AttributeIndex]; // Wartość atrybutu który testujemy if (!Test.Results().contains(key)) // Jeśli R (rezultaty) nie zawiera wartości 'value' return this.category(); return m_listOfLeaves.get(key).getCategory(attributes); // Rekurencyjne wywołanie dla węzła który spełnia test } /** * Tworzy bardziej przejrzystą strukturę drzewa */ public ShowedNode showTree() { ShowedNode node = new ShowedNode(); node.P = new Integer[m_P.size()]; m_P.toArray(node.P); node.TestName = Test.AttributeName; for (Integer key : m_listOfLeaves.keySet()) { node.addNode(key, m_listOfLeaves.get(key).showTree()); } return node; } }