рдХрд╛рд░реНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рдордзреНрдпрд╡рд░реНрддреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХрд╛ рд╕рдВрдЧрдарди

рд╕рднреА рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рджрд┐рди рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реВрдБрдЧрд╛ред рдпрд╣ рд╕рдм рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖ рдХрд┐ рдПрдХ рдорд┐рддреНрд░ рдиреЗ рдореБрдЭреЗ рдХрд╛рдо рдкрд░ рдПрдХ рдЖрд╡реЗрджрди (WinForm in C #) рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬреЛ рдкреНрд░рдкрддреНрд░ рдкрд░ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЖрдБрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ CART рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдирд┐рд░реНрдгрдп рд╡реГрдХреНрд╖ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛ред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ рдЧрдгрдирд╛ рдорд╛рдкрджрдВрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ рдХреЛ 2 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣реИред рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрдВрдн рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛:

//     public static double[] GetAverageValue(DataTable table) { #region      var sr = new double[14]; for (int j = 1; j < table.Columns.Count - 1; j++) { double sum = 0.0; for (int i = 0; i < table.Rows.Count; i++) { sum = sum + Convert.ToDouble(table.Rows[i][j]); } sr[j - 1] = sum / table.Rows.Count; } #endregion return sr; } 


рдЧрдгрдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рдФрд░ рдЕрдВрддрд┐рдо рдХреЙрд▓рдо рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдкрд╣рд▓рд╛ рдореВрд▓реНрдп рд╡рд░реНрд╖ рд╣реИ, рдЕрдВрддрд┐рдо рдореВрд▓реНрдп 0 рдпрд╛ 1 рд╣реИ)ред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдФрд╕рдд рдорд╛рдиреЛрдВ рдХрд╛ рдПрдХ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреА рдкрд╣реБрдВрдЪ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реЛрдЧреАред
рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдЧрд┐рдиреНрдиреА рдЧреБрдгрд╛рдВрдХ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЦреЛрдЬ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдХреЙрд▓рдо рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдиреНрдпреВрдирддрдо рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдиреНрдпреВрдирддрдо рдЧреБрдгрд╛рдВрдХ рд╡рд╛рд▓реЗ рдХреЙрд▓рдо рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рддрдм рдпрд╣ рдХреЙрд▓рдо рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдХреЙрд▓рдо рдХреЗ рдФрд╕рдд рдорд╛рди рд╕реЗ рдЕрдзрд┐рдХ рд╕рднреА рдорд╛рдиреЛрдВ рдХреЛ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 1.1, рдФрд░ рд╕рднреА рдорд╛рди рддрд╛рд▓рд┐рдХрд╛ 1.2 рдореЗрдВ рдФрд╕рдд рд╕реЗ рдХрдо рд╣реИрдВред рдиреАрдЪреЗ рдХреЛрдб рд╣реИред рдЬреЛ рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдкрд╣рд▓реЗ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ:

 //         public static int[] GetMoreAverageAndLessAverage(double average, double[] columns, int[] T) { int moreAverage = 0; int valueTMoreAverage = 0; int valueTInvertMoreAverage = 0; int lessAverage = 0; int valueTLessAverage = 0; int valueTLessInvertAverage = 0; var moreAverageValue = new int[6]; for (int i = 0; i < columns.Length; i++ ) { if (columns[i] >= average) { moreAverage = moreAverage + 1; if (T[i] == 1) { valueTMoreAverage = valueTMoreAverage + 1; } else { valueTInvertMoreAverage = valueTInvertMoreAverage + 1; } } else { lessAverage = lessAverage + 1; if (T[i] == 1) { valueTLessAverage = valueTLessAverage + 1; } else { valueTLessInvertAverage = valueTLessInvertAverage + 1; } } } moreAverageValue[0] = moreAverage; moreAverageValue[1] = valueTMoreAverage; moreAverageValue[2] = valueTInvertMoreAverage; moreAverageValue[3] = lessAverage; moreAverageValue[4] = valueTLessAverage; moreAverageValue[5] = valueTLessInvertAverage; return moreAverageValue; } //   Gini(T,param) public static double GetValueGini(int[] currentCollumnsAndT, int lengthCollumns) { var gini = 0.0; if (currentCollumnsAndT != null) { double gini1 = (Convert.ToDouble(currentCollumnsAndT.GetValue(0)) / lengthCollumns) * (1 - ((Convert.ToDouble(currentCollumnsAndT.GetValue(1)) / Convert.ToDouble(currentCollumnsAndT.GetValue(0))) * (Convert.ToDouble(currentCollumnsAndT.GetValue(1)) / Convert.ToDouble(currentCollumnsAndT.GetValue(0)))) - ((Convert.ToDouble(currentCollumnsAndT.GetValue(2)) / Convert.ToDouble(currentCollumnsAndT.GetValue(0))) * (Convert.ToDouble(currentCollumnsAndT.GetValue(2)) / Convert.ToDouble(currentCollumnsAndT.GetValue(0))))); double gini2 = (Convert.ToDouble(currentCollumnsAndT.GetValue(3)) / lengthCollumns) * (1 - ((Convert.ToDouble(currentCollumnsAndT.GetValue(4)) / Convert.ToDouble(currentCollumnsAndT.GetValue(3))) * (Convert.ToDouble(currentCollumnsAndT.GetValue(4)) / Convert.ToDouble(currentCollumnsAndT.GetValue(3)))) - ((Convert.ToDouble(currentCollumnsAndT.GetValue(5)) / Convert.ToDouble(currentCollumnsAndT.GetValue(3))) * (Convert.ToDouble(currentCollumnsAndT.GetValue(5)) / Convert.ToDouble(currentCollumnsAndT.GetValue(3))))); gini = gini1 + gini2; } return gini; } //    public static double[] GetValueGiniIsPrimaryDivide(DataTable table) { var currentCollumn = new double[table.Rows.Count]; var average = GetAverageValue(table); //      ,    GetValueGiniIsPrimaryDivide ( ) var T = new int[table.Rows.Count]; var gini = new double[table.Columns.Count - 1]; for (int i = 0; i < table.Rows.Count; i++) { T[i] = Convert.ToInt16(table.Rows[i][table.Columns.Count - 1]); } for (int i = 1; i < table.Columns.Count - 1; i++) { for (int j = 0; j < table.Rows.Count; j++) { currentCollumn[j] = 0.0; currentCollumn[j] = Convert.ToDouble(table.Rows[j][i].ToString()); } var bufer = average[i - 1]; gini[i] = GetValueGini(GetMoreAverageAndLessAverage(bufer, currentCollumn, T), table.Rows.Count); } var min = Convert.ToDouble(gini.GetValue(0)); int indexMin = 0; for (int i = 0; i < gini.Length; i++) { if (Convert.ToDouble(gini.GetValue(i)) <= min) { min = Convert.ToDouble(gini.GetValue(i)); indexMin = i; } } var returnValue = new double[2]; returnValue[0] = min; returnValue[1] = indexMin; return returnValue; } } 


рддрд╛рд▓рд┐рдХрд╛, рдореБрдЭреЗ рдпрд╛рдж рд╣реИ, DataGridView рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рд╣реИред рдФрд░ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

 #region   DataGrid DataTable var table = new DataTable(); for (int j = 0; j < dataGridView1.Columns.Count; j++) { table.Columns.Add(dataGridView1.Columns[j].Name); } for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) { table.Rows.Add(); for (int j = 0; j < dataGridView1.Columns.Count; j++) { table.Rows[i][j] = dataGridView1[j, i].Value.ToString(); } } #endregion var giniIsMin = SeparationTable.GetValueGiniIsPrimaryDivide(table); 


рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдордзреНрдпрд╡рд░реНрддреА рддрд╛рд▓рд┐рдХрд╛ рд╕рднреА рд╕рдорд╛рди рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИред рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╡рд┐рднрд╛рдЬрди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рдХреЙрд▓рдо (T) рдореЗрдВ, рд╕рднреА рдорд╛рди 1 рдпрд╛ рд╕рднреА рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдВрдЧреЗ 0. рдкреНрд░рддреНрдпреЗрдХ рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░, рдПрдХ рд╕реНрддрдВрдн рдЧрдгрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ Gini рдЧреБрдгрд╛рдВрдХ рдиреНрдпреВрдирддрдо рдерд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдирд┐рд░реНрдгрдп рдкреЗрдбрд╝ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ, рдЕрдм рд╕рд╡рд╛рд▓ рдЦреБрдж: рдЖрдк рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдЯреЗрдмрд▓ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЦреЛрдирд╛ рдирд╣реАрдВ рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рддреАрди рдЖрдпрд╛рдореА рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╕реБрдЭрд╛рдпрд╛, 1, 11, 12, 111, 112 рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдкрджреЛрдВ рдкрд░ рд╕рднреА рдордзреНрдпрд╡рд░реНрддреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдмрд┐рдЫрд╛рдиреЗ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рд╕реНрдореГрддрд┐ рдореЗрдВ рдЗрд╕рдХреА "рд▓реЛрд▓реБрдкрддрд╛" рдХреЗ рдХрд╛рд░рдг рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред рдпрджрд┐ рдХреЛрдИ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╕рдордЭрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

Source: https://habr.com/ru/post/In177797/


All Articles