示例#1
0
        private void Form1_Load(object sender, EventArgs e)
        {
            stopwatch = new Stopwatch();
            data      = new LearningData(path1, classes1, atributes1);
            var used = new List <int>(data.GetCountOfRules());

            stopwatch.Start();
            finalTree = data.CART(null);
            stopwatch.Stop();
            Console.WriteLine("Time of building is " + stopwatch.Elapsed.Milliseconds);
            stopwatch.Reset();

            DisplayTree display_tree = new DisplayTree(finalTree, 0);

            stopwatch.Start();
            alfaOrigin = finalTree.FindAlfa(ref errorTreeForAlfa, ref CountOfLeafs, ref depth);
            stopwatch.Stop();
            Console.WriteLine("Time of cutting is " + stopwatch.Elapsed.Milliseconds);
            stopwatch.Reset();

            DisplayAlpha(alfaOrigin);
            display_tree.Graph(alfaOrigin, errorTreeForAlfa, CountOfLeafs);
            // нахождение бета

            stopwatch.Start();
            beta.Add(new Fraction(0));
            for (int i = 0; i < alfaOrigin.Count - 1; i++)
            {
                beta.Add(new Fraction(Math.Sqrt(alfaOrigin[i].Multiply(alfaOrigin[i + 1]).ToDouble())));
            }
            textBox1.SelectionStart = 0;

            //разбиение выбоки
            var test = data.MakePortionsOfIndexes(10);

            //проход по всем Gi
            for (int j = 0; j < test.Count; j++)
            {
                List <int> indexOfData = new List <int>();
                for (int i = 0; i < test.Count; i++)
                {
                    // составление списка без одной порции
                    if (i != j)
                    {
                        indexOfData.AddRange(test[i]);
                        if (indexOfData.Last() == 0)
                        {
                            indexOfData.RemoveAt(indexOfData.Count - 1);
                        }
                    }
                }
                //открытие веток и распределение выборки по дереву
                finalTree.OpenTreeAndFill(indexOfData);
                //ошибка классификации для заданного бета, и выборки
                var err = finalTree.FindErrForBeta(test[j], beta);
                if (errForBeta.Count == 0)
                {
                    errForBeta = err;
                }
                else
                {
                    for (int i = 0; i < errForBeta.Count; i++)
                    {
                        errForBeta[i] += err[i];
                    }
                }
            }
            //нахождение минимальной ошибки
            var minErr = errForBeta[0];

            minErrIndex = 0;
            for (int i = 1; i < errForBeta.Count; i++)
            {
                if (errForBeta[i] < minErr)
                {
                    minErr      = errForBeta[i];
                    minErrIndex = i;
                }
            }
            stopwatch.Stop();
            Console.WriteLine("Time of cross-validation is " + stopwatch.Elapsed.Milliseconds);
            stopwatch.Reset();

            textBox1.SelectionStart = 0;
        }
示例#2
0
 private void button1_Click(object sender, EventArgs e)
 {
     finalTree.CutForAlfa(alfaOrigin[Decimal.ToInt32(numericUpDown1.Value)]);
     DisplayTree display_tree = new DisplayTree(finalTree, Decimal.ToInt32(numericUpDown1.Value));
 }