I am using an ML.NET regression model for predicting time series data, yes I know there is class specifically for time series but I need it to have a comparison in my thesis. But when I change the model or even remove it the predicted value does not change.
here is the class with the model:
internal class FastTree
{
internal static List<SingleValueForecast> predict(List<Value> trainData, int scope)
{
var context = new MLContext();
var data = context.Data.LoadFromEnumerable(trainData);
var pipeline = context.Transforms.CopyColumns("Label", "zatizeniCerpani")
.Append(context.Transforms.Concatenate("Features", "Year", "Month", "Day","Hour"))
.Append(context.Regression.Trainers.FastTree("Label", "Features"));
var model = pipeline.Fit(data);
var predictionEngine = context.Model.CreatePredictionEngine<Value, SingleValueForecast>(model);
var forecasts = new List<SingleValueForecast>();
var last = trainData.Last();
forecasts.Add( new SingleValueForecast(last.date,last.zatizeniCerpani));
for (int i = 0; i < scope; i++)
{
var input = forecasts.Last();
var forecast = predictionEngine.Predict(input.toValue());
forecasts.Add(forecast);
}
return forecasts;
}
}
and here are the related classes:
public class Value
{
public DateTime date { get; set; }
public float Year { get; set; }
public float Month { get; set; }
public float Day { get; set; }
public float Hour { get; set; }
public float zatizeniCerpani { get; set; }
public Value(DateTime date, float zatizeniCerpani)
{
this.date = date;
this.zatizeniCerpani = zatizeniCerpani;
this.Year = date.Year;
this.Month = date.Month;
this.Day = date.Day;
this.Hour = date.Hour;
}
}
public class SingleValueForecast
{
public float Year { get; set; }
public float Month { get; set; }
public float Day { get; set; }
public float Hour { get; set; }
public float zatizeniCerpani { get; set; }
public DateTime date { get; set; }
public SingleValueForecast(DateTime date, float zatizeniCerpani)
{
this.date = date;
this.zatizeniCerpani = zatizeniCerpani;
this.Year = date.Year;
this.Month = date.Month;
this.Day = date.Day;
this.Hour = date.Hour;
}
public SingleValueForecast()
{ }
public Value toValue()
{
return new Value(date,zatizeniCerpani);
}
}
I am expecting for values to change when changing the model I am using. But with any model and even without a model the values are the same.
I’d be very thankful for your help.