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; }
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); } }
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; }
public SVM(Parameters parameters) : base(parameters) { }