Ввод данных массива ML.Net - PullRequest
       20

Ввод данных массива ML.Net

0 голосов
/ 27 ноября 2018

Мне трудно предсказать ежемесячные продажи с ежедневным вводом данных о продажах с использованием Microsoft .ML

    class Data
        {
            [Column(ordinal: "0", name: "Label")]
            public float PredictedProfit;
            [Column(ordinal: "Month")]
            public int Month;
            [Column(ordinal: "DayOfMonth")]
            public int DayOfMonth;
            [Column(ordinal: "Sales")]
            public double[] Sales;
            [Column(ordinal: "MonthlyProfit")]
            public double MonthlyProfit;
    }
    ...........................
     MLContext mlContext = new MLContext(seed: 0);
    List<VData> listData;
    VData row=new VData();
    .....
    fill row
    .....
    listData.Add(row);
    var trainData = mlContext.CreateStreamingDataView<VData>(listData);   

    var pipeline = mlContext.Transforms.CopyColumns("Label", "MonthlyProfit");            

    pipeline.Append(mlContext.Transforms.Concatenate("Features", "MonthlyProfit", "Sales", "Month", "DayOfMonth");

    pipeline.Append(mlContext.Regression.Trainers.FastTree());

    var model = pipeline.Fit(trainData);

    var dataView = mlContext.CreateStreamingDataView<VData>(listData);
    var predictions = model.Transform(dataView);
    var metrics = mlContext.Regression.Evaluate(predictions, "Label", "MonthlyProfit");

Значение метрики всегда равно нулю, и нет прогнозируемых данных

1 Ответ

0 голосов
/ 29 ноября 2018

Конвейеры в ML.NET являются неизменяемыми: вызовы pipeline.Append возвращают новый обновленный конвейер, но не изменяют исходный конвейер.

Измените код так, чтобы:

var pipeline = mlContext.Transforms.CopyColumns("Label", "MonthlyProfit");            

pipeline = pipeline.Append(mlContext.Transforms.Concatenate("Features", "MonthlyProfit", "Sales", "Month", "DayOfMonth");

pipeline = pipeline.Append(mlContext.Regression.Trainers.FastTree());

Кроме того, используемый вами атрибут [Column] не имеет никакого эффекта.Чтобы изменить имя столбца метки, вы можете использовать [ColumnName("Label")].Все остальные атрибуты совершенно не нужны.

...