public LearningData(string path, string[] clss, string[] atrs) { if (Instance == null) { Instance = this; } instances = new List <Instance>(); atributes = atrs; classes = clss; rulesForData = new RulesForData(atrs); InitializeData(path); rulesForData.MakePotentialsRules(); }
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; }