Добрый день!
Проверить полностью всю работу нейронной сети включая её обучение по алгоритму LBFGS крайне трудоемкая задача.
Поэтому для проверки я взял один из самых распространенных тестов для машинного обучения - XOR:
#include <Math\Alglib\dataanalysis.mqh> //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { double data[4][3]= { // inputs outputs {-1, -1, -1}, {-1, 1, 1}, { 1, -1, 1}, { 1, 1, -1} }; int nrows=ArrayRange(data,0); int ncolumns=ArrayRange(data,1); CMatrixDouble matrix; matrix.Resize(nrows,ncolumns); for(int i=0; i<nrows; i++) for(int j=0; j<ncolumns; j++) matrix[i].Set(j,data[i][j]); CMultilayerPerceptron mlp; CMLPBase::MLPCreateR1(2,2,1,-1,1,mlp); int info=0; CMLPReport rep; CMLPTrain::MLPTrainLBFGS(mlp,matrix,matrix.Size(),0.001,2,0.01,100,info,rep); Print("Test start."); for(int i=0; i<nrows; i++) { double real=data[i][2]; double x[2]; x[0] = data[i][0]; x[1] = data[i][1]; double y[]; CMLPBase::MLPProcess(mlp,x,y); Print("Actual: "+string(y[0])+" Expected: "+string(real)); } CMLPCVReport cvrep; CMLPTrain::MLPKFoldCVLBFGS(mlp,matrix,matrix.Size(),0.001,2,0.01,100,10,info,rep,cvrep); Print("Average error = "+string(cvrep.m_avgerror)); Print("Test finish."); }
Результат:
Test start. Actual: -0.9706581896514489 Expected: -1.0 Actual: 0.9621222666301732 Expected: 1.0 Actual: 0.9621628440150716 Expected: 1.0 Actual: -0.9706527084520606 Expected: -1.0 Average error = 1.276264422944889e-311 Test finish.
Если же мы убираем строку с обучение из скрипта, то получим результат гораздо хуже:
Actual: 0.4466560346052408 Expected: -1.0 Actual: 0.3265451011586167 Expected: 1.0 Actual: 0.5149972547475861 Expected: 1.0 Actual: 0.3945188532756552 Expected: -1.0
Следовательно обучение действительно есть и проходит на этом примере корректно.
В вашем случае большое расхождение может быть связано с неверной архитектурой или параметрами сети и обучения.
Судя по вашим исходникам вы задаёте максимальное количество эпох для обучения равное всего 5, что вероятно очень мало для этих данных:
Возникает вопрос о правильном портировании библиотеки?
Обычно метаквоты делают свою работу аккуратно, а вот сам алглиб....
Кто сказал, что это работающая библиотека? Какое у нее количество пользователей?
Зачем Вам эта местечковая разработка?
Ведь магистральное направление в области машинного обучения, к котором относится НС, называется R. Все прекрасно доступно из МТ4/5. Огромный набор инструментов, в частности большой набор самых разных НС...
Ведь магистральное направление в области машинного обучения, к котором относится НС, называется R. Все прекрасно доступно из МТ4/5. Огромный набор инструментов, в частности большой набор самых разных НС...
Осталось портировать из R в чистый MQL.
Что алглиб библиотека, что R внешний инструмент, только очень солидный. R нельзя равнять с алглибом - совершенно разные весовые категории
Что алглиб библиотека, что R внешний инструмент, только очень солидный. R нельзя равнять с алглибом - совершенно разные весовые категории
Людям не нужен весь этот геморрой, какова бы хороша среда и язык не были.. люди хотят работать в мт5 без левого софта
Ничего там прекрасно не доступно из мт4/5 а через кучу костылей, так работать просто невозмнжно, нужно быть великим энтузиастом что бы тратить нереальное кол-во времени на весь этот отстой, новички вообще никогда в жизни не станут этим заниматься
И нет ни одной доступной статьи для простого обывателя, как эффективно работать со связкой мт-R, есть 2-3 людей, включая Вас, кто этим занимается, и всё на этом. Все статьи по R написаны в специфическом жанре и со своими "тараканами", и нет ни одной статьи, которая бы доказывала что есть хоть малейший смысл его использовать, не жалея потом о потраченных месяцах
Что алглиб библиотека, что R внешний инструмент, только очень солидный. R нельзя равнять с алглибом - совершенно разные весовые категории
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Библиотека Alglib уже давно является частью MQL5. Нейронная сеть из этой библиотеки пока единственная из официально доступных.
Я попытался использовать эту сеть, но столкнулся с расхождением в результатах.
Модификация: MLPKFoldSplit() не перемешивает данные (сейчас нужно протестировать саму сеть, а не качество данных).
Результат: cvrep.m_avgerror * 100
Расхождение меньше 1% объяснить ещё можно, но здесь расхождение в 2,5%
Возникает вопрос о правильном портировании библиотеки?