ID3 Java Enum Tree

Ich versuche, einen nicht-binären Lernbaum zu erstellen, der eine vereinfachte Version des ID3-Algorithmus ist. Zu diesem Zweck habe ich versucht, Aufzählungen zu verwenden, da es mehrere Referenzen gibt, die Aufzählungshierarchien lehren, aber ich habe Probleme mit der Übertragung von Aufzählungen auf die Funktionen, die ich zum Erstellen des Baums benötige. Ich habe alles, was ich für den Baum brauche, so gut wie möglich eingerichtet, aber ich habe Probleme mit der Erstkonstruktion des Baums.

Zuerst habe ich sechs Aufzählungen gemacht, jede mit einer eigenen Datei, damit ich nicht überall "main.enumname" schreiben müsste. Diese ersten fünf Aufzählungen repräsentieren die Fahrzeugdiagnose.

<code>public enum fuelstats {notempty, empty}
public enum lightstatus {Dim, Normal}
public enum scents {normal, gas}
public enum soundstatus {Normal, Howl, Screech, Click}
public enum turn {no, yes}
</code>

Als nächstes machte ich zwei weitere Aufzählungen. Eine für die verschiedenen Diagnoseergebnisse und eine für die verschiedenen "Themen" der Autodiagnose.

<code>public enum problems {battery, starter, solenoid, outofgas, flooding}
public enum features {lightstatus, soundstatus, fuelstats, scents, turn, problems}
</code>

Ich habe dann fünf Datenbeispiele verschiedener Fahrzeugdiagnosen erstellt, um sie im Baum zu sortieren.

<code>Example example1 = new Example(lightstatus.Dim, soundstatus.Howl, turn.yes, fuelstats.notempty, scents.normal, problems.battery);
Example example2 = new Example(lightstatus.Normal, soundstatus.Screech, turn.no, fuelstats.notempty, scents.normal, problems.starter);
Example example3 = new Example(lightstatus.Normal, soundstatus.Click, turn.no, fuelstats.notempty, scents.normal, problems.solenoid);
Example example4 = new Example(lightstatus.Normal, soundstatus.Normal, turn.yes, fuelstats.empty, scents.normal, problems.outofgas);
Example example5 = new Example(lightstatus.Normal, soundstatus.Normal, turn.yes, fuelstats.notempty, scents.gas, problems.flooding);

//make an array list of Examples.
ArrayList<Example> Examples = new ArrayList<Example>();
Examples.add(example1);

Examples.add(example2);
Examples.add(example3);
Examples.add(example4);
Examples.add(example5);
</code>

Ich habe die verschiedenen Auto-Diagnosen, die als Features bezeichnet werden, in einer ArrayList abgelegt, um sie zu mischen, da sie zufällig zum Erstellen des Baums verwendet werden.

<code>//This ArrayList holds the Enums for shuffling purposes.
ArrayList<features> Features = new ArrayList<features>();

Features.add(features.soundstatus);
Features.add(features.lightstatus);
Features.add(features.turn);
Features.add(features.scents);
Features.add(features.fuelstats);

// Shuffle the elements in the list
Collections.shuffle(Features);

//The Features Array List is now a shuffled tree.
//We will do a single loop that will serve as our stack.

//First we take the top of the list and assign it to the root.
Tree id3 = new Tree(Features.get(0),Examples);
</code>

Aber wie schreibe ich einen Baum, der Folgendes ausführt: Nimmt eine Feature-Aufzählung auf, bei der das Thema der Wurzel mit der Aufzählung übereinstimmt, und all die verschiedenen Status der Aufzählung für die Kinder? Wenn beispielsweise der Klangstatus der Stamm ist, sollten vier untergeordnete Elemente "Normal", "Heulen", "Kreischen" und "Klicken" festgelegt werden. Auf diese Weise kann ich die Beispielsounds mit den Kindsounds abgleichen. Dies ist mein Knoten bisher.

<code>public class Node 
{

    ArrayList<Node> children;


    /* Constructor*/
    public Node(ArrayList<Node> ExampleList) 
    { 
        this.ExampleList = ExampleList;
        this.parent = parent;
        this.children = children; 
    }

    public ArrayList<Node> getChildren() 
    { 
        return children; 
    }

    public void addChild(Node n) 
    { 
        children.add(n);
    }

    private ArrayList<Node> children;

    Enum phrase;

    private boolean isUsed;

    Node parent;

    public void setUsed(boolean isUsed) 
    {
        this.isUsed = isUsed;
    }

    public boolean isUsed() 
    {
        return isUsed;
    }
    //This method states if the node is a leaf 
    public boolean isLeaf()
    {
        if (this.getChildren() == null)
        return true;

        else
        return false;
    }

}
</code>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage