Esempio n. 1
0
        public FeatureSet(IEnumerable<RawDataModel> trainingModel, IEnumerable<RawDataModel> testModel, Parameters parameters, int[] size = null)
        {
            GroupSize = parameters.GroupSize;
            SlideWindow = parameters.SlideWindow;
            ValidationSetSize = parameters.ValidationSetSize;

            TrainingModel = trainingModel;
            TestModel = testModel;
            VSizes = size ?? new[] { 4, 2, 4, 4, 2 };
            Size = VSizes.Sum() * GroupSize;
        }
Esempio n. 2
0
        private static void Main()
        {
            var parameters = new Parameters
            {
                Layers = (ConfigurationManager.AppSettings["LayersCount"] ?? "6,6,6,6,6").Split(',').Select(Int32.Parse).ToList(),
                HasBias = bool.Parse(ConfigurationManager.AppSettings["HasBias"] ?? "true"),
                IterationsCount = int.Parse(ConfigurationManager.AppSettings["IterationsCount"] ?? "2500"),
                LearingCoefficient = double.Parse(ConfigurationManager.AppSettings["LearingCoefficient"] ?? "0.01", CultureInfo.InvariantCulture),
                InertiaCoefficient = double.Parse(ConfigurationManager.AppSettings["InertiaCoefficient"] ?? "0.01", CultureInfo.InvariantCulture),
                AcceptedError = double.Parse(ConfigurationManager.AppSettings["AcceptedError"] ?? "0.0000001", CultureInfo.InvariantCulture),
                GroupSize = int.Parse(ConfigurationManager.AppSettings["GroupSize"] ?? "10"),
                TimeWindow = int.Parse(ConfigurationManager.AppSettings["TimeWindow"] ?? "5"),
                SlideWindow = int.Parse(ConfigurationManager.AppSettings["SlideWindow"] ?? "1"),
                ValidationSetSize = double.Parse(ConfigurationManager.AppSettings["ValidationSetSize"] ?? "15", CultureInfo.InvariantCulture)
            };

            var trainingSetPath =
                Path.Combine(ConfigurationManager.AppSettings["PathToTestFiles"] +
                             ConfigurationManager.AppSettings["TrainingSet"]);
            var testSetPath =
                Path.Combine(ConfigurationManager.AppSettings["PathToTestFiles"] +
                             ConfigurationManager.AppSettings["TestSet"]);

            var parser = new Parser();
            var classes = new Classification();

            var trainingSetModel = parser.ReadFile(trainingSetPath);
            var testSetModel = parser.ReadFile(testSetPath);

            trainingSetModel = classes.AddClasses(trainingSetModel, parameters);
            testSetModel = classes.AddClasses(testSetModel, parameters);

            if ((ConfigurationManager.AppSettings["Type"] ?? "1") == "1")
            {
                var classification = new ProblemBase(parameters);
                classification.Execute(trainingSetModel, testSetModel);
            }
            else
            {
                var svm = new SVM(parameters);
                svm.Execute(trainingSetModel, testSetModel);
            }
        }
Esempio n. 3
0
        public ProblemBase(Parameters parameters)
        {
            Parameters = parameters;

            Initialize();
        }
        public List<RawDataModel> AddClasses(List<RawDataModel> set, Parameters parameters)
        {
            var time = parameters.TimeWindow;

            var indexFirst = set.FirstOrDefault(x => x.Status == "T") ?? set.First();
            var indexLast = set[set.Count - 1];

            var endTime = indexFirst.UpdateTime;
            endTime = endTime.AddMinutes(time);

            var counterSet = (indexLast.UpdateTime.Hour - indexFirst.UpdateTime.Hour)*60 +
                             (indexLast.UpdateTime.Minute - indexFirst.UpdateTime.Minute);
            var counter = 1;

            //zmienne dla sell
            var sellMiddlePrice = new Double[(int) Math.Ceiling((double) counterSet/time) + 1];
            var sellRecordCount = new int[(int) Math.Ceiling((double) counterSet/time) + 1];
            var sellClassForTime = new int[(int) Math.Ceiling((double) counterSet/time)];

            //zmienne dla buy
            var buyMidlePrice = new Double[(int) Math.Ceiling((double) counterSet/time) + 1];
            var buyRecordCount = new int[(int) Math.Ceiling((double) counterSet/time) + 1];
            var buyClassForTime = new int[(int) Math.Ceiling((double) counterSet/time)];

            foreach (var el in set)
            {
                if (el.Status == "1") //dane po nocnej zmianie
                {
                    if (el.OrderType == 1)
                    {
                        //dla sell
                        sellMiddlePrice[0] += el.PricePoint;
                        sellRecordCount[0] += 1;
                        el.Group = 0;
                    }
                    else
                    {
                        //dla buy
                        buyMidlePrice[0] += el.PricePoint;
                        buyRecordCount[0] += 1;
                        el.Group = 0;
                    }
                }
                else
                {
                    if (DateTime.Compare(el.UpdateTime, endTime) < 0)
                    {
                        if (el.OrderType == 1)
                        {
                            sellMiddlePrice[counter] += el.PricePoint;
                            sellRecordCount[counter] += 1;
                            el.Group = counter;
                        }
                        else
                        {
                            buyMidlePrice[counter] += el.PricePoint;
                            buyRecordCount[counter] += 1;
                            el.Group = counter;
                        }
                    }
                    else
                    {
                        if (el.OrderType == 1)
                        {
                            counter++;
                            endTime = endTime.AddMinutes(time);
                            sellMiddlePrice[counter] += el.PricePoint;
                            sellRecordCount[counter] += 1;
                            el.Group = counter;
                        }
                        else
                        {
                            counter++;
                            endTime = endTime.AddMinutes(time);
                            buyMidlePrice[counter] += el.PricePoint;
                            buyRecordCount[counter] += 1;
                            el.Group = counter;
                        }
                    }
                }
            }

            //wyliczamy srednią dla każdej grupy
            for (var i = 0; i < sellMiddlePrice.Length; i++)
            {
                if (sellRecordCount[i] != 0)
                    sellMiddlePrice[i] = sellMiddlePrice[i]/sellRecordCount[i];
                else
                    sellMiddlePrice[i] = 0;
            }

            for (var i = 0; i < buyMidlePrice.Length; i++)
            {
                if (buyRecordCount[i] != 0)
                    buyMidlePrice[i] = buyMidlePrice[i]/buyRecordCount[i];
                else
                    buyMidlePrice[i] = 0;

            }

            //przypisujemy klase na podstawie średniej
            for (var i = 0; i < sellClassForTime.Length; i++)
            {
                if (sellMiddlePrice[i] < sellMiddlePrice[i + 1] && sellMiddlePrice[i + 1] != 0)
                    sellClassForTime[i] = 2; //wzrost
                else if (sellMiddlePrice[i] > sellMiddlePrice[i + 1] && sellMiddlePrice[i + 1] != 0)
                    sellClassForTime[i] = 0; // spadek
                else
                    sellClassForTime[i] = 1; //stały
            }

            for (var i = 0; i < buyClassForTime.Length; i++)
            {
                if (buyMidlePrice[i] < buyMidlePrice[i + 1] && buyMidlePrice[i + 1] != 0)
                    buyClassForTime[i] = 2; //wzrost
                else if (buyMidlePrice[i] > buyMidlePrice[i + 1] && buyMidlePrice[i + 1] != 0)
                    buyClassForTime[i] = 0; // spadek
                else
                    buyClassForTime[i] = 1; //stały
            }

            //Finalne przypisanie kalsy do rekordu
            foreach (var el in set.Where(el => el.Group < sellClassForTime.Length))
                if (el.OrderType == 1)          
                    el.SellClass = sellClassForTime[el.Group]; 
                else
                    el.BuyClass = buyClassForTime[el.Group];

            return set;
        }
Esempio n. 5
0
       public SVM(Parameters parameters) : base(parameters)
       {
 
       }