private void predictButton_Click(object sender, RoutedEventArgs e) { var inputs = new int[questionList.Count]; for (int i = 0; i < questionList.Count; i++) { inputs[i] = 3; if (questionList[i].A0) { inputs[i] = 0; } if (questionList[i].A1) { inputs[i] = 1; } if (questionList[i].A2) { inputs[i] = 2; } if (questionList[i].A3) { inputs[i] = 3; } if (questionList[i].A4) { inputs[i] = 4; } } var dnode = xtree.Items.GetItemAt(0) as DecisionTree.DNode; var dtree = new DecisionTree(); dtree.rootNode = dnode; var pred = dtree.Predict(inputs); predictResultLabel.Foreground = Brushes.White; if (pred == 0) { predictResultLabel.Content = "Class:{0}, Label:Yes"; predictResultLabel.Background = Brushes.Red; } else { predictResultLabel.Content = "Class:{1}, Label:No"; predictResultLabel.Background = Brushes.Green; } }
public List <DecisionTree> KFoldTest(int[][] X, int[] y, int K = 10, bool alert = false) { int KSampleSize = (int)Math.Ceiling(y.Length / (float)K); List <DecisionTree> testTrees = new List <DecisionTree>(); int correctPredicts = 0; int incorrectPredicts = 0; for (int i = 0; i < K; i++) { var X_validation = X.Skip(i * KSampleSize).Take(KSampleSize).ToArray(); var y_validation = y.Skip(i * KSampleSize).Take(KSampleSize).ToArray(); var x_remain = X.Skip((i + 1) * KSampleSize); var X_train = X.Take(i * KSampleSize).Concat(x_remain).ToArray(); var y_remain = y.Skip((i + 1) * KSampleSize); var y_train = y.Take(i * KSampleSize).Concat(y_remain).ToArray(); var testTree = new DecisionTree(); testTree.Train(X_train, y_train); testTrees.Add(testTree); for (int j = 0; j < y_validation.Length; j++) { if (testTree.Predict(X_validation[j]) == y_validation[j]) { correctPredicts++; } else { incorrectPredicts++; } } } var str = string.Format("Correct Predicts:{0} , IncorrectPredicts:{1} , avg acc:{2}, K-Num:{3}", correctPredicts, incorrectPredicts, correctPredicts / (float)(correctPredicts + incorrectPredicts), K); Console.WriteLine(str); if (alert) { MessageBox.Show(str, "Result"); } return(testTrees); }