⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 svm 多类分类 输入多种色点
💻 CS
📖 第 1 页 / 共 2 页
字号:
            }
            else if(kind>1)
            {
                double[][] x=new double[kind][];
                double[][] y=new double[kind][];
                int[] c=new int[kind];
                Color[] COLOR = new Color[kind];
                Online[] obj = new Online[kind * (kind - 1) / 2];
                int i = 0;
                int j = 0;
                for(;i<5;i++)
                {
                    if (count[i] != 0)
                    {
                        x[j] = new double[count[i]];
                        y[j] = new double[count[i]];
                        for (int r = 0; r < count[i]; r++)
                        {
                            x[j][r] = point[i][r].X / 500.0;
                            y[j][r] = point[i][r].Y / 500.0;
                        }
                        c[j] = count[i];
                        j++;
                    }
                }
                for (i = 0,j = 0; i < 5; i++)
                {
                    if (count[i] != 0)
                    {
                        switch (i + 1)
                        {
                            case 1: COLOR[j] = Color.Pink; break;
                            case 2: COLOR[j] = Color.Green; break;
                            case 3: COLOR[j] = Color.SkyBlue; break;
                            case 4: COLOR[j] = Color.Peru; break;
                            case 5: COLOR[j] = Color.Plum; break;
                        }
                        j++;
                    }
                }
                int s = 0;
                for (i = 0; i < kind - 1; i++)
                {
                    for (j = i + 1; j < kind; j++)
                    {
                        double[][] instance = new double[c[i] + c[j]][];
                        for (int r = 0; r < c[i] + c[j]; r++)
                        {
                            instance[r] = new double[2];
                        }
                        int[] type = new int[c[i] + c[j]];
                        instance[0][0] = x[i][0]; instance[0][1] = y[i][0]; type[0] = 1;
                        instance[1][0] = x[j][0]; instance[1][1] = y[j][0]; type[1] = -1;
                        for (int r = 2; r - 1 < c[i]; r++)
                        {
                            instance[r][0] = x[i][r - 1]; instance[r][1] = y[i][r - 1]; type[r] = 1;
                        }
                        for (int r = c[i] + 1; r < c[i] + c[j]; r++)
                        {
                            instance[r][0] = x[j][r - c[i]]; instance[r][1] = y[j][r - c[i]]; type[r] = -1;
                        }
                        obj[s] = new Online(ker, 2, c[i] + c[j], instance, type, 100);
                        obj[s].run();
                        s++;
                    }
                }
                
                for (i = 0; i < 500; i+=2)
                {
                    for (j = 0; j < 500; j+=2)
                    {
                        int[] vote = new int[kind];
                        double[] X= new double[2];
                        X[0] = i / 500.0; X[1] = j / 500.0;
                        int w = kind - 1;
                        int t = kind;
                        for (int r = kind * (kind - 1) / 2 - 1; r >= 0; r--)
                        {
                            if (obj[r].getSign(X) > 0)
                            {
                                vote[w - 1]++;
                            }
                            else
                            {
                                vote[t - 1]++;
                            }
                            if (t - w == 1)
                            {
                                w--;
                                t = kind;
                            }
                            else
                            {
                                t--;
                            }
                        }
                        int max = 0;
                        int k = 0;
                        int q = 0;
                        for (q = 0; q < kind; q++)
                        {
                            if (max < vote[q])
                            {
                                max = vote[q];
                                k = q;
                            }
                        }
                        g.FillRectangle(new SolidBrush(COLOR[k]), i-1, j-1, 2, 2);
                        vg.FillRectangle(new SolidBrush(COLOR[k]), i - 1, j - 1, 2, 2);
                    }
                }
            }
            if (kind != 0)
            {
                for (int i = 0; i < 5; i++)
                {
                    for (int j = 0; j < count[i]; j++)
                    {
                        switch (i + 1)
                        {
                            case 1: pen = new SolidBrush(Color.Red); break;
                            case 2: pen = new SolidBrush(Color.GreenYellow); break;
                            case 3: pen = new SolidBrush(Color.Blue); break;
                            case 4: pen = new SolidBrush(Color.Yellow); break;
                            case 5: pen = new SolidBrush(Color.Purple); break;
                        }
                        g.FillRectangle(pen, point[i][j].X - 1, point[i][j].Y - 1, 2, 2);
                    }
                }
            }
            kind = 0;
        }

        private void clear_Click(object sender, EventArgs e)
        {
            point = new Point[5][];
            for (int i = 0; i < 5; i++)
                count[i] = 0;
            bmp.Dispose();
            bmp = new Bitmap(500, 500);
            Refresh();
        }

        private void kernal_SelectedIndexChanged(object sender, EventArgs e)
        {
            ker = kernal.SelectedIndex;
        }

        private void save_Click(object sender, EventArgs e)
        {
            this.savePoint.ShowDialog();
            try
            {
                StreamWriter file = new StreamWriter(savePoint.OpenFile());
                for (int i = 0; i < 5; i++)
                {
                    file.Write(count[i]);
                    for (int j = 0; j < count[i]; j++)
                    {
                        file.Write(" " + point[i][j].X + " " + point[i][j].Y);
                    }
                    file.WriteLine();
                }
                file.Close();
                file.Dispose();
            }
            catch (Exception b)
            {
                b.ToString();
            }
            savePoint.FileName = "";
        }

        private void open_Click(object sender, EventArgs e)
        {
            this.openPoint.ShowDialog();
            char c = ' ';
            char[] temp = new char[5];
            try
            {
                StreamReader file = new StreamReader(openPoint.OpenFile());
                for (int j = 0; j < 5; j++)
                {
                    c = (char)file.Read();
                    while (!file.EndOfStream && c != '\n')
                    {
                        int i = 0;
                        while (c != ' ' && c != '\n')
                        {
                            temp[i] = c;
                            i++;
                            c = (char)file.Read();
                        }
                        for (int t = i; t < 5; t++)
                            temp[t] = '\0';
                        count[j] = Convert.ToInt32(new String(temp));
                        if (count[j] != 0)
                        {
                            point[j] = new Point[count[j]];
                            c = (char)file.Read();
                        }
                        for (int r = 0; r < count[j]; r++)
                        {
                            i = 0;
                            while (c != ' ' && c != '\n')
                            {
                                temp[i] = c;
                                i++;
                                c = (char)file.Read();
                            }
                            for (int t = i; t < 5; t++)
                                temp[t] = '\0';
                            c = (char)file.Read();
                            point[j][r].X = Convert.ToInt32(new String(temp));
                            i = 0;
                            while (c != ' ' && c != '\n')
                            {
                                temp[i] = c;
                                i++;
                                c = (char)file.Read();
                            }
                            for (int t = i; t < 5; t++)
                                temp[t] = '\0';
                            if (c != '\n')
                                c = (char)file.Read();
                            point[j][r].Y = Convert.ToInt32(new String(temp));
                        }
                    }
                }
                file.Close();
                file.Dispose();
                Refresh();
            }
            catch (Exception b)
            {
                b.ToString();
            }
            openPoint.FileName = "";
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -