Библиотеки: Вероятностная сеть - страница 2

 

Выходом сети будет являться чило [0..1] обозначающее принадлежность входного вектора классу сети. При этом, если сеть в процессе обучения не нашла образ с заданной вероятностью, то она автом

Тупому помогите..... это что означает? .... лучше на пальцах и простой арифметикой

 
Думаю, автору имеет смысл указать свой контакт...
 

rider:

Выходом сети будет являться чило [0..1] обозначающее принадлежность входного вектора классу сети. При этом, если сеть в процессе обучения не нашла образ с заданной вероятностью, то она автом

Тупому помогите..... это что означает? .... лучше на пальцах и простой арифметикой

Что-то автор молчит. Попробую обьяснить как я понял.

Т.к. сеть вероятностная, то на выходе она выдает вероятность принадлежности входного вектора классу, на который обучена данная сеть.

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

Для этого нам нужно создать 2 сети.Назовем их "Up" и "Down". Обучать сеть "Up", мы будем только теми векторами, после которых на истории было движение вверх. И наоборот с сетью "Down" - обучать ее будем векторами, после которых было движение вниз.

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

На выходе получаем вероятность того, на что обучена конкретная сеть.

Допустим мы получили

на выходе сети "Up" значение 0,1 

на выходе сети "Down" значение 0,5

Это значит, что вероятность дальнейшего движения цены вверх намного меньше вероятности движения вниз.

Как обрабатывать полученный результат, а также сколько сетей и чему обучать - это уже личное дело каждого экспертописателя :)

p.s.Если что-то неправильно, прошу поправить.

---------------------------------------------------------------------

Вопрос к автору:

Нельзя ли поподробнее описать следующие функции:

void Shrink(string NetName);
void WReset(string NetName);
void AEqual(string NetName);
void CW(string NetName);
void KillWeaks(string NetName);
void KillOlds(string NetName,datetime sT)


 
Capricorn:
Огромное благодарю...... из всего что на форуме прочитал про нейронки.... более толкового и понятного не встретилось..... ))) спасибо
 
Capricorn:

rider:

Выходом сети будет являться чило [0..1] обозначающее принадлежность входного вектора классу сети. При этом, если сеть в процессе обучения не нашла образ с заданной вероятностью, то она автом

Тупому помогите..... это что означает? .... лучше на пальцах и простой арифметикой

Что-то автор молчит. Попробую обьяснить как я понял.

Т.к. сеть вероятностная, то на выходе она выдает вероятность принадлежности входного вектора классу, на который обучена данная сеть.

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

Для этого нам нужно создать 2 сети.Назовем их "Up" и "Down". Обучать сеть "Up", мы будем только теми векторами, после которых на истории было движение вверх. И наоборот с сетью "Down" - обучать ее будем векторами, после которых было движение вниз.

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

На выходе получаем вероятность того, на что обучена конкретная сеть.

Допустим мы получили

на выходе сети "Up" значение 0,1 

на выходе сети "Down" значение 0,5

Это значит, что вероятность дальнейшего движения цены вверх намного меньше вероятности движения вниз.

Как обрабатывать полученный результат, а также сколько сетей и чему обучать - это уже личное дело каждого экспертописателя :)

p.s.Если что-то неправильно, прошу поправить.

---------------------------------------------------------------------

Вопрос к автору:

Нельзя ли поподробнее описать следующие функции:

void Shrink(string NetName);
void WReset(string NetName);
void AEqual(string NetName);
void CW(string NetName);
void KillWeaks(string NetName);
void KillOlds(string NetName,datetime sT)

Прошу прощения за молчание - был в командировке. Вы поняли все верно. А что касается вспомогательных функций то:

Shrink - Это обязательная функция. Дело в том, что нерон хранит параметры гиперпространства, и схожие вектора могут иметь принадлежность к нескольким таким гиперпространствам, но только с разной вероятностью. Функция Shrink модернизирует образ нейрона так, чтобы вероятность неверной принадлежности сводилась ниже погога. Таким образом мы получаем только один правильный ответ. По правилам ее надо запускать каждый раз после добавления нового нейрона, кроме самого первого, который занимает все пространство, пока не появится второй, с который ему уже надо поделиться.

WReset  - Отклик сети рассчитывается как средневзвешанное среднее всех нейронов. Перед рассчетом необходимо обнулить вспомогательный параметр. 

AEqual - Уравнивает шансы всех нейронов. Можно не использовать.

CW - Производит расчет весов.

! Так как в реальном режиме использования сети приходится то получать ответ, то обучать, я не стал заводить эти три функции в тело библиотеки строго. Можно было бы сделать два режима: 1. обучение ; 2. работа, но тогда потерялась бы гибкость. Придется пока их так и юзать.

Веса неронов - тут имеется ввиду несколько другой смысл чем в сетях предсказания( например в популярном перцептронном эксперте). Каждый раз, когда сеть встретила знакомый образ, соответствующий нейрон прибавляет в весе.  

Важно отметить, что на этапе первоначального обучения (например предидущие 1000 бар) мы можем делать несколько прогонов и добиться оптимальных весов нейронов скрытого слоя. В процессе дообучения по ходу дела можно либо не учитывать веса вообще, а можно повторять алгоритм первичного обучения. Все это оставлено для дальнейших исследований.

KillWeaks - Убивает слабые нероны. Параметры задаются один раз при создании сети, а как это происходит - внутреннее дело сети.

KillOlds - Тоже самое проделываем со старыми неронами. Я заметил, что результаты лучше когда старые данные затираются.

 
ViDan888:
HIDDEN:

Еще бы точное описание, как библиотеку к эксперту "прикрепить". И желательно пример эксперта. А то из описания непонятно какие данные данные для обучения подавать в каком виде.

Автор для обучения подает на вход сети нормированный на 1 вектор..., т.е. одномерный массив в котором данные варьируют от 0 до 1.

Только без примера эксперта все равно сложно использовать DLLшку.

...даже обсудить вопос автора :

"1. Формирование входного ветора - В настоящее время использую 24 параметра (разницу между скользящими средними), нормированную на 1 за промежуток в 24 бара. Т.е. вычисляю матрицу 24x24. Потом ее нормирую и беру последние значения. "

...не понятно, почему матрица 24x24, что, используются разницы между 24мя  МА на периоде 24 бара ?

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

Похоже это даже не обучение, а прогон на истории, а сетка самообучающаяся  - построенная на принципах карт Коханнена.

Согласен, пример постораюсь выложить в ближайшее время.

Матрица 24х24: История уходит в самое начало создания библиотеки, когда я еще ничего не понимал в ВС. 24 - это размер входного вектора( в моем случае), а вторые 24 - это значения во времени. Т.е. для кажного элемента вектора:

1. Берем значения разницы средних на последних 24 барах ( всего 24 значения на каждый элемент входного вектора)

2. Нормируем самый последний элемент(взятый с последнего бара) на 1 получаем число, которое будет формировать входной вектор.

Это сделано для нормирования. Можно, конечно, нормировать элементы вектора  и относительно  самих себя, но я выбрал вариант нормирования значений во времени.

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

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

 
HIDDEN:

Если я правильно понял то вот так в советник импортируется библиотека.

#import "dpnn.dll"
double CreateNet(string NN, int InputVectorSize, double MinTV, double MaxTV, double MW, int NL);
int DestroyNet(string NN);
string NetName(int i);
int GetNetsNumber();
int NetNumber(string NetName);
double TrainNet(string NetName, double& iX[], int T, datetime sT);
int SizeOfNet(string NetName);
double GetPredict(string NetName, double& iX[], datetime sT);
void Shrink(string NetName);
void WReset(string NetName);
void AEqual(string NetName);
void CW(string NetName);
void KillWeaks(string NetName);
void KillOlds(string NetName,datetime sT);
#import
Да, так.
 
ViDan888:

Уважаемый St.D !

Насколько я понял результат обучения не запоминается и после выключния терминала все теряем, чего достигли...?

И потом, после включения терминала и советника, все по новой? )))

PS:

На чем делали?

Сами корпали, иль НейроСольюшенс...

Да, но все еще в процессе, и процедуру запоминания можно сделать очень быстро. Если в этом будет необходимость. Сеть работает достаточно быстро, и пока не вижу смысла в сохранении текущих данных.

Писал на С++. Это вообще моя первая и единственная прога. Прошу не судить строго :) 

 
comanche:
А что такое AMA? Еще один вопрос: подскажите литературу по ВНС, пожалуста.

АМА - adaptive moving average. В рунете много информации и примеров.

Вся литература в интернете, но на ангийском языке. Поищите в google.com "probability neural networks"

 
YuraZ:
St.D

а DLL является закрытой ? исходников нет ? интересно глянуть на саму сеть...

Пока решил не показывать. А то "злой гений" заберет и сделает себе грааль, а мы так и останемся в поисках вечной истины. :))))
Причина обращения: