Beispiel #1
0
        private void button4_Click_2(object sender, EventArgs e)
        {
            if (radioButton1.Checked)
            {
                dG_data.DataSource     = Db.get_all_orderd(cmbox_case.SelectedValue.ToString(), "cluster");
                dg_clusters.DataSource = Db.get_count_cluster(cmbox_case.SelectedValue.ToString());
                return;
            }
            lstBox_Notes.Items.Add("Normalizing Data using MIn-Max Scaling");

            List <Case> standardize_current_cases = mybestchoice.StandardizeData(mybestchoice.ArrayCases);

            mykp = new KmeansPlus();
            KmeansPlus.PointClusters        myclusters;
            List <KmeansPlus.PointClusters> Allmyclusters = new List <KmeansPlus.PointClusters>();
            // myclusters = mykp.GetKMeansPP(standardize_current_cases,int.Parse( Clusters_num));
            double min_fk = Double.MaxValue;
            int    min_i  = 0;

            for (int j = 0; j < 10; j++)
            {
                myclusters = new KmeansPlus.PointClusters();
                myclusters = mykp.GetKMeansPP_K(standardize_current_cases);
                Allmyclusters.Add(myclusters);
                if (myclusters.Fk < min_fk)
                {
                    min_i = j;
                }
            }
            myclusters = Allmyclusters[min_i];


            lstBox_Notes.Items.Add("Best Clusters Number = " + myclusters.PC.Count.ToString());


            // intialize db grids
            dG_data.Rows.Clear();
            dG_data.Columns.Clear();
            for (int j = 0; j < mybestchoice.Cases[0].GetFeatures().Count; j++)
            {
                Feature feature = (Feature)mybestchoice.Cases[0].GetFeatures()[j];
                dG_data.Columns.Add(feature.GetFeatureName().ToString(), feature.GetFeatureName().ToString());
            }
            dG_data.Rows.Add(mybestchoice.Cases.Count);


            int countcluster = myclusters.PC.Count;

            dg_clusters.Rows.Clear();
            dg_clusters.Columns.Clear();
            dg_clusters.Columns.Add("cluster", "cluster");
            dg_clusters.Columns.Add("count", "count");
            dg_clusters.Rows.Add(countcluster + 1);
            dg_clusters.Rows[0].Cells[0].Value = "عدد العناقيد الكلي";
            dg_clusters.Rows[0].Cells[1].Value = countcluster;
            int t = 1;
            int i = 0;

            foreach (List <Case> cluster in myclusters.PC.Values)
            {
                dg_clusters.Rows[t].Cells[0].Value = t.ToString();
                dg_clusters.Rows[t].Cells[1].Value = cluster.Count;
                foreach (Case c in cluster)
                {
                    Case realcase = mybestchoice.Cases.Find(
                        delegate(Case ca)
                    {
                        return(ca.GetFeature("id").GetFeatureValue() == c.GetFeature("id").GetFeatureValue());
                    }
                        );
                    realcase.GetFeature("cluster").SetFeatureValue(t);
                    c.GetFeature("cluster").SetFeatureValue(t);
                    for (int j = 0; j < c.GetFeatures().Count; j++)
                    {
                        Feature f = (Feature)realcase.GetFeatures()[j];
                        dG_data.Rows[i].Cells[j].Value = f.GetFeatureValue();
                    }
                    i++;
                } // end feautres
                t++;
            }     // end clusters

            dG_data.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

            mybestchoice.Clusters = myclusters;
        }
        private void button3_Click(object sender, EventArgs e)
        {
            var watch = System.Diagnostics.Stopwatch.StartNew();

            string Standrize_Type = "";

            if (rbtn_normalize.Checked)
            {
                Standrize_Type = "Q";
            }

            else if (rbtn_minmax.Checked)
            {
                Standrize_Type = "MN";
            }
            else
            {
                Standrize_Type = "none";
            }

            string Kmeans_Method = "";

            if (rbtn_kmeansPlus.Checked)
            {
                Kmeans_Method = "KPP";
            }

            else if (rbtn_simpleKmean.Checked)
            {
                Kmeans_Method = "K";
            }
            else
            {
                Kmeans_Method = "none";
            }

            string Clusters_num = txt_cluster.Text;


            mybestchoice = new BestChoice(ArrayCases, Standrize_Type, Kmeans_Method, Clusters_num);
            standardize_current_cases = mybestchoice.StandardizeData(ArrayCases);


            if (rbtn_simpleKmean.Checked)
            {
                // Kmeans kmeans = new Kmeans(int.Parse(txt_cluster.Text), standardize_current_cases);
                // kmeans.run();

                // Number of Attributes

                List <Cluster> AllClusters = new List <Cluster>();
                AllClusters.Add(null);
                Cluster myc    = new Cluster();
                int     Nd     = standardize_current_cases[0].GetFeatures().Count - 2;//except id , cluster
                Kmeans  kmeans = new Kmeans(1, standardize_current_cases);
                kmeans.run();
                myc.clusters = kmeans.clusters;
                foreach (double sk in kmeans.distances)
                {
                    myc.sk += sk;
                }
                myc.fk = 1;
                myc.k  = 1;
                AllClusters.Add(myc);
                for (int ik = 2; ik <= 5; ik++)//19
                {
                    myc    = new Cluster();
                    kmeans = new Kmeans(ik, standardize_current_cases);
                    kmeans.run();
                    myc.k        = ik;
                    myc.clusters = kmeans.clusters;
                    foreach (double sk in kmeans.distances)
                    {
                        myc.sk += sk;
                    }
                    if (AllClusters[ik - 1].sk == 0)
                    {
                        myc.fk = 1;
                    }
                    else
                    {
                        double ak = 1;
                        if (Nd > 1)
                        {
                            ak = Convert.ToDouble(kmeans.Ak(ik, Nd));
                        }
                        myc.fk = myc.sk / (ak * AllClusters[ik - 1].sk);
                    }
                    AllClusters.Add(myc);
                }


                double min = double.MaxValue;
                int    kk  = 0;
                for (int ik = 1; ik <= 19; ik++)
                {
                    if (AllClusters[ik].fk < min)
                    {
                        kk = AllClusters[ik].k; kmeans.clusters = AllClusters[ik].clusters; min = AllClusters[ik].fk;
                    }
                }
                watch.Stop();
                textBox1.Text    = min.ToString();
                txt_cluster.Text = kk.ToString();
                var elapsedMs = watch.ElapsedMilliseconds;
                label3.Text = "with clustring time  " + elapsedMs.ToString();
                int t = 0;
                int i = 0;
                dataGridView1.Rows.Clear();
                dataGridView1.Columns.Clear();
                for (int j = 0; j < ListCases[0].GetFeatures().Count; j++)
                {
                    Feature feature = (Feature)ListCases[0].GetFeatures()[j];
                    dataGridView1.Columns.Add(feature.GetFeatureName().ToString(), feature.GetFeatureName().ToString());
                }

                dataGridView2.Rows.Clear();
                dataGridView2.Columns.Clear();
                dataGridView1.Rows.Add(ArrayCases.Count);


                dataGridView2.Columns.Add("cluster", "cluster");
                dataGridView2.Columns.Add("count", "count");
                dataGridView2.Rows.Add(kmeans.clusters.Count);

                foreach (List <Case> list in kmeans.clusters) // for each cluster, define a new centroid
                {
                    kmeans.centroids[t].GetFeature("id").SetFeatureValue(t);
                    standardize_current_cases.Add(kmeans.centroids[t]);
                    dataGridView2.Rows[t].Cells[0].Value = t.ToString();
                    dataGridView2.Rows[t].Cells[1].Value = list.Count;
                    mybestchoice.Cost_Function          += kmeans.distances[t];
                    foreach (Case c in list) // Determine the poit on clusters
                    {
                        Case realcase = ListCases.Find(
                            delegate(Case ca)
                        {
                            return(ca.GetFeature("id").GetFeatureValue() == c.GetFeature("id").GetFeatureValue());
                        }
                            );
                        realcase.GetFeature("cluster").SetFeatureValue(t);
                        c.GetFeature("cluster").SetFeatureValue(t);
                        for (int j = 0; j < c.GetFeatures().Count; j++)
                        {
                            Feature f = (Feature)realcase.GetFeatures()[j];
                            dataGridView1.Rows[i].Cells[j].Value = f.GetFeatureValue();
                        }
                        i++;
                    }
                    t++;
                }
            }
            else if (rbtn_kmeansPlus.Checked)
            {
                KmeansPlus mykp = new KmeansPlus();
                KmeansPlus.PointClusters        myclusters;
                List <KmeansPlus.PointClusters> Allmyclusters = new List <KmeansPlus.PointClusters>();
                // myclusters = mykp.GetKMeansPP(standardize_current_cases,int.Parse( Clusters_num));
                double min_fk = Double.MaxValue;
                int    min_i  = 0;
                for (int j = 0; j < 100; j++)
                {
                    myclusters = new KmeansPlus.PointClusters();
                    myclusters = mykp.GetKMeansPP_K(standardize_current_cases);
                    Allmyclusters.Add(myclusters);
                    if (myclusters.Fk < min_fk)
                    {
                        min_i = j;
                    }
                }
                myclusters = Allmyclusters[min_i];
                // KmeansPlus mykp = new KmeansPlus();
                // KmeansPlus.PointClusters myclusters =new KmeansPlus.PointClusters();;
                //  myclusters = mykp.GetKMeansPP_K(standardize_current_cases);
                textBox1.Text    = myclusters.Fk.ToString();
                txt_cluster.Text = myclusters.PC.Count.ToString();
                watch.Stop();
                var elapsedMs = watch.ElapsedMilliseconds;
                label3.Text = "with clustring time  " + elapsedMs.ToString();

                foreach (Case centroid in myclusters.PC.Keys)
                {
                    standardize_current_cases.Add(centroid);
                }


                // intialize db grids

                int t            = 0;
                int i            = 0;
                int countcluster = myclusters.PC.Count;
                dataGridView1.Rows.Clear();
                dataGridView1.Columns.Clear();
                for (int j = 0; j < ListCases[0].GetFeatures().Count; j++)
                {
                    Feature feature = (Feature)ListCases[0].GetFeatures()[j];
                    dataGridView1.Columns.Add(feature.GetFeatureName().ToString(), feature.GetFeatureName().ToString());
                }

                dataGridView2.Rows.Clear();
                dataGridView2.Columns.Clear();
                dataGridView1.Rows.Add(ArrayCases.Count);


                dataGridView2.Columns.Add("cluster", "cluster");
                dataGridView2.Columns.Add("count", "count");
                dataGridView2.Rows.Add(countcluster);

                foreach (List <Case> cluster in myclusters.PC.Values)
                {
                    dataGridView2.Rows[t].Cells[0].Value = t.ToString();
                    dataGridView2.Rows[t].Cells[1].Value = cluster.Count;
                    foreach (Case c in cluster)
                    {
                        Case realcase = ListCases.Find(
                            delegate(Case ca)
                        {
                            return(ca.GetFeature("id").GetFeatureValue() == c.GetFeature("id").GetFeatureValue());
                        }
                            );
                        realcase.GetFeature("cluster").SetFeatureValue(t);
                        c.GetFeature("cluster").SetFeatureValue(t);
                        for (int j = 0; j < c.GetFeatures().Count; j++)
                        {
                            Feature f = (Feature)realcase.GetFeatures()[j];
                            dataGridView1.Rows[i].Cells[j].Value = f.GetFeatureValue();
                        }
                        i++;
                    } // end feautres
                    t++;
                }     // end clusters
            }         // end if
            else
            if (rbtn_nonekmeans.Checked)
            {
                dataGridView1.DataSource = Db.get_table_contetnt(mybestchoice.TableName);
            }

            // for sorting
            comboBox1.Items.Clear();
            for (int i = 0; i < dataGridView1.Columns.Count; i++)
            {
                comboBox1.Items.Add(dataGridView1.Columns[i].HeaderText);
            }
            comboBox1.Text = "id";


            dataGridView1.AutoSizeColumnsMode =
                DataGridViewAutoSizeColumnsMode.AllCells;
        }