public void FindBetterParametr(EducationTable education_table,ref int index_of_parametr,ref string best_value_for_split, ref Parametr _param) { index_of_parametr = 0; best_value_for_split = ""; VeryfiedClassInfo[] leftClassInf = ClassInfoInit(); VeryfiedClassInfo[] rightClassInf = ClassInfoInit(); Parametr param; double giniValue = -100000; for(int index = 1; index < education_table.ParameterCount; index++) { param = sqlManager.GetOneParametrWithRequest("SELECT * FROM PARAM WHERE ID ='" + education_table.Rows.ElementAt(1)[index].ParametrID + "'"); education_table.BubbleSortByParam(index, param); if ((param.Type == TypeParametr.Real) || (param.Type == TypeParametr.Int)) { double average = 0; for (int prevRowInd = 1, nextRowInd = 2; nextRowInd < education_table.Rows.Count; prevRowInd++, nextRowInd++) { average = (Convert.ToDouble(education_table.Rows.ElementAt(prevRowInd)[index].Value, UsCulture) + Convert.ToDouble(education_table.Rows.ElementAt(nextRowInd)[index].Value, UsCulture)) / 2.0; for (int i = 0; i < education_table.Rows.Count; i++) { if (Convert.ToDouble(education_table.Rows.ElementAt(i)[index].Value, UsCulture) <= average) { foreach (VeryfiedClassInfo clinf in rightClassInf) { if (clinf.class_name == education_table.Rows.ElementAt(i)[0].Value) { clinf.number_of_checked++; } } } else { foreach (VeryfiedClassInfo clinf in leftClassInf) { if (clinf.class_name == education_table.Rows.ElementAt(i)[0].Value) { clinf.number_of_checked++; } } } } double newGiniValue = GiniSplitCalc(leftClassInf, rightClassInf); if (newGiniValue > giniValue) { giniValue = newGiniValue; index_of_parametr = index; best_value_for_split = average.ToString(UsCulture); _param = param; } for (int i = 0; i < leftClassInf.Length; i++) { leftClassInf[i].number_of_checked = 0; rightClassInf[i].number_of_checked = 0; } } } else { //param.Range int number_of_var = 0; for (int i = 0; i < param.Range.Length; i++) { if (param.Range[i] == '|') number_of_var++; } String[] variables = new String[number_of_var + 1]; for (int i = 0, j = 0; i < param.Range.Length; i++) { if (param.Range[i] == '|') { j++; continue; } if (param.Range[i] != ' ') variables[j]+= param.Range[i]; } for (int j = 0; j < number_of_var; j++) { for (int i = 0; i < education_table.Rows.Count; i++) { if (education_table.Rows.ElementAt(i)[index].Value == variables[j]) { foreach (VeryfiedClassInfo clinf in rightClassInf) { if (clinf.class_name == education_table.Rows.ElementAt(i)[0].Value) { clinf.number_of_checked++; } } } else { foreach (VeryfiedClassInfo clinf in leftClassInf) { if (clinf.class_name == education_table.Rows.ElementAt(i)[0].Value) { clinf.number_of_checked++; } } } } double newGiniValue = GiniSplitCalc(leftClassInf, rightClassInf); if (newGiniValue > giniValue) { giniValue = newGiniValue; index_of_parametr = index; best_value_for_split = variables[j]; _param = param; } for (int i = 0; i < leftClassInf.Length; i++) { leftClassInf[i].number_of_checked = 0; rightClassInf[i].number_of_checked = 0; } } } } }
public void FindBetterParametr(EducationTable education_table, ref int index_of_parametr, ref string best_value_for_split, ref Parametr _param) { index_of_parametr = 0; best_value_for_split = ""; VeryfiedClassInfo[] leftClassInf = ClassInfoInit(); VeryfiedClassInfo[] rightClassInf = ClassInfoInit(); Parametr param; double giniValue = -100000; for (int index = 1; index < education_table.ParameterCount; index++) { param = sqlManager.GetOneParametrWithRequest("SELECT * FROM PARAM WHERE ID ='" + education_table.Rows.ElementAt(1)[index].ParametrID + "'"); education_table.BubbleSortByParam(index, param); if ((param.Type == TypeParametr.Real) || (param.Type == TypeParametr.Int)) { double average = 0; for (int prevRowInd = 1, nextRowInd = 2; nextRowInd < education_table.Rows.Count; prevRowInd++, nextRowInd++) { average = (Convert.ToDouble(education_table.Rows.ElementAt(prevRowInd)[index].Value, UsCulture) + Convert.ToDouble(education_table.Rows.ElementAt(nextRowInd)[index].Value, UsCulture)) / 2.0; for (int i = 0; i < education_table.Rows.Count; i++) { if (Convert.ToDouble(education_table.Rows.ElementAt(i)[index].Value, UsCulture) <= average) { foreach (VeryfiedClassInfo clinf in rightClassInf) { if (clinf.class_name == education_table.Rows.ElementAt(i)[0].Value) { clinf.number_of_checked++; } } } else { foreach (VeryfiedClassInfo clinf in leftClassInf) { if (clinf.class_name == education_table.Rows.ElementAt(i)[0].Value) { clinf.number_of_checked++; } } } } double newGiniValue = GiniSplitCalc(leftClassInf, rightClassInf); if (newGiniValue > giniValue) { giniValue = newGiniValue; index_of_parametr = index; best_value_for_split = average.ToString(UsCulture); _param = param; } for (int i = 0; i < leftClassInf.Length; i++) { leftClassInf[i].number_of_checked = 0; rightClassInf[i].number_of_checked = 0; } } } else { //param.Range int number_of_var = 0; for (int i = 0; i < param.Range.Length; i++) { if (param.Range[i] == '|') { number_of_var++; } } String[] variables = new String[number_of_var + 1]; for (int i = 0, j = 0; i < param.Range.Length; i++) { if (param.Range[i] == '|') { j++; continue; } if (param.Range[i] != ' ') { variables[j] += param.Range[i]; } } for (int j = 0; j < number_of_var; j++) { for (int i = 0; i < education_table.Rows.Count; i++) { if (education_table.Rows.ElementAt(i)[index].Value == variables[j]) { foreach (VeryfiedClassInfo clinf in rightClassInf) { if (clinf.class_name == education_table.Rows.ElementAt(i)[0].Value) { clinf.number_of_checked++; } } } else { foreach (VeryfiedClassInfo clinf in leftClassInf) { if (clinf.class_name == education_table.Rows.ElementAt(i)[0].Value) { clinf.number_of_checked++; } } } } double newGiniValue = GiniSplitCalc(leftClassInf, rightClassInf); if (newGiniValue > giniValue) { giniValue = newGiniValue; index_of_parametr = index; best_value_for_split = variables[j]; _param = param; } for (int i = 0; i < leftClassInf.Length; i++) { leftClassInf[i].number_of_checked = 0; rightClassInf[i].number_of_checked = 0; } } } } }