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);
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var tag = int.Parse((KFolds.SelectedItem as ComboBoxItem).Tag.ToString());

            if (tag == 0)
            {
                treeComboBox.Items.Clear();

                var tree = new DecisionTree();
                tree.Train(X, y);

                trees = new List <DecisionTree>();
                trees.Add(tree);


                var item = new ComboBoxItem();
                item.Content = "0";
                item.Tag     = "0";

                treeComboBox.Items.Clear();
                treeComboBox.Items.Add(item);
                treeComboBox.SelectedIndex = 0;
            }
            else
            {
                int K = tag;

                trees = KFoldTest(X, y, K, true);
                treeComboBox.Items.Clear();

                for (int i = 0; i < K; i++)
                {
                    var item = new ComboBoxItem();
                    item.Content = i.ToString();
                    item.Tag     = i.ToString();
                    treeComboBox.Items.Add(item);
                }
                treeComboBox.SelectedIndex = 0;
            }
        }
        public MainWindow()
        {
            InitializeComponent();

            GetData("divorce.csv", out X, out y, out string[] Xlabel, out string[] ylabel);

            // veriseti randomizasyonu * kfold dan once
            var bytes = new byte[y.Length];

            new Random().NextBytes(bytes);
            var bytesC = (byte[])bytes.Clone();

            Array.Sort(bytes, X);
            Array.Sort(bytesC, y);

            KFoldTest(X, y, 20);
            KFoldTest(X, y, 10);
            KFoldTest(X, y, 5);
            KFoldTest(X, y, 3);
            KFoldTest(X, y, 2);


            tree = new DecisionTree();
            tree.Train(X, y);


            questionList = new List <Question>();
            for (int i = 0; i < Xlabel.Length; i++)
            {
                var q = new Question(i, Xlabel[i]);
                questionList.Add(q);
                xlist.Items.Add(q);
            }

            xtree.Items.Add(tree.rootNode);
        }