R2 Score и RMS Loss в ML.NET. Что-то не так с тем, как я обучил модель, или это связано с имеющимися у меня данными? - PullRequest
0 голосов
/ 10 апреля 2019

Я довольно новичок в ML.NET. Прямо сейчас я просто копирую и вставляю код отсюда ML.NET Tutorial Taxi Fare . Но вместо использования указанных CSV-файлов я использую исторические цены акций BMW.DE с 1996 года по настоящее время. Я получил это отсюда Финансы Yahoo .

Моя цель - предсказать значение "Open" на следующий день.

Пример данных в моем файле BWM.DE.csv:

    Date,Open
    12/19/1996,20.0
    12/20/1996,20.3
    12/23/1996,20.6
    12/27/1996,20.8
    12/30/1996,20.9
    1/2/1997,20.7
    1/3/1997,20.8
    1/6/1997,20.9
    1/7/1997,20.6

Мой BMW Class

    public class BmwOpenClass
    {
        [LoadColumn(0)]
        public string Date;

        [LoadColumn(1)]
        public float Open;
    }

    public class PredictedOpen
    {
        [ColumnName("Score")]
        public float Open;
    }

А вот как я это натренировал

public static ITransformer Train(MLContext mlContext, string dataPath)
        {
            IDataView dataView = mlContext.Data.LoadFromTextFile<BmwOpenClass>(dataPath, hasHeader: true, separatorChar: ',');

            var pipeline = mlContext.Transforms.CopyColumns(outputColumnName: "Label", inputColumnName: "Open")
                .Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "DateEncoded", inputColumnName: "Date"))
                .Append(mlContext.Transforms.Concatenate("Features", "DateEncoded"))
                .Append(mlContext.Regression.Trainers.FastTree());

            var model = pipeline.Fit(dataView);

            SaveModelAsFile(mlContext, model);

            return model;
        }

Теперь, когда я попытался оценить модель (у меня есть отдельный файл CSV для целей оценки), я получаю качество модели:

R2 Оценка: -2,57

Среднеквадратичная потеря: 59,94

Я почти уверен, что -2.57 - это не нормально, потому что согласно документации R2 должен быть ближе к 1, чтобы сказать, что модель в порядке.

1 Ответ

2 голосов
/ 10 апреля 2019

Я не уверен, что использование OneHotEncoding является хорошей идеей для вашего столбца Date, как есть. Вся дата день / месяц / год не является категориальной величиной. Было бы лучше, если бы день, месяц и год были разделены на отдельные столбцы, чем вы можете кодировать их каждый. Кроме того, дата просто не очень хорошая функция, поэтому модель может быть не очень хорошей. Попытайтесь расширить свой набор данных, добавив столбец для дня недели, что-то около того, будет ли это праздник или нет, и он должен работать немного лучше. В конечном счете, для лучшей модели вам нужно больше возможностей ...

...