Ejemplo n.º 1
0
        //Coin SVM按鈕事件
        private void button8_Click(object sender, EventArgs e)
        {
            StreamWriter Train_txt = new StreamWriter(@"train.txt");
            StreamWriter Test_txt  = new StreamWriter(@"test.txt");

            for (int i = 0; i < 2000; i++)
            {
                if (CoinTrainingSet[i, 0] == 1)
                {
                    Train_txt.WriteLine("1" + " 1:" + CoinTrainingSet[i, 1]);
                }
                else
                {
                    Train_txt.WriteLine("-1" + " 1:" + CoinTrainingSet[i, 1]);
                }
            }

            for (int i = 0; i < 20000; i++)
            {
                if (i < 10000)
                {
                    Test_txt.WriteLine("1" + " 1:" + RV_XY[i]);
                }
                else
                {
                    Test_txt.WriteLine("-1" + " 1:" + RV_XY[i]);
                }
            }

            Train_txt.Close();
            Test_txt.Close();

            SVMProblem problem     = SVMProblemHelper.Load(@"train.txt");
            SVMProblem testProblem = SVMProblemHelper.Load(@"test.txt");

            SVMParameter parameter = new SVMParameter();

            parameter.Type   = SVMType.C_SVC;
            parameter.Kernel = SVMKernelType.RBF;
            parameter.C      = 1;
            parameter.Gamma  = 0.0001;

            SVMModel model = SVM.Train(problem, parameter);

            double[] target = new double[testProblem.Length];
            for (int i = 0; i < testProblem.Length; i++)
            {
                target[i] = SVM.Predict(model, testProblem.X[i]);
            }

            double accuracy = SVMHelper.EvaluateClassificationProblem(testProblem, target);

            label6.Text = accuracy.ToString();
        }
Ejemplo n.º 2
0
        //--------------------------------------------------------------------------------------
        // private
        //---------------------------------------------------------------------------------------

        /// <summary>
        /// 辞書ファイルを作成する
        /// </summary>
        /// <param name="input_learing_file"></param>
        /// <param name="gammma"></param>
        /// <param name="cost"></param>
        private void Training(string input_learing_file, float gammma, float cost)
        {
            //LibSVMのテスト
            //学習用のデータの読み込み
            SVMProblem problem = SVMProblemHelper.Load(input_learing_file);

            //SVMパラメータ
            SVMParameter parameter = new SVMParameter();

            parameter.Type   = LibSVMsharp.SVMType.C_SVC;
            parameter.Kernel = LibSVMsharp.SVMKernelType.RBF;
            parameter.C      = cost;
            parameter.Gamma  = gammma;

            //svmModelが上手く作れていない?ラベルが付けられてない!!

            libSVM_model = SVM.Train(problem, parameter);
            //辞書ファイルを出力(xmlファイル)
            string xml_name = @"model_" + input_learing_file;

            xml_name = xml_name.Replace(@".csv", @".xml");
            SVM.SaveModel(libSVM_model, xml_name);

            //判定結果をファイルに出してみる
            SVMProblem testProblem = SVMProblemHelper.Load(input_learing_file);

            double[] target         = new double[testProblem.Length];
            string   debug_file_str = @"debug_" + input_learing_file;

            using (StreamWriter w = new StreamWriter(debug_file_str))
            {
                for (int i = 0; i < testProblem.Length; i++)
                {
                    target[i] = SVM.Predict(libSVM_model, testProblem.X[i]);
                    w.Write(target[i] + "\n");
                    Console.Out.WriteLine(@"{0} : {1}", i, target[i]);
                }
            }
            //正解率を出す。
            double accuracy = SVMHelper.EvaluateClassificationProblem(testProblem, target);
        }
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            SVMProblem problem = SVMProblemHelper.Load(@"Datasets\wine.txt");

            problem = SVMProblemHelper.Normalize(problem, SVMNormType.L2); // Optional

            SVMParameter parameter = new SVMParameter();

            parameter.Type   = SVMType.C_SVC;
            parameter.Kernel = SVMKernelType.RBF;
            parameter.C      = 1;
            parameter.Gamma  = 1;

            // Do 10-fold cross validation
            double[] target;
            SVM.CrossValidation(problem, parameter, 10, out target);

            double crossValidationAccuracy = SVMHelper.EvaluateClassificationProblem(problem, target);

            // Train the model
            SVMModel model = SVM.Train(problem, parameter);

            double correct = 0;

            for (int i = 0; i < problem.Length; i++)
            {
                double y = SVM.Predict(model, problem.X[i]);
                if (y == problem.Y[i])
                {
                    correct++;
                }
            }

            double trainingAccuracy = correct / (double)problem.Length;

            Console.WriteLine("\nCross validation accuracy: " + crossValidationAccuracy);
            Console.WriteLine("\nTraining accuracy: " + trainingAccuracy);

            Console.ReadLine();
        }
Ejemplo n.º 4
0
 public static double EvaluateRegressionProblem(this SVMProblem testset, double[] target, out double correlation_coef)
 {
     return(SVMHelper.EvaluateRegressionProblem(testset, target, out correlation_coef));
 }
Ejemplo n.º 5
0
 public static double EvaluateClassificationProblem(this SVMProblem testset, double[] target, int[] labels, out int[,] confusionMatrix)
 {
     return(SVMHelper.EvaluateClassificationProblem(testset, target, labels, out confusionMatrix));
 }
Ejemplo n.º 6
0
 public static double EvaluateClassificationProblem(this SVMProblem testset, double[] target)
 {
     return(SVMHelper.EvaluateClassificationProblem(testset, target));
 }
Ejemplo n.º 7
0
        //学習ファイルの作成
        public void TrainingExec(List <FaceFeature.FeatureValue> FeatureList)
        {
            //特徴量をMatに移し替える 2個で一つ
            //2個のfloat * LISTの大きさの配列
            double[] feature_array = new double[2 * FeatureList.Count];

            //特徴量をSVMで扱えるように配列に置き換える
            SetFeatureListToArray(FeatureList, ref feature_array);
            CvPoint2D32f[] feature_points = new CvPoint2D32f[feature_array.Length / 2];
            int            id             = 0;

            for (int i = 0; i < feature_array.Length / 2; i++)
            {
                feature_points[id].X = (float)feature_array[i * 2];
                feature_points[id].Y = (float)feature_array[i * 2 + 1];
                id++;
            }
            CvMat dataMat = new CvMat(feature_points.Length, 2, MatrixType.F32C1, feature_points, true);

            //これがラベル番号
            int[] id_array = new int[FeatureList.Count];
            for (int i = 0; i < id_array.Length; i++)
            {
                id_array[i] = FeatureList[i].ID;
            }
            CvMat resMat = new CvMat(id_array.Length, 1, MatrixType.S32C1, id_array, true);


            // dataとresponsesの様子を描画
            CvPoint2D32f[] points = new CvPoint2D32f[id_array.Length];
            int            idx    = 0;

            for (int i = 0; i < id_array.Length; i++)
            {
                points[idx].X = (float)feature_array[i * 2];
                points[idx].Y = (float)feature_array[i * 2 + 1];
                idx++;
            }

            //学習データを図にする
            Debug_DrawInputFeature(points, id_array);

            //デバッグ用 学習させる特徴量を出力する
            OutPut_FeatureAndID(points, id_array);

            //LibSVMのテスト
            //学習用のデータの読み込み
            SVMProblem problem     = SVMProblemHelper.Load(@"wine.txt");
            SVMProblem testProblem = SVMProblemHelper.Load(@"wine.txt");

            SVMParameter parameter = new SVMParameter();

            parameter.Type   = LibSVMsharp.SVMType.C_SVC;
            parameter.Kernel = LibSVMsharp.SVMKernelType.RBF;
            parameter.C      = 1;
            parameter.Gamma  = 1;

            SVMModel model = SVM.Train(problem, parameter);

            double[] target = new double[testProblem.Length];


            for (int i = 0; i < testProblem.Length; i++)
            {
                target[i] = SVM.Predict(model, testProblem.X[i]);
            }
            double accuracy = SVMHelper.EvaluateClassificationProblem(testProblem, target);


            //SVMの用意
            CvTermCriteria criteria = new CvTermCriteria(1000, 0.000001);
            CvSVMParams    param    = new CvSVMParams(
                OpenCvSharp.CPlusPlus.SVMType.CSvc,
                OpenCvSharp.CPlusPlus.SVMKernelType.Rbf,
                10.0,            // degree
                100.0,           // gamma        調整
                1.0,             // coeff0
                10.0,            // c               調整
                0.5,             // nu
                0.1,             // p
                null,
                criteria);

            //学習実行
            svm.Train(dataMat, resMat, null, null, param);

            Debug_DispPredict();
        }
Ejemplo n.º 8
0
        private void btnTrain_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Stopwatch time = new System.Diagnostics.Stopwatch();
            parameter = load_json_file(parameter_file);
            try
            {
                File.Create(parameter["path_model"] + textBox3.Text + ".txt").Dispose();
                File.Create(parameter["result_file"]).Dispose();
                if (textBox3.Text == "")
                {
                    MessageBox.Show("create model name");
                }
                //if(SHOWRESULT.ContainsKey(txtModelName.Text))
                //{
                //    MessageBox.Show("Model name already exits");
                //}
                else
                {
                    time.Start();
                    #region Creat file Model
                    // Creat param SVM
                    SVMProblem   FileTrain = SVMProblemHelper.Load(parameter["hog_train_file"]);
                    SVMParameter param     = new SVMParameter();
                    param.Type = SVMType.C_SVC;
                    if (parameter["kernel_svm"] == "RBF")
                    {
                        param.Kernel = SVMKernelType.RBF;
                    }
                    if (parameter["kernel_svm"] == "Linear")
                    {
                        param.Kernel = SVMKernelType.LINEAR;
                    }
                    if (parameter["kernel_svm"] == "Poly")
                    {
                        param.Kernel = SVMKernelType.POLY;
                    }
                    if (parameter["kernel_svm"] == "Sigmoid")
                    {
                        param.Kernel = SVMKernelType.SIGMOID;
                    }
                    // param.C = Convert.ToDouble(parameter["c"]);
                    param.C      = double.Parse(parameter["c"], CultureInfo.InvariantCulture);
                    param.P      = double.Parse(parameter["p"], CultureInfo.InvariantCulture);
                    param.Gamma  = double.Parse(parameter["gamma"], CultureInfo.InvariantCulture);
                    param.Degree = Convert.ToInt16(parameter["degree"]);
                    param.Nu     = double.Parse(parameter["nu"], CultureInfo.InvariantCulture);
                    param.Coef0  = double.Parse(parameter["coef0"], CultureInfo.InvariantCulture);
                    param.Eps    = double.Parse(parameter["eps"], CultureInfo.InvariantCulture);
                    //Train model
                    model = LibSVMsharp.SVM.Train(FileTrain, param);
                    LibSVMsharp.SVM.SaveModel(model, parameter["path_model"] + textBox3.Text + ".txt");

                    time.Stop();
                    double train_time = time.ElapsedMilliseconds;
                    #endregion

                    #region Validation data
                    SVMProblem   Validation        = SVMProblemHelper.Load(parameter["hog_val_file"]);
                    double[]     Target_validation = Validation.Predict(model);
                    StreamWriter sw = new StreamWriter(parameter["result_file"], true, Encoding.UTF8);
                    for (int i = 0; i < Target_validation.Length; i++)
                    {
                        string lines = Target_validation[i].ToString();
                        sw.WriteLine(lines);
                    }
                    sw.Close();
                    Accuracy = SVMHelper.EvaluateClassificationProblem(Validation, Target_validation);
                    Accuracy = Math.Round(Accuracy, 3);


                    // show result training
                    textBox4.Text = (train_time / 1000).ToString();
                    textBox5.Text = Accuracy.ToString();
                    MessageBox.Show("Trainning sucessful");

                    #endregion
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Ejemplo n.º 9
0
        private void btnSVM_Click(object sender, EventArgs e)
        {
            SVMProblem problem     = SVMProblemHelper.Load(@"train.txt");           //訓練樣本
            SVMProblem testProblem = SVMProblemHelper.Load(@"train.txt");           //測試樣本

            Image <Bgr, Byte> img = new Image <Bgr, Byte>(testProblem.Length, 128); //建立圖片

            img.SetValue(255);                                                      //設為全白
            double res = 0.0;
            //SVM的模板
            SVMParameter parameter = new SVMParameter();

            parameter.Type   = SVMType.C_SVC;
            parameter.Kernel = SVMKernelType.LINEAR;
            //SVM模型
            SVMModel model = SVM.Train(problem, parameter);

            double[] target = new double[testProblem.Length];
            //上色
            for (int i = img.Height - 1, k = 0; i > 0; --i)
            {
                for (int j = 0; j < img.Width; ++j)
                {
                    if (k >= testProblem.Length)
                    {
                        break;
                    }
                    //SVM預測
                    res       = SVM.Predict(model, testProblem.X[k]);
                    target[k] = res;
                    k++;

                    if (res == 1)
                    {
                        for (int count = 100; count > 0; count--)
                        {
                            img[i - count, j] = new Bgr(255, 0, 0);
                        }
                    }
                    else
                    if (res == 2)
                    {
                        for (int count = 100; count > 0; count--)
                        {
                            img[i - count, j] = new Bgr(0, 255, 0);
                        }
                    }
                    else
                    if (res == 3)
                    {
                        for (int count = 100; count > 0; count--)
                        {
                            img[i - count, j] = new Bgr(0, 0, 255);
                        }
                    }
                    else
                    if (res == 4)
                    {
                        for (int count = 100; count > 0; count--)
                        {
                            img[i - count, j] = new Bgr(0, 0, 0);
                        }
                    }
                    else
                    if (res == 0)
                    {
                        for (int count = 100; count > 0; count--)
                        {
                            img[i - count, j] = new Bgr(127, 127, 127);
                        }
                    }
                }
            }
            //輸出圖片
            ImageViewer output = new ImageViewer(img, "123");

            output.Show();
            //算出準確率
            double accuracy = SVMHelper.EvaluateClassificationProblem(testProblem, target);

            lblAccuracy.Text = "準確率: " + accuracy;
        }