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<Integer, TermostatLeaf> m_listOfLeaves = new HashMap<Integer, TermostatLeaf>();
 
	/**
	 * 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<Integer> P)
	{
		Test = test;
		m_category = category;
		m_P = new ArrayList<Integer>(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;
	}
}
pl/miw/miw08_rbs_ml/termostatnode.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0