public override string ToString()
        {
            var sb = new StringBuilder();

            sb.Append(Estimator.GetType().FullName);
            sb.Append("{");
            if (RoutingStructure.ColumnsProduced.Count() > 1)
            {
                for (var i = 0; i < RoutingStructure.ColumnsProduced.Count(); i++)
                {
                    sb.Append($" col={RoutingStructure.ColumnsProduced[i].Name}:{RoutingStructure.ColumnsConsumed[i].Name}");
                }
            }
            else
            {
                sb.Append($" col={RoutingStructure.ColumnsProduced.First().Name}:{string.Join(",", RoutingStructure.ColumnsConsumed.Select(c => c.Name))}");
            }
            if (Properties != null)
            {
                foreach (var property in Properties)
                {
                    sb.Append($" {property.Key}={property.Value}");
                }
            }
            sb.Append("}");
            return(sb.ToString());
        }
Exemple #2
0
        public Model(MLContext mlContext, IEstimator <ITransformer> algorythm, string trainingDataLocation)
        {
            _mlContext        = mlContext;
            _algorythim       = algorythm;
            _trainingDataView = _mlContext.Data.LoadFromTextFile <BikeSharingDemandSample>(
                path: trainingDataLocation,
                hasHeader: true,
                separatorChar: ',');

            Name = algorythm.GetType().ToString().Split('.').Last();
        }
Exemple #3
0
        public ITransformer Fit(IEstimator <ITransformer> estimator, DateTime to)
        {
            Console.WriteLine($"Running {estimator.GetType().Name}");
            MLContext mlContext = new MLContext();

            DateTime from = _featurables.Min(c => c.Begin);
            //to = _featurables.Max(c => c.End);
            Period period      = Period.S;
            int    periodCount = 5;

            List <Dictionary <string, float> > features = new List <Dictionary <string, float> >();

            for (DateTime date = from; date < to; date = date.AddPeriod(period, periodCount))
            {
                if (_featurables.All(c => c.HasFeatures(date)) && _pipExpectation._futurPip.ContainsKey(date))
                {
                    Dictionary <string, float> feature = new Dictionary <string, float>();
                    var featuresDictionnary            = GetFeatures(date);

                    if (featuresDictionnary == null)
                    {
                        continue;
                    }

                    foreach (var item in featuresDictionnary)
                    {
                        feature.Add(item.Key, item.Value);
                    }
                    feature["Label"] = decimal.ToSingle(_pipExpectation._futurPip[date].Long);
                    features.Add(feature);
                }
            }

            IDataView data = new FloatsDataView(features);

            using (FileStream stream = new FileStream("data.tsv", FileMode.Create))
                mlContext.Data.SaveAsText(data, stream);

            string[] featureNames = features.First().Keys.Where(c => c != "Label").ToArray();

            var pipeline = mlContext.Transforms.Concatenate("Features", featureNames)
                           .Append(mlContext.Transforms.NormalizeMeanVariance("Features"))
                           .Append(mlContext.Transforms.NormalizeMinMax("Features"))
                           .AppendCacheCheckpoint(mlContext);
            //.Append(mlContext.Regression.Trainers.OnlineGradientDescent(numberOfIterations:10));

            // Create data prep transformer
            ITransformer transformData   = pipeline.Fit(data);
            IDataView    transformedData = transformData.Transform(data);

            //IEstimator<ITransformer> estimator = mlContext.Regression.Trainers.OnlineGradientDescent(numberOfIterations:10);

            var cvResults = mlContext.Regression.CrossValidate(transformedData, estimator, numberOfFolds: 5);


            // Apply transforms to training data
            var models = cvResults.OrderByDescending(fold => fold.Metrics.RSquared).ToArray();

            // Get Top Model
            var topModel = models[0];

            Console.WriteLine($"\tR2:                { topModel.Metrics.RSquared}");
            Console.WriteLine($"\tLossfunction:      { topModel.Metrics.LossFunction}");
            Console.WriteLine($"\tMeanAbsoluteError: { topModel.Metrics.MeanAbsoluteError}");

            //RegressionMetrics trainedModelMetrics = mlContext.Regression.Evaluate(testDataPredictions);
            //double rSquared = trainedModelMetrics.RSquared;

            return(transformData.Append(topModel.Model));
        }