Прогнозирование временных рядов encog 3 java чтение из CSV

Я разрабатываю систему прогнозирования временных рядов. Я купил книгу Encog3 для Java, но мне нужно знать, как отправить файл CSV с 3 столбцами и попытаться предсказать второй столбец. CSV определяется следующим образом:

Date, DeviceConsumption, TotalPower

Мне нужно загрузить этот файл в загрузчик, а затем указать столбец, который я хочу предсказать (то есть DeviceConsumption). Третий столбец используется для предоставления дополнительной информации и создания шаблона.

В примерах (например, солнечное пятно) я вижу

TemporalMLDataSet result = new TemporalMLDataSet(windowSize,1);
TemporalDataDescription desc = new TemporalDataDescription(new ActivationSIN(),Type.RAW, false, true);

result.addDescription(desc);

но где я могу определить столбец, который я хочу предсказать??

Спасибо.

EDIT 2 Я сделал несколько улучшений:

Извините, но я все еще не понимаю. Я смог создать 2 TemporalDataDescription, как вы сказали. Но нужно ли добавлять оба в один и тот же TemporalMLDataSet?

TemporalMLDataSet result = new TemporalMLDataSet(WINDOW_SIZE,1);
TemporalDataDescription desc = new TemporalDataDescription(
TemporalDataDescription.Type.RAW,true,true);
    result.addDescription(desc);
TemporalDataDescription desc2 = new TemporalDataDescription(
TemporalDataDescription.Type.RAW,false,true);
    result.addDescription(desc2);

    for(int year = TRAIN_START;year<TRAIN_END;year++)
    {
        TemporalPoint point = new TemporalPoint(2);
        point.setSequence(year);
        point.setData(0, this.deviceConsumption[year]);
        point.setData(1, this.TotalPower[year]);
        result.getPoints().add(point);

    }
    result.generate();

Это правильно?

EDIT3 Предыдущий код был правильным!


person vincenzodentamaro    schedule 17.04.2013    source источник


Ответы (1)


При использовании TemporalMLDataSet вы создаете объект TemporalDataDescription для каждого из значений, которые вы хотите использовать в обучающем наборе. Таким образом, для вашего набора данных у вас будет два объекта TemporalDataDescription. Один для DeviceConsumment и один для TotalPower. Два логических значения в конце позволяют указать прогнозируемый столбец. Вы должны установить DeviceConsumment для ввода и вывода, а TotalPower установить только для ввода. Столбец данных, о котором MLDataSet на самом деле не знает, вам просто нужно установить для него численно увеличивающееся значение, например, как работает пример с солнечными пятнами.

Столбцы могут быть помечены как входные и/или выходные. Входные столбцы используются для прогнозирования, выходные столбцы — это то, что вы пытаетесь предсказать. Один столбец может (и часто является) как вводом, так и выводом. Так обстоит дело с примером солнечных пятен и так же обстоит дело и с приведенными выше данными.

person JeffHeaton    schedule 18.04.2013
comment
Извините, но я все еще не понимаю. Я смог создать 2 TemporalDataDescription, как вы сказали. Но нужно ли добавлять оба в один и тот же TemporalMLDataSet? - person vincenzodentamaro; 18.04.2013
comment
Хорошо, я добавил FAQ по этому пункту с примером. Да, для этого вам нужно было бы создать два TDD и добавить их обоих в набор. Пример здесь имеет два входа, как и здесь, и один используется только для ввода. heatonresearch.com/faq/3/1 - person JeffHeaton; 19.04.2013
comment
спасибо, Джефф, я хотел бы опубликовать решение здесь. Я могу это сделать? - person vincenzodentamaro; 19.04.2013
comment
Да, не стесняйтесь публиковать решение здесь. - person JeffHeaton; 19.04.2013
comment
Джефф, если я попытаюсь предсказать следующие 7 дней, вставив 7 вместо 1 (в качестве выходного нейрона), должен ли я изменить размер окна? и не будет ли у меня деградации качества предсказания?? СПАСИБО - person vincenzodentamaro; 19.04.2013
comment
Прогнозирование большего количества дней требует изменения размера выходного окна. Чем больше окно предсказания, тем чаще оно сложнее. Вы также можете использовать большее окно прогноза и усреднять результаты, чтобы попытаться получить общую тенденцию. - person JeffHeaton; 20.04.2013