Поиск набора индикаторов для подачи на входы в нейросеть. Дискуссия. Инструмент оценки результатов. - страница 5

 
joo писал(а) >>

Почему ж не видны. Различия видны. Нет ни какого перенасыщения нейронов при верном выборе диапазона поиска. "Вы просто не умеете их готовить."(c) :)

Для разных по сложности задач будут разные по оптимальности инструменты, как Вы правильно заметили (отвертки).

На счёт выбора диапазона очень спорный вопрос. ГА очень долгий, намного дольше чем ОРО - ещё один недостаток.

Интересно узнать у Вас технику подбора диапазона весов, ну или чем Вы руководствуетесь

joo писал(а) >>

Для разных по сложности задач будут разные по оптимальности инструменты, как Вы правильно заметили (отвертки).

ГА не для НС-й. Для НС-й есть свои методы обучения(оптимзации). Хотя бы просто потому что не получиться как с ОРО использовать CV.

 
rip >>:

Правильно, генетический алгоритм не использует ф-цию ошибки для подстройки весов.

На сколько я понимаю, вы могли разметить м5 по максимальному профиту, который может быть на истории и эту разметку используете как фитнес-функцию.

Вот как раз интересует как выглядит функция, по которой вы оцениваете особь.

так :)

 public double evaluate(IChromosome a_subject) {
        this.NNWeights=new double[a_subject.size()]; //создаем вектор весов для нейросети
        for (int i=0;i<this.NNWeights.length;i++)
        {
            DoubleGene g= (DoubleGene) a_subject.getGene(i);
            this.NNWeights[i]=g.doubleValue(); //заполняем вектор весов для нейросети
        }
        net.SetWeights(this.NNWeights); //устанавливаем веса нейросети
        Trade trade =new Trade();
        for ( int i=0;i<this.csv.CSVInputs.length;i++)
        {
            trade.TradeCurrentSignal(net.ComputeForOneNeuronOutLayer(this.csv.CSVInputs[i]),this.csv.CSVPrice[i]);
        }
        
      return 1000000+trade.Profit; //целевая функция должна быть >0
    }
 
rip >>:

Речь идет об ошибке тестовой выборки. Т.е. вы берете следующий месяц после обучающей выборки. Размечаете ее, в соответствии с вашим алгоритмом. Подаете выходы на обученную сеть. Сравниваете результат. Вот как раз график этих ошибок и интересует.


График ошибок обучающей выборки можно получить также и при этом оценивать как учиться ваша сеть (или идет развитие поколений в ген. алгоритме)

При обучении я учу пока увеличивается целевая функция или пока не надоест( по времени). о переобучении забочусь косвенно - обучающая выборка много больше чем весов в нейросети. дальше, выгружаю в .mq4 ( здесь, возможно, есть ошибка... тестирую . протестировал. все правильно работает.) и смотрю тестером стратегий МТ4 что получилось.

"Сравниваете результат" - вот эту часть вашей мысли я не понимаю... специально переобучать сеть и сравнивать ее результат с результатом сети, обученной на предыдущих периодах? не вижу смысла.

 
rip >>:

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

не сравню я все наборы.... перебирать даже 200 наборов входов, на самом деле их больше, долго и мало смысла т.к. можно что-то упустить.

 
iliarr >>:

При обучении я учу пока увеличивается целевая функция или пока не надоест( по времени). о переобучении забочусь косвенно - обучающая выборка много больше чем весов в нейросети. дальше, выгружаю в .mq4 ( здесь, возможно, есть ошибка... тестирую ) и смотрю тестером стратегий МТ4 что получилось.

"Сравниваете результат" - вот эту часть вашей мысли я не понимаю... специально переобучать сеть и сравнивать ее результат с результатом сети, обученной на предыдущих периодах? не вижу смысла.


Почему переобучать?! Есть выборка, на которой вы учите сеть. Теперь смоделируйте ее работу, подайте сети выборку с которой она не знакома и сравните результат полученный от работы сети с тем, который ожидался для тестовой выборки.

 
rip >>:

Почему переобучать?! Есть выборка, на которой вы учите сеть. Теперь смоделируйте ее работу, подайте сети выборку с которой она не знакома и сравните результат полученный от работы сети с тем, который ожидался для тестовой выборки.

для Forex, результат того что вы предлагаете, будет определять прогнозирующие способности обученной сети, а не качество обучения...а прогнозирующие способности сети зависят не только от качества обучения, но еще и от структуры сети, способе интерпретации того что выдает сеть и от информации, которая подается в сеть. как раз, что бы лучше понять что подавать в сеть, я и поднял тему данной ветки форума.

 
iliarr >>:

для Forex, результат того что вы предлагаете, будет определять прогнозирующие способности обученной сети, а не качество обучения...а прогнозирующие способности сети зависят не только от качества обучения, но еще и от структуры сети, способе интерпретации того что выдает сеть и от информации, которая подается в сеть. как раз, что бы лучше понять что подавать в сеть, я и поднял тему данной ветки форума.

Кгм ... причем тут прогнозирующие способности? У вас есть сеть, есть ваша сеть с предполагаемой интерпретацией ее ответов.

Исходя из вашего кода, класс Trade() имитирует в том или ином виде процесс торгов. Открытие позиции, удержание, закрытие.

Исходя из этого вы принимаете решение на сколько подходит вам данная особь. Т.е. вы изначально заложили какое-то правило

интерпретации выходов.

 
iliarr >>:

не сравню я все наборы.... перебирать даже 200 наборов входов, на самом деле их больше, долго и мало смысла т.к. можно что-то упустить.

Хм ... идея формирования обучающей выборки: (Next price predictor using Neural Network )


ntr - of training sets

lb - lastBar


// Fill in the input arrays with data; in this example nout=1
for(i=ntr-1;i>=0;i--)
{
outTarget[i]=(Open[lb+ntr-1-i]/Open[lb+ntr-i]-1.0);
int fd2=0;
int fd1=1;
for(j=nin-1;j>=0;j--)
{
int fd=fd1+fd2; // use Fibonacci delays: 1,2,3,5,8,13,21,34,55,89,144...
fd2=fd1;
fd1=fd;
inpTrain[i*nin+j]=Open[lb+ntr-i]/Open[lb+ntr-i+fd]-1.0;
}
}

 
rip >>:

Хм ... идея формирования обучающей выборки: (Next price predictor using Neural Network )


ntr - of training sets

lb - lastBar


// Fill in the input arrays with data; in this example nout=1
for(i=ntr-1;i>=0;i--)
{
outTarget[i]=(Open[lb+ntr-1-i]/Open[lb+ntr-i]-1.0);
int fd2=0;
int fd1=1;
for(j=nin-1;j>=0;j--)
{
int fd=fd1+fd2; // use Fibonacci delays: 1,2,3,5,8,13,21,34,55,89,144...
fd2=fd1;
fd1=fd;
inpTrain[i*nin+j]=Open[lb+ntr-i]/Open[lb+ntr-i+fd]-1.0;
}
}

Спасибо. Посмотрю.

 

IlyaA писал(а) >>

Общественности требуется увидеть графическую зависимость ошибки обучения от времени (количества эпох).

->

iliarr писал(а) >>
мы, наверное, о разном говорим... я не обучаю с учителем ( в этом способе обучения есть ошибка обучения)... я обучаю на максимум целевой функции и я не знаю какое максимально-возможное значение у целевой функции.

->

rip писал(а) >>

Речь идет об ошибке тестовой выборки. Т.е. вы берете следующий месяц после обучающей выборки. Размечаете ее, в соответствии с вашим алгоритмом. Подаете выходы на обученную сеть. Сравниваете результат. Вот как раз график этих ошибок и интересует.

График ошибок обучающей выборки можно получить также и при этом оценивать как учиться ваша сеть (или идет развитие поколений в ген. алгоритме)

Похоже, rip и IlyaA никак не поймут, что iliarr использует метод обучения без учителя. Про какую ошибку обучения может идти речь, если целевая функция - прибыль? Или Вы оба думаете, что обучив сеть на истории, прогнать на тестовой истории и сравнить полученную прибыль? Прибыль будет другая, меньше или больше, но другая. Тестовая же история другая. Не путайте с аппроксимацией пожалуйста, где критерием качества аппроксимации является среднеквадратичное отклонение исходной функции и полученной.


StatBars писал(а) >>

ОРО при перенасыщении нейрона практически перестаёт его "обучать", в то время как ГА легко может перенасытить нейрон и продолжать дальше увеличивать веса нейрона.

->

StatBars писал(а) >>

На счёт выбора диапазона очень спорный вопрос. ГА очень долгий, намного дольше чем ОРО - ещё один недостаток.

->

StatBars писал(а) >>

ГА не для НС-й. Для НС-й есть свои методы обучения(оптимзации). Хотя бы просто потому что не получиться как с ОРО использовать CV.

Не пойму, почему такая безапелляционность?

Вот несколько ссылок, попавшиеся по поиску, где говорится об обратном:

http://alglib.sources.ru/dataanalysis/neuralnetworks.php

http://network-journal.mpei.ac.ru/cgi-bin/main.pl?l=ru&amp;n=13&pa=10&ar=3

http://masters.donntu.edu.ua/2004/fvti/solomka/library/article2.htm

http://www.neuropro.ru/memo314.shtml


Я не утверждал и не утверждаю, что GA единственно правильное решение оптимизации для всех задач. Оно просто более универсально, чем любое другое решение, а зачастую и быстрее, легко приспособить для решения практически любой задачи. Другой вопрос, правомерный, возникает, какое необходимое минимальное количество запусков фитнес функции для нахождения оптимального решения. Об этом и нужно говорить, а не о скорости работы непосредственно самих алгоритмов оптимизации. И здесь GA даст фору большинству других алгоритмов.

Могу завести отдельную ветку, если интересно кому, в которой можно будет выкладывать занятные тестовые функции для алгоритмов оптимизации, и выкладывать результаты разных алгоритмов. Думаю, будет весьма полезно не только тем, кто занимается NN, но и любому, кто желает получить оптимальный по многим признакам результат своих трудов.

StatBars писал(а) >>

Интересно узнать у Вас технику подбора диапазона весов, ну или чем Вы руководствуетесь

В Maple или Mathca'е смотрю диапазон весов, в котором работает функция активации. Если область определения какой нибудь функции [-1;1], то какой смысл "рыскать" например в таком диапазоне (-100;100) переменных?