//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(); }
//-------------------------------------------------------------------------------------- // 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); }
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(); }
public static double EvaluateRegressionProblem(this SVMProblem testset, double[] target, out double correlation_coef) { return(SVMHelper.EvaluateRegressionProblem(testset, target, out correlation_coef)); }
public static double EvaluateClassificationProblem(this SVMProblem testset, double[] target, int[] labels, out int[,] confusionMatrix) { return(SVMHelper.EvaluateClassificationProblem(testset, target, labels, out confusionMatrix)); }
public static double EvaluateClassificationProblem(this SVMProblem testset, double[] target) { return(SVMHelper.EvaluateClassificationProblem(testset, target)); }
//学習ファイルの作成 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(); }
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); } }
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; }