Оптимизация и Тестирование вне выборки. - страница 4

 

Да, пожалуй!

Кроме того , (принимая во внимание и критику) отмечу, что есть существенное возражение тем, кто не совсем согласен с простым исполнением идеи.

"Не следует усложнять сущность вещей сверх необходимого!" (бр. Оккама)

Первая оптимизация и вслед за ней - вторая (вне выборки) - простое и достаточное решение!

Мы все-таки преследуем цель получить прибыль, а не заниматься оптимизацией, ради оптимизации.

 
Vita:

--> Скозной прогон делает тоже самое (обозначаем, проверяем). Чего дополнительного привносит разбиение по сравнению со сквозным прогоном?


Разбиение эффективно фильтрует информацию. В смысле её количества.

Vita писал (а):

--> Если под "обработав реультаты оптимизации на всей выборке" вы имеете ввиду отбросить множество Д, то не соглашусь - отбрасывать результаты, дающие промежуточные убытки (на выборке или вне выборки), - это элементарная задача, решаемая в ходе самой оптимизации на всей выборке, т.е. не надо никакой обработки после оптимизации. Результатом сходу будет множество Б. И никаких трудоемких дополнительных проверок вне выборки.

Вы имеете в виду оптимизацию в математическом смысле или оптимизацию в реальном тестере? Выборка, как я понимаю, теперь включает в себя обе выборки. Думаете прогнав три ненужных множества по обеим выборкам можно сэкономить время? Что касается реализации, если писать свой тестер с нуля, возможно издержки реализации и будут пренебрежимиыми. Попробуйте реализовать, потом можем вернуться к вопросу.

 
leonid553:

Да, пожалуй!

Кроме того , (принимая во внимание и критику) отмечу, что есть существенное возражение тем, кто не совсем согласен с простым исполнением идеи.

"Не следует усложнять сущность вещей сверх необходимого!" (бр. Оккама)

Первая оптимизация и вслед за ней - вторая (вне выборки) - простое и достаточное решение!

Мы все-таки преследуем цель получить прибыль, а не заниматься оптимизацией, ради оптимизации.


Вот и я за тоже и полностью солидарен с Оккамой. Не следует делать две оптимизации - достаточно одной.

Ваши же слова "После оптимизации советника нам приходится зачастую занудливо прогонять вне выборки не один десяток предложенных оптимизатором наборов параметров."

Прогон на всей совокупности, без разделения на выборка-вне выборки, не менее достаточное и и ещё более протое решение.

 

Категорически не согласен, Vita. Иначе в нейросетках не было бы деления всех данных на три части, принципиально различные: реальная оптимизация - только на первом участке; второй служит только для определения момента окончания обучения, а третий - просто для одиночного тестирования. То есть реальная подгонка идет только на первом, а на третьем - уж что получится... А выбор - "бритва Оккама" или потеря уверенности в системе - остается за создателем системы.

Грубо говоря, оптимизация на А+В+С - это совершенно не то же самое, что обработка, описанная выше.

 
Mathemat, мне кажется он имеет в виду собрать всю кучу (не забываем о комбинаторике) результатов, разделить её на 4 множества и три из них выбросить.
 
Mathemat:

Категорически не согласен, Vita. Иначе в нейросетках не было бы деления всех данных на три части. К тому же реальная оптимизация - только на первом участке; второй служит только для определения момента окончания обучения, а третий - просто для одиночного тестирования.


Деление данных в нейросетях на три части, подозреваю, существует для обучения законам (типа 2х2=4), для выявления этих закономерностей. И только в том случае если они есть. Иначе нейросеть будет подгнанана под кривую сама по себе.

И потом, как мне казалось, задача тестера не обучаться или выявлять закономерности, а найти оптимальный набор параметров. Это можно сделать простым перебором или при помощи генетических алгоритмов или, может, при помощи нейросети. Но вот когда множество оптимальных параметров найдено для выборки, как вы избегаете подгонки под кривую? Принцип? Какие такие плохие элементы множества исчезают при тестировании на вне выборки?

 
lna01:
Vita:

--> Скозной прогон делает тоже самое (обозначаем, проверяем). Чего дополнительного привносит разбиение по сравнению со сквозным прогоном?


Разбиение эффективно фильтрует информацию. В смысле её количества.

--> разбиение отфильтровывает результаты с убытками на выборке или на вне выборки, но с общей совокупной прибылью. Это не то, что мне хотелось бы отбросить.

Vita писал (а):

--> Если под "обработав реультаты оптимизации на всей выборке" вы имеете ввиду отбросить множество Д, то не соглашусь - отбрасывать результаты, дающие промежуточные убытки (на выборке или вне выборки), - это элементарная задача, решаемая в ходе самой оптимизации на всей выборке, т.е. не надо никакой обработки после оптимизации. Результатом сходу будет множество Б. И никаких трудоемких дополнительных проверок вне выборки.

Вы имеете в виду оптимизацию в математическом смысле или оптимизацию в реальном тестере? Выборка, как я понимаю, теперь включает в себя обе выборки. Думаете прогнав три ненужных множества по обеим выборкам можно сэкономить время? Что касается реализации, если писать свой тестер с нуля, возможно издержки реализации и будут пренебрежимиыми. Попробуйте реализовать, потом можем вернуться к вопросу.

--> " Выборка, как я понимаю, теперь включает в себя обе выборки. " - простите, я не хотел заставить вас так думать. Забудьте об этом.

Я хотел сказать, что реальный тестер MetaTrader'a позволяет при оптимизации совокупности выборка+вне выборки получить те же результаты, что и оптимизация выборки с последующим тестированием вне выборки. В Тестере кнопка "Свойства Эксперта", далее закладки "Тестирование" и "Оптимизация" позволяют избавится от убытков сколь угодной длины и глубины. А так как я стою на том, что оптимизация выборки с последующим тестом вне выборки ни от чего другого не избавляет и ничего не привносит вообще, то это решение задачи.

К сожалению, именно в математическом смысле можно добится совершенной оптимизации параметров под любую заданную кривую. Трюк с как бы тестированием "на будущем" вне выборки является скрытой, но всё той же банальной оптимизацией на всей заданной совокупности выборка+вне выборки. Никаких гарантий на будущее. Никакого избавления от подгонки под кривую. Рабочий набор параметров надо искать другим способом.

 
Деление данных в нейросетях на три части, подозреваю, существует для обучения законам (типа 2х2=4), для выявления этих закономерностей.

Правильно, Vita, для выявления закономерностей. А мы чем тут занимаемся? Чтобы это выявление не выродилось в тривиальное "запоминание" исходной совокупности (= курвафиттинг), и придуманы еще два множества данных. В НС все идет так: идет обучение на множестве А (обучающем) в сторону снижения целевой функции (это обычно ошибка предсказания или классификации). Обучение организовано так, что ошибка на А снижается монотонно.

Одновременно та же ошибка при тех же параметрах проверяется на множестве В (валидирующем). Там ошибка изменяется как чашеобразная функция (сначала падение, потом минимум, потом рост). Как только на множестве В достигается минимум ошибки, обучение останавливается. Дальнейшее продолжение обучения на А, даже при снижении ошибки, приводит к курвафиттингу, так как ошибка на множестве В уже начинает расти. Считается, что начиная с этого момента способность сети к генерализации падает. Именно поэтому обучение насильно останавливают, не доводя подгонку на А до предельной (и в этом принципиальное отличие алгоритма от подгонки, которую делает оптимизатор метаквотов).

И, наконец, набор параметров, на котором обучение остановилось, прогоняется по третьему множеству С (тестирующему). Вот это и есть истинная проверка качества обучения, так как данные на С вообще никак не влияли на обучение до этого. Гарантии устойчивой работы НС при найденных параметрах, конечно, все равно нет, но такой алгоритм отметает по меньшей мере 95% псевдограалей, которых тут на форуме - каждый первый :).

А простой перебор на единственном участке данных - это чистейший курвафиттинг, идеальный на участке обучения и никудышный вне его.

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

 
Vita:

Я хотел сказать, что реальный тестер MetaTrader'a позволяет при оптимизации совокупности выборка+вне выборки получить те же результаты, что и оптимизация выборки с последующим тестированием вне выборки. В Тестере кнопка "Свойства Эксперта", далее закладки "Тестирование" и "Оптимизация" позволяют избавится от убытков сколь угодной длины и глубины.

Всё зависит от постановки задачи. Если пренебрегать степенью равномерности распределения прибыли по времени тестирования, то штатных возможностей тестера МТ действительно достаточно, и затраты времени будут сравнимыми. Стоит ли этим пренебрегать? У каждого свой опыт и свои взгляды. Процесс действительно можно назвать подгонкой, но термин аппроксимация думаю будет точнее. Далеко не всякую аппроксимацию можно экстраполировать в будущее и критерий равномерности прибыли как раз позволяет отбросить заведомо непригодные для экстраполяции варианты. ИМХО, разумеется.

 
Mathemat:

А простой перебор на единственном участке данных - это чистейший курвафиттинг, идеальный на участке обучения и никудышный вне его.

--> Именно, так.

Но что дает разбиение участка на фрагменты? К чему приводит, простите, "псевдообучение" на трех различных фрагментах? К тому, что на каждом в отдельности участке имеется прибыль? Чем такая подгонка лучше? Дает гарантии кудышности вне участка? Если вы в это верите, то ради бога. Более того, тестер дает вам возмоность задушить кривую так, чтобы на каждом фрагменте А, Б,С... у вас была прибыль.

Только, давайте, покончим с нейросетями, ибо они в этой теме и рядом не проходили. Люди в ручную занимаются геморром ради сомнительного преимущества, на которое я, кстати, указал, но так и не услышал ничего большего от, чем же результаты после оптимизации на выборке и тестов на вне выборки лучше банальной прогонки? Понимаете, речь идет об реальном труде и результатах, а не о теории нейросетей. Будьте любезны, укажите, на реальные преимущества, если такие ещё есть, кроме того, что я указал.

Причина обращения: