예제 #1
0
        public IEnumerable <BasicDataset> Predict(IEnumerable <BasicDataset> datasets)
        {
            SplitSet(datasets, out IEnumerable <BasicDataset> trainingSet, out IEnumerable <BasicDataset> controlSet);

            int totalCount = datasets.Count(), trainingCount = trainingSet.Count(), controlCount = controlSet.Count();
            //read data
            DataTable mscTable = DataTableConverter.ConvertToDateTable(datasets);

            DateTableHandler dateTableHandler = new DateTableHandler();

            mscTable = dateTableHandler.SortTable(mscTable, "Date ASC");

            IEnumerable <DateTime> dates = mscTable.Columns["Date"].ToArray <DateTime>();

            IEnumerable <DatePart> dateparts = DatePart.CreateFromDates(dates);

            //select the target column
            double[]   outResPositive = mscTable.Columns["Close"].ToArray();
            DateTime[] allDates       = mscTable.Columns["Date"].ToArray <DateTime>(), predictedDates = new DateTime[controlCount];

            for (int i = 0; i < predictedDates.Length; ++i)
            {
                predictedDates[i] = allDates[trainingCount + i];
            }

            // separation of the test and train target sample
            double[] outResPositiveTrain = outResPositive.Get(0, trainingCount);
            double[] outResPositiveTest  = outResPositive.Get(trainingCount, totalCount);

            dateTableHandler.RemoveColumnRange(mscTable,
                                               new string[] { "Close", "Date", "Open", "High", "Low", "Last", "Total Trade Quantity", "Turnover (Lacs)" }
                                               );

            var columnsToAdd = CreateNewColumnList();

            dateTableHandler.AddColumnRange(mscTable, columnsToAdd);

            dateTableHandler.FillColumnRange(mscTable, columnsToAdd, dateparts);

            //receiving input data from a table
            double[][] inputs = mscTable.ToJagged(System.Globalization.CultureInfo.InvariantCulture);

            //separation of the test and train sample
            double[][] inputsTrain = inputs.Get(0, trainingCount),
            inputsPredict = inputs.Get(trainingCount, totalCount);

            int[] trainClasses = AssignClasses(outResPositiveTrain, out Dictionary <int, int> valueToClassDictionary);

            int[] predictedClasses = Predict(inputsTrain, trainClasses, inputsPredict);

            double[] predictedValues = GetValuesFromClasses(predictedClasses, valueToClassDictionary);

            return(ConvertToDatasetRange(predictedDates, predictedValues));
        }