public void Main(int measureType) { //Khởi tạo bộ trọng số ngẫu nhiên cho mô hình ANNModel.InitialWeight(); TSCFDCostFunction(); int loop = 1; bool bContinue = true; MeasureBUS measureBUS = new MeasureBUS(); while (bContinue) { for (int i = 0; i < NumPattern; i++) { ANNModel.OutInputLayer = ArrPattern[i]; ArrPredict[i] = ANNModel.FeedforwardTraining(); } switch (measureType) { case MSE: Error = measureBUS.MSE(ArrActual, ArrPredict); break; case NMSE: Error = measureBUS.NMSE(ArrActual, ArrPredict); break; case RMSE: Error = measureBUS.RMSE(ArrActual, ArrPredict); break; case SIGN: Error = measureBUS.Sign(ArrActual, ArrPredict); break; } bool bResult = CompareError_Accurancy(Error, ANNParameterBUS.Accuracy, measureType); if (bResult == true || loop >= ANNParameterBUS.MaxEpoch) { bContinue = false; ANNModel.SaveModelFile(); //ghi nhận độ lỗi và số vòng lặp của quá trình train ANNModel.SaveError_MaxLoop(Error, loop); } else { for (int i = 0; i < NumPattern; i++) { ANNModel.OutInputLayer = ArrPattern[i]; ANNModel.FeedforwardTraining(); ANNModel.ErrorBackpropagationTraining(ArrDesiredValue[i]); } } loop++; } }
private void btnTest_Click(object sender, EventArgs e) { if (tbxTestFilePath.Text == "" || tbxModelFilePath.Text == "") { MessageBox.Show("Error: You must fill all required inputs!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } #region Phần chung //Ma trận với dòng thứ 1 chứa các giá trị thực và dòng thứ 2 chứa các giá trị dự đoán. double[][] dblActual_Forecast = new double[2][]; dblActual_Forecast[0] = null; dblActual_Forecast[1] = null; int iPos = tbxTestFilePath.Text.LastIndexOf('\\'); string strFolderPath = tbxTestFilePath.Text.Remove(iPos+1); #endregion #region Phần riêng #region Dự đoán giá if (rdPricePrediction.Checked)//Dự đoán giá { iPos = tbxTestFilePath.Text.LastIndexOf('_'); string strMutualPath = tbxTestFilePath.Text.Remove(iPos + 1); string strPredictedFile = strMutualPath + "predict.txt"; #region SVR if (rdSVR.Checked)//Mô hình SVR { string[] strArgs = new string[3]; strArgs[0] = tbxTestFilePath.Text; strArgs[1] = tbxModelFilePath.Text; strArgs[2] = strPredictedFile; StreamReader reader = new StreamReader(tbxModelFilePath.Text); string strLine = reader.ReadLine(); if (strLine == "Multiple") //Bag Pattern Search { StreamWriter measure = new StreamWriter(strMutualPath + "SingleModelMeasure.txt"); strLine = reader.ReadLine(); //Số mô hình int iNumModel = Convert.ToInt32(strLine); double[][][] dblActual_ForecastSeries = new double[iNumModel][][]; for (int i = 0; i < iNumModel; i++) { dblActual_ForecastSeries[i] = new double[2][]; dblActual_ForecastSeries[i][0] = null; dblActual_ForecastSeries[i][1] = null; strLine = reader.ReadLine(); //Đường dẫn đến file model strArgs[1] = strLine; dblActual_ForecastSeries[i] = svm_predict.MainProcess(strArgs); MeasureBUS measureBUS = new MeasureBUS(); double dblMSE = measureBUS.MSE(dblActual_ForecastSeries[i][0], dblActual_ForecastSeries[i][1]); double dblNMSE = measureBUS.NMSE(dblActual_ForecastSeries[i][0], dblActual_ForecastSeries[i][1]); double dblDS = measureBUS.DS(dblActual_ForecastSeries[i][0], dblActual_ForecastSeries[i][1]); measure.WriteLine((i + 1).ToString() + " " + dblMSE.ToString() + " " + dblNMSE.ToString() + " " + dblDS.ToString()); } measure.Close(); //Để có kết quả sau cùng, ta sẽ lấy trung bình kết quả dự đoán của tất cả các mô hình lại int iCounter = dblActual_ForecastSeries[0][0].Count(); dblActual_Forecast[0] = new double[iCounter]; dblActual_Forecast[1] = new double[iCounter]; for (int i = 0; i < iCounter; i++) { //Giá thực dblActual_Forecast[0][i] = dblActual_ForecastSeries[0][0][i]; //Giá dự đoán dblActual_Forecast[1][i] = 0; for (int j = 0; j < iNumModel; j++) { dblActual_Forecast[1][i] += dblActual_ForecastSeries[j][1][i]; } dblActual_Forecast[1][i] /= iNumModel; } //Ghi kết quả cuối cùng ra file StreamWriter finalResult = new StreamWriter(strPredictedFile); for (int i = 0; i < iCounter; i++) { finalResult.WriteLine(dblActual_Forecast[0][i].ToString() + " " + dblActual_Forecast[1][i].ToString()); } finalResult.Close(); reader.Close(); } else { reader.Close(); dblActual_Forecast = svm_predict.MainProcess(strArgs); } } #endregion #region ANN else//Mô hình ANN { ANNModelBUS.AnnModelFile = tbxModelFilePath.Text; ANNParameterBUS.LoadParameter(); ANNPredictBUS annPredict = new ANNPredictBUS(); annPredict.LoadDataSet(tbxTestFilePath.Text); dblActual_Forecast = annPredict.MainProcess(); //dblActual_Forecast = annPredict.StepTrainingMethod(); annPredict.WritePredictPrice(strPredictedFile); } #endregion } #endregion #region Dự đoán xu hướng else//Dự đoán xu hướng { if (rdSVR.Checked)//Mô hình SVR { iPos = tbxTestFilePath.Text.LastIndexOf('_'); string strMutualPath = tbxTestFilePath.Text.Remove(iPos + 1); string strPredictedFile = strMutualPath + "predict.txt"; string[] strArgs = new string[3]; strArgs[0] = tbxTestFilePath.Text; strArgs[1] = tbxModelFilePath.Text; strArgs[2] = strPredictedFile; StreamReader reader = new StreamReader(tbxModelFilePath.Text); string strLine = reader.ReadLine(); if (strLine == "Multiple") //Bag Pattern Search { StreamWriter measure = new StreamWriter(strMutualPath + "SingleModelMeasure.txt"); strLine = reader.ReadLine(); //Số mô hình int iNumModel = Convert.ToInt32(strLine); double[][][] dblActual_ForecastSeries = new double[iNumModel][][]; for (int i = 0; i < iNumModel; i++) { dblActual_ForecastSeries[i] = new double[2][]; dblActual_ForecastSeries[i][0] = null; dblActual_ForecastSeries[i][1] = null; strLine = reader.ReadLine(); //Đường dẫn đến file model strArgs[1] = strLine; dblActual_ForecastSeries[i] = svm_predict.MainProcess(strArgs); MeasureBUS measureBUS = new MeasureBUS(); double dblNMSE = measureBUS.NMSE(dblActual_ForecastSeries[i][0], dblActual_ForecastSeries[i][1]); measure.WriteLine((i + 1).ToString() + " " + dblNMSE.ToString()); } measure.Close(); //Để có kết quả sau cùng, ta sẽ lấy trung bình kết quả dự đoán của tất cả các mô hình lại int iCounter = dblActual_ForecastSeries[0][0].Count(); dblActual_Forecast[0] = new double[iCounter]; dblActual_Forecast[1] = new double[iCounter]; for (int i = 0; i < iCounter; i++) { //Giá thực dblActual_Forecast[0][i] = dblActual_ForecastSeries[0][0][i]; //Giá dự đoán dblActual_Forecast[1][i] = 0; for (int j = 0; j < iNumModel; j++) { dblActual_Forecast[1][i] += dblActual_ForecastSeries[j][1][i]; } dblActual_Forecast[1][i] /= iNumModel; } //Ghi kết quả cuối cùng ra file StreamWriter finalResult = new StreamWriter(strPredictedFile); for (int i = 0; i < iCounter; i++) { finalResult.WriteLine(dblActual_Forecast[0][i].ToString() + " " + dblActual_Forecast[1][i].ToString()); } finalResult.Close(); reader.Close(); } else { reader.Close(); dblActual_Forecast = svm_predict.MainProcess(strArgs); } } else//Mô hình ANN { iPos = tbxTestFilePath.Text.LastIndexOf('_'); string strPredictedFile = tbxTestFilePath.Text.Remove(iPos + 1) + "predict.txt"; ANNModelBUS.AnnModelFile = tbxModelFilePath.Text; ANNParameterBUS.LoadParameter(); ANNPredictBUS annPredict = new ANNPredictBUS(); annPredict.LoadDataSet(tbxTestFilePath.Text); dblActual_Forecast = annPredict.MainProcessTrend(); annPredict.WritePredictPrice(strPredictedFile); } } #endregion #endregion #region Phần chung HandleMeasure(strFolderPath+"PerformanceMeasure.txt", dblActual_Forecast[0], dblActual_Forecast[1]); MessageBox.Show("Finish!"); #endregion }
public void Main() { //Khởi tạo bộ trọng số ngẫu nhiên cho mô hình ANNModel.InitialWeight(); TSCFDCostFunction(); int loop = 1; bool bContinue = true; MeasureBUS measureBUS = new MeasureBUS(); while (bContinue) { for (int i = 0; i < NumPattern; i++) { ANNModel.OutInputLayer = ArrPattern[i]; ArrPredict[i] = ANNModel.FeedforwardTraining(); } Error = measureBUS.NMSE(ArrActual, ArrPredict); if (Error <= 0.01 || loop >= ANNParameterBUS.MaxEpoch) { bContinue = false; ANNModel.SaveModelFile(); //ghi nhận độ lỗi và số vòng lặp của quá trình train ANNModel.SaveError_MaxLoop(Error, loop); } else { for (int i = 0; i < NumPattern; i++) { ANNModel.OutInputLayer = ArrPattern[i]; ANNModel.FeedforwardTraining(); ANNModel.ErrorBackpropagationTraining(ArrDesiredValue[i]); } } loop++; } }
private void HandleMeasure(string fileName, double []actual, double []forecast) { StreamWriter writer = new StreamWriter(fileName); MeasureBUS measureBUS = new MeasureBUS(); CheckedListBox.CheckedItemCollection checkedItems = clbMeasures.CheckedItems; for (int i = 0; i < checkedItems.Count; i++) { switch (checkedItems[i].ToString()) { case "MSE": double dblMSE = measureBUS.MSE(actual, forecast); writer.WriteLine("MSE " + dblMSE.ToString()); break; case "NMSE": double dblNMSE = measureBUS.NMSE(actual, forecast); writer.WriteLine("NMSE " + dblNMSE.ToString()); break; case "RMSE": double dblRMSE = measureBUS.RMSE(actual, forecast); writer.WriteLine("RMSE " + dblRMSE.ToString()); break; case "APE": double dblAPE = measureBUS.APE(actual, forecast); writer.WriteLine("APE " + dblAPE.ToString()); break; case "MAPE": double dblMAPE = measureBUS.MAPE(actual, forecast); writer.WriteLine("MAPE " + dblMAPE.ToString()); break; case "DS": double dblMeasure = measureBUS.DS(actual, forecast); writer.WriteLine("DS " + dblMeasure.ToString()); break; case "WDS": double dblWDS = measureBUS.WDS(actual, forecast); writer.WriteLine("WDS " + dblWDS.ToString()); break; case "Sign": double dblSign = measureBUS.Sign(actual, forecast); writer.WriteLine("Sign " + dblSign.ToString()); break; case "DM4Price": double[] dblResult = measureBUS.DirectionMeasure4Price(actual, forecast); writer.WriteLine("Direction measure for price:"); writer.WriteLine("\t+ Right: "+dblResult[0]+"%"); writer.WriteLine("\t+ Wrong: " + dblResult[1] + "%"); writer.WriteLine("\t+ Cannot measure: " + dblResult[2] + "%"); break; } } writer.Close(); }
private void WriteAccurancy2File(string fileName, double[] actual, double[] forecast) { StreamWriter writer; MeasureBUS measureBUS = new MeasureBUS(); double Result = measureBUS.CorrectPredictRate(actual, forecast); writer = new StreamWriter(fileName); writer.WriteLine("Correct Predicted:\t" + Result.ToString() + "%"); writer.Close(); _resultShow += "<font color = \"blue\">Accuracy = " + Result.ToString() + "%</font><br>"; }
private bool SubTestANN_DT(string strTrainFile) { string strModelFile = null; string strTestFile = null; int iPos = strTrainFile.LastIndexOf('_'); strModelFile = strTrainFile.Remove(iPos + 1) + "model.txt"; iPos = strTrainFile.LastIndexOf('.'); strTestFile = strTrainFile.Remove(iPos) + "_subtest.txt"; // Load model lên BackpropagationNetwork bpNetwork; Stream stream = File.Open(strModelFile, FileMode.Open); BinaryFormatter bformatter = new BinaryFormatter(); bpNetwork = (BackpropagationNetwork)bformatter.Deserialize(stream); stream.Close(); // Tạo tập mẫu để test TrainingSet testSet = new TrainingSet(strTestFile, bpNetwork.OutputLayer.NeuronCount); // Ma trận với dòng thứ 1 chứa các giá trị thực và dòng thứ 2 chứa các giá trị dự đoán. double[][] dblActual_Forecast = new double[2][]; dblActual_Forecast[0] = new double[testSet.TrainingSampleCount]; dblActual_Forecast[1] = new double[testSet.TrainingSampleCount]; // Thực hiện test for (int i = 0; i < testSet.TrainingSampleCount; i++) { TrainingSample testSample = testSet[i]; dblActual_Forecast[0][i] = ConverterBUS.Convert2Trend(testSample.OutputVector); double[] dblTemp = bpNetwork.Run(testSample.InputVector); dblActual_Forecast[1][i] = ConverterBUS.Convert2Trend(dblTemp); } MeasureBUS measureBus = new MeasureBUS(); double Result = measureBus.CorrectPredictRate((double[])dblActual_Forecast[0], (double[])dblActual_Forecast[1]); if (_accDTANNBefore < Result)// lưu lại model tốt nhất { _accDTANNBefore = Result; return true;// Giữa lại bộ tham số } return false; }
public double do_cross_validation(int measureType, int crossValidationType) { double dblResult = 0; MeasureBUS measureBUS = new MeasureBUS(); double[] dblActualValues = null; double[] dblForecastValues = null; if(crossValidationType == 2) //time series { int iNumElementsPerFold = prob.l / nr_fold; dblForecastValues = new double[prob.l - iNumElementsPerFold]; dblActualValues = new double[prob.l - iNumElementsPerFold]; for (int i = 0; i < prob.l - iNumElementsPerFold; i++) { dblActualValues[i] = prob.y[i + iNumElementsPerFold]; } } else { dblForecastValues = new double[prob.l]; dblActualValues = new double[prob.l]; for (int i = 0; i < prob.l; i++) { dblActualValues[i] = prob.y[i]; } } svm.svm_cross_validation(prob, param, nr_fold, dblForecastValues, crossValidationType); switch(measureType) { case MSE: dblResult = measureBUS.MSE(dblActualValues, dblForecastValues); break; case NMSE: dblResult = measureBUS.NMSE(dblActualValues, dblForecastValues); break; case RMSE: dblResult = measureBUS.RMSE(dblActualValues, dblForecastValues); break; case SIGN: dblResult = measureBUS.Sign(dblActualValues, dblForecastValues); break; } return dblResult; //StreamWriter writer = new StreamWriter("CrossValidation.txt"); //writer.WriteLine("Cross Validation Mean squared error = " + total_error / prob.l); //writer.Close(); //System.Console.Out.Write("Cross Validation Accuracy = " + 100.0 * total_correct / prob.l + "%\n"); }
//public void LoadDataSet(double[][] trainingSet) //{ // NumPattern = trainingSet.Length; // ArrActual = new double[NumPattern][]; // ArrPredict = new double[NumPattern][]; // ArrPattern = new double[NumPattern][]; // for (int i = 0; i < NumPattern; i++) // { // ArrActual[i] = trainingSet[i][ANNParameterBUS.InputNode]; // ArrPattern[i] = new double[ANNParameterBUS.InputNode]; // for (int j = 0; j < ANNParameterBUS.InputNode; j++) // { // ArrPattern[i][j] = trainingSet[i][j]; // } // } // ANNModel = new ANNModelBUS(); //} //public void Main() //{ // //Khởi tạo bộ trọng số ngẫu nhiên cho mô hình // ANNModel.InitialWeight(); // TSCFDCostFunction(); // int loop = 1; // bool bContinue = true; // MeasureBUS measureBUS = new MeasureBUS(); // while (bContinue) // { // for (int i = 0; i < NumPattern; i++) // { // ANNModel.OutInputLayer = ArrPattern[i]; // ArrPredict[i] = ANNModel.FeedforwardTraining(); // } // Error = measureBUS.NMSE(ArrActual, ArrPredict); // if (Error <= 0.01 || loop >= ANNParameterBUS.MaxEpoch) // { // bContinue = false; // ANNModel.SaveModelFile(); // //ghi nhận độ lỗi và số vòng lặp của quá trình train // ANNModel.SaveError_MaxLoop(Error, loop); // } // else // { // for (int i = 0; i < NumPattern; i++) // { // ANNModel.OutInputLayer = ArrPattern[i]; // ANNModel.FeedforwardTraining(); // ANNModel.ErrorBackpropagationTraining(ArrDesiredValue[i]); // } // } // loop++; // } //} public void Main(int measureType) { //Khởi tạo bộ trọng số ngẫu nhiên cho mô hình ANNModel.InitialWeight(); //TSCFDCostFunction(); int loop = 1; bool bContinue = true; MeasureBUS measureBUS = new MeasureBUS(); while (bContinue) { for (int i = 0; i < NumPattern; i++) { ANNModel.OutInputLayer = ArrPattern[i]; ArrPredicts[i] = ANNModel.FeedforwardTraining(); } switch (measureType) { case MSE: Convert2CaculateErrorMeasure(); Error = measureBUS.MSE(ArrTempActuals, ArrTempPredicts); break; case NMSE: Convert2CaculateErrorMeasure(); Error = measureBUS.NMSE(ArrTempActuals, ArrTempPredicts); break; case RMSE: Convert2CaculateErrorMeasure(); Error = measureBUS.RMSE(ArrTempActuals, ArrTempPredicts); break; case SIGN: Convert2CaculateErrorMeasure(); Error = measureBUS.Sign(ArrTempActuals, ArrTempPredicts); break; } bool bResult = CompareError_Accurancy(Error, ANNParameterBUS.Accuracy, measureType); if (bResult == true || loop >= ANNParameterBUS.MaxEpoch) { bContinue = false; ANNModel.SaveModelFile(); //ghi nhận độ lỗi và số vòng lặp của quá trình train ANNModel.SaveError_MaxLoop(Error, loop); } else { for (int i = 0; i < NumPattern; i++) { ANNModel.OutInputLayer = ArrPattern[i]; ANNModel.FeedforwardTraining(); ANNModel.ErrorBackpropagationTraining(ArrActuals[i]); } } loop++; } }