示例#1
0
        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++;
            }
        }
示例#2
0
        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
        }
示例#3
0
        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++;
            }
        }
示例#4
0
        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();
        }
示例#5
0
        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>";
        }
示例#6
0
        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;
        }
示例#7
0
    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");
    }
示例#8
0
        //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++;
            }
        }