機械学習--決定木C 45アルゴリズム使用例

3557 ワード

テストデータ:
//############################### data table ##########################
// Outlook		Temp		Humidity		Windy		Play Golf
// Rainy		Hot		High			False		No
// Overoast		Hot		High			True		No
// Sunny		Mild		High			False		Yes
// Sunny		Cool		Normal			False		Yes
// Sunny		Cool		Normal			True		No
// Overoast		Cool		Normal			True		Yes
// Rainy		Mild		High			False		No
// Rainy		Cool		Normal			False		Yes
// Sunny		Mild		Normal			False		Yes
// Rainy		Mild		Normal			True		Yes
// Overoast		Mild		High			True		Yes
// Overoast		Hot		Normal			False		Yes
// Sunny		Mild		High			True		No
//######################################################################

サンプルコード(C#+accord framwork):
    
public enum Outlook
    {
        Rainy,
        Overoast,
        Sunny
    }


    public enum Temp
    {
        Hot,
        Mild,
        Cool
    }


    public enum Humidity
    {
        High,
        Normal
    }


    public enum Play_Golf
    {
        No,
        Yes
    }


    public static class C45Demo
    {
        public static void Execute()
        {


            string[] inputColumns =
            {
                "Outlook","Temp","Humidity","Windy"
            };


            string outputColumn = "Play_Golf";




            // Let's populate a data table with this information.
            // 
            DataTable table = new DataTable("Play");
            table.Columns.Add(inputColumns);
            table.Columns.Add(outputColumn);


            table.Rows.Add(Outlook.Rainy, Temp.Hot, Humidity.High, false, Play_Golf.No);
            table.Rows.Add(Outlook.Overoast, Temp.Hot, Humidity.High, true, Play_Golf.No);
            table.Rows.Add(Outlook.Sunny, Temp.Mild, Humidity.High, false, Play_Golf.Yes);


            table.Rows.Add(Outlook.Sunny, Temp.Cool, Humidity.Normal, false, Play_Golf.Yes);
            table.Rows.Add(Outlook.Sunny, Temp.Cool, Humidity.Normal, true, Play_Golf.No);
            table.Rows.Add(Outlook.Overoast, Temp.Cool, Humidity.Normal, true, Play_Golf.Yes);
            table.Rows.Add(Outlook.Rainy, Temp.Mild, Humidity.High, false, Play_Golf.No);
            table.Rows.Add(Outlook.Rainy, Temp.Cool, Humidity.Normal, false, Play_Golf.No);
            table.Rows.Add(Outlook.Sunny, Temp.Mild, Humidity.Normal, false, Play_Golf.No);
            table.Rows.Add(Outlook.Rainy, Temp.Mild, Humidity.Normal, true, Play_Golf.No);
            table.Rows.Add(Outlook.Overoast, Temp.Mild, Humidity.High, true, Play_Golf.No);
            table.Rows.Add(Outlook.Overoast, Temp.Hot, Humidity.Normal, false, Play_Golf.No);
            table.Rows.Add(Outlook.Sunny, Temp.Mild, Humidity.High, true, Play_Golf.No);


            Codification codebook = new Codification(table);


            DataTable symbols = codebook.Apply(table);
            double[][] inputs = symbols.ToArray(inputColumns);
            int[] outputs = symbols.ToArray<int>(outputColumn);


            var attributes = DecisionVariable.FromCodebook(codebook, inputColumns);
            int classCount = 2; // play or not play


            DecisionTree tree = new DecisionTree(attributes, classCount);


            C45Learning c45 = new C45Learning(tree);


            double error = c45.Run(inputs, outputs);


            int result = tree.Compute(inputs[4]);
            Console.WriteLine(result);


        }
    }


static void Main(string[] args)
{
      C45Demo.Execute();
      Console.ReadLine();
}