public void TestERTreesLetterRecognition() { Matrix <float> data, response; ReadLetterRecognitionData(out data, out response); int trainingSampleCount = (int)(data.Rows * 0.8); Matrix <Byte> varType = new Matrix <byte>(data.Cols + 1, 1); varType.SetValue((byte)MlEnum.VarType.Numerical); //the data is numerical varType[data.Cols, 0] = (byte)MlEnum.VarType.Categorical; //the response is catagorical MCvRTParams param = new MCvRTParams(); param.maxDepth = 10; param.minSampleCount = 10; param.regressionAccuracy = 0.0f; param.useSurrogates = false; param.maxCategories = 15; param.priors = IntPtr.Zero; param.calcVarImportance = true; param.nactiveVars = 4; param.termCrit = new MCvTermCriteria(100, 0.01f); param.termCrit.Type = Emgu.CV.CvEnum.TermCritType.Iter; using (ERTrees forest = new ERTrees()) { bool success = forest.Train( data.GetRows(0, trainingSampleCount, 1), Emgu.CV.ML.MlEnum.DataLayoutType.RowSample, response.GetRows(0, trainingSampleCount, 1), null, null, varType, null, param); if (!success) { return; } #if !NETFX_CORE String fileName = Path.Combine(Path.GetTempPath(), "ERTree.xml"); forest.Save(fileName); if (File.Exists(fileName)) { File.Delete(fileName); } #endif double trainDataCorrectRatio = 0; double testDataCorrectRatio = 0; for (int i = 0; i < data.Rows; i++) { using (Matrix <float> sample = data.GetRow(i)) { double r = forest.Predict(sample, null); r = Math.Abs(r - response[i, 0]); if (r < 1.0e-5) { if (i < trainingSampleCount) { trainDataCorrectRatio++; } else { testDataCorrectRatio++; } } } } trainDataCorrectRatio /= trainingSampleCount; testDataCorrectRatio /= (data.Rows - trainingSampleCount); EmguAssert.WriteLine(String.Format("Prediction accuracy for training data :{0}%", trainDataCorrectRatio * 100)); EmguAssert.WriteLine(String.Format("Prediction accuracy for test data :{0}%", testDataCorrectRatio * 100)); } }
public void TestERTreesLetterRecognition() { Matrix<float> data, response; ReadLetterRecognitionData(out data, out response); int trainingSampleCount = (int)(data.Rows * 0.8); Matrix<Byte> varType = new Matrix<byte>(data.Cols + 1, 1); varType.SetValue((byte)MlEnum.VAR_TYPE.NUMERICAL); //the data is numerical varType[data.Cols, 0] = (byte)MlEnum.VAR_TYPE.CATEGORICAL; //the response is catagorical MCvRTParams param = new MCvRTParams(); param.maxDepth = 10; param.minSampleCount = 10; param.regressionAccuracy = 0.0f; param.useSurrogates = false; param.maxCategories = 15; param.priors = IntPtr.Zero; param.calcVarImportance = true; param.nactiveVars = 4; param.termCrit = new MCvTermCriteria(100, 0.01f); param.termCrit.type = Emgu.CV.CvEnum.TERMCRIT.CV_TERMCRIT_ITER; using (ERTrees forest = new ERTrees()) { bool success = forest.Train( data.GetRows(0, trainingSampleCount, 1), Emgu.CV.ML.MlEnum.DATA_LAYOUT_TYPE.ROW_SAMPLE, response.GetRows(0, trainingSampleCount, 1), null, null, varType, null, param); forest.Save("ERTree.xml"); if (!success) return; double trainDataCorrectRatio = 0; double testDataCorrectRatio = 0; for (int i = 0; i < data.Rows; i++) { using (Matrix<float> sample = data.GetRow(i)) { double r = forest.Predict(sample, null); r = Math.Abs(r - response[i, 0]); if (r < 1.0e-5) { if (i < trainingSampleCount) trainDataCorrectRatio++; else testDataCorrectRatio++; } } } trainDataCorrectRatio /= trainingSampleCount; testDataCorrectRatio /= (data.Rows - trainingSampleCount); Trace.WriteLine(String.Format("Prediction accuracy for training data :{0}%", trainDataCorrectRatio*100)); Trace.WriteLine(String.Format("Prediction accuracy for test data :{0}%", testDataCorrectRatio*100)); } }
public void TestERTreesLetterRecognition() { Matrix <float> data, response; ReadLetterRecognitionData(out data, out response); int trainingSampleCount = (int)(data.Rows * 0.8); Matrix <Byte> varType = new Matrix <byte>(data.Cols + 1, 1); varType.SetValue((byte)MlEnum.VAR_TYPE.NUMERICAL); //the data is numerical varType[data.Cols, 0] = (byte)MlEnum.VAR_TYPE.CATEGORICAL; //the response is catagorical MCvRTParams param = new MCvRTParams(); param.maxDepth = 10; param.minSampleCount = 10; param.regressionAccuracy = 0.0f; param.useSurrogates = false; param.maxCategories = 15; param.priors = IntPtr.Zero; param.calcVarImportance = true; param.nactiveVars = 4; param.termCrit = new MCvTermCriteria(100, 0.01f); param.termCrit.type = Emgu.CV.CvEnum.TERMCRIT.CV_TERMCRIT_ITER; using (ERTrees forest = new ERTrees()) { bool success = forest.Train( data.GetRows(0, trainingSampleCount, 1), Emgu.CV.ML.MlEnum.DATA_LAYOUT_TYPE.ROW_SAMPLE, response.GetRows(0, trainingSampleCount, 1), null, null, varType, null, param); forest.Save("ERTree.xml"); if (!success) { return; } double trainDataCorrectRatio = 0; double testDataCorrectRatio = 0; for (int i = 0; i < data.Rows; i++) { using (Matrix <float> sample = data.GetRow(i)) { double r = forest.Predict(sample, null); r = Math.Abs(r - response[i, 0]); if (r < 1.0e-5) { if (i < trainingSampleCount) { trainDataCorrectRatio++; } else { testDataCorrectRatio++; } } } } trainDataCorrectRatio /= trainingSampleCount; testDataCorrectRatio /= (data.Rows - trainingSampleCount); Trace.WriteLine(String.Format("Prediction accuracy for training data :{0}%", trainDataCorrectRatio * 100)); Trace.WriteLine(String.Format("Prediction accuracy for test data :{0}%", testDataCorrectRatio * 100)); } }