|
|
pl:miw:miw08_rbs_ml:termostatnode [2017/07/17 10:08] |
pl:miw:miw08_rbs_ml:termostatnode [2019/06/27 15:50] (aktualna) |
| <code=java> |
| 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; |
| } |
| } |
| |
| </code> |