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()); }
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(); }
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)); }