public static void RunC45() { List <DDataRecord> records = LoadSample(); C45 <DDataRecord> algorithm = new C45 <DDataRecord>(); algorithm.UpdateContinuousAttributes(records, "temperature"); algorithm.UpdateContinuousAttributes(records, "humidity"); algorithm.Train(records); //algorithm.RulePostPrune(records); //post pruning using cross valiation set Console.WriteLine("C4.5 Tree Built!"); for (int i = 0; i < records.Count; i++) { DDataRecord rec = records[i]; Console.WriteLine("rec: "); string[] feature_names = rec.FindFeatures(); foreach (string feature_name in feature_names) { Console.WriteLine(feature_name + " = " + rec[feature_name]); } Console.WriteLine("Label: " + rec.Label); Console.WriteLine("Predicted Label: " + algorithm.Predict(records[i])); Console.WriteLine(); } }
public static void RunID3() { List <DDataRecord> X = LoadSample(); //As ID3 does not support continuous value, must do manually conversion foreach (DDataRecord rec in X) { int temperature = int.Parse(rec["temperature"]); int humidity = int.Parse(rec["humidity"]); if (temperature < 75) { rec["temperature"] = "< 75"; } else { rec["temperature"] = ">= 75"; } if (humidity < 80) { rec["humidity"] = "< 80"; } else { rec["humidity"] = ">= 80"; } } ID3 <DDataRecord> algorithm = new ID3 <DDataRecord>(); algorithm.Train(X); //algorithm.ErrorReducePrune(Xval); //error reduce prune using cross valiation set Console.WriteLine("ID3 Tree Built!"); for (int i = 0; i < X.Count; i++) { DDataRecord rec = X[i]; Console.WriteLine("rec: "); string[] feature_names = rec.FindFeatures(); foreach (string feature_name in feature_names) { Console.WriteLine(feature_name + " = " + rec[feature_name]); } Console.WriteLine("Label: " + rec.Label); Console.WriteLine("Predicted Label: " + algorithm.Predict(X[i])); Console.WriteLine(); } algorithm.WriteToXml("ID3.xml"); }