Russian Qt Forum
Апрель 25, 2024, 09:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3 4 5   Вниз
  Печать  
Автор Тема: К проблеме предсказания событий  (Прочитано 29813 раз)
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #15 : Октябрь 18, 2019, 19:32 »

Цитировать
m_ax, ну это не совсем та нейросеть, в традиционном ее представлении.  Улыбающийся
Поэтому и в кавычках  Улыбающийся
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #16 : Октябрь 18, 2019, 19:35 »

Поэтому и в кавычках  Улыбающийся
А почему не взят традиционную, так сказать? Улыбающийся
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #17 : Октябрь 18, 2019, 19:37 »

Поэтому и в кавычках  Улыбающийся
А почему не взят традиционную, так сказать? Улыбающийся
Можно) Интересно было бы сравнить)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #18 : Октябрь 18, 2019, 20:04 »

Цитировать
Можно) Интересно было бы сравнить)
https://github.com/tiny-dnn вроде, не плохая?)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #19 : Октябрь 18, 2019, 20:04 »

Можно) Интересно было бы сравнить)
А можете выложить последовательность?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #20 : Октябрь 18, 2019, 20:05 »

https://github.com/tiny-dnn вроде, не плохая?)
Эту не видал, сейчас заценю.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #21 : Октябрь 18, 2019, 20:06 »

Можно) Интересно было бы сравнить)
А можете выложить последовательность?
Да, конечно) Но позже..)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Azazello
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #22 : Октябрь 18, 2019, 22:21 »

Мои мысли по архитектуре такой "сети" (для наглядности, пусть N=4)..............

Осталось реализовать и проверить  Улыбающийся  


Это не сработает.
Ничего из вышеперечисленного.

Нейросеть, Гм.
Если уж так пошло, советовал бы вам использовать дерево решений, а не нейроны. Там хотя-бы видно куда двигаешься, а нейросеть даже создатели не знают как она работает. Ну то лирика.

Обучение на исторических данных - полный провал. Тем более по одному критерию. Должны быть десятки "других критериев", чтобы это хоть как то давало предсказание лучше 60%.

В вашем случае, я бы советовал просто использовать статистический анализ, а на него уже вешать дерево решений.
Пример:
1 секунда: решений 40/60
2 секунды: решений 30/70

Это исторические данные.
Т.е. мы цепляем какие-то факторы, которые нам неизвестны, на временной интервал.

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



« Последнее редактирование: Октябрь 18, 2019, 22:34 от Azazello » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #23 : Октябрь 19, 2019, 10:38 »

...пусть N=4
...
...если их manhetten lenght <= m (пусть m = 2).
Уже сделано немало произвольных (чисто "вкусовых") допущений, боюсь что рез-т будет зависеть от них "dramatically"

После обучения, мы скармливаем сети последовательность x, для которой хотим предсказать вероятности для 1 и 0. Ищем в списке к какой группе принадлежит последовательность x и смотрим на значения счётчиков: наиболее вероятный исход будет соответствовать наибольшему значению счётчика.
Ну а почему бы и не реализовать это "в лоб" на ассоциативном контейнере? Может это внесет новые мысли, "свежую струю". Ожидаемый рез-т - ну да, что-то будет "не белый шум", но точность предсказания невелика. И будет сильная зависимость от тестовых данных.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #24 : Октябрь 19, 2019, 11:03 »

Реализовал) Результаты сильно порадовали. Всё распознаётся с высокой точностью)

Код
C++ (Qt)
#include <iostream>
#include <vector>
#include <cmath>
#include <iomanip>
 
#include "maxnet.h"
 
static constexpr unsigned int period = 10; // число предыдущих шагов для определения вероятности следующего шага  
static constexpr size_t SIZE = 550; // Полный размер данных
static constexpr size_t TRAINING_SIZE = 500; // Часть данных, для обучения сети
 
template <class V, class F>
void apply(V & data, F f)
{
   for (size_t i = 0; i < data.size(); ++i)
   {
       data[i] = f(i);
   }
}
 
int main()
{    
   std::vector<bool> data(SIZE);
 
   apply(data, [](size_t i)->bool { return (sin(i) + cos(4*i) >= 0); }); // периодическая функция
 
   vanda::maxnet<period, 0> maxnet; // Наша сеть)
 
   // Разделяем данные на две части:
   // для обучения и тестирования
   auto end = data.begin()+TRAINING_SIZE;
 
   maxnet.training(data.begin(), end); // обучаем сеть
 
   auto beg = end;
   end += period;
   // Тестируем её на оставшейся части данных
   while (end != data.end())
   {
       auto p = maxnet.prediction_for(beg++, end);
       std::cout   << "observed value = " << *end++
                   << "\t p(1) = " << p.probability_for_1
                   << "\t  p(0) = " << p.probability_for_0 << std::endl;
   }
 
   std::cout << std::endl << "number of groups = " << maxnet.num_groups() << std::endl;
 
   return 0;
}
 

И вот, собственно, результаты тестов: В первой колонке наблюдаемое значение, во второй вероятность того, что будет 1, в третьем, вероятность выпадения 0.  (Впечатляет  Крутой)
Код
C++ (Qt)
observed value = 1 p(1) = 0.894737  p(0) = 0.105263
observed value = 1 p(1) = 1  p(0) = 0
observed value = 1 p(1) = 1  p(0) = 0
observed value = 0 p(1) = 0  p(0) = 1
observed value = 0 p(1) = 0  p(0) = 1
observed value = 1 p(1) = 0.941176  p(0) = 0.0588235
observed value = 0 p(1) = 0  p(0) = 1
observed value = 1 p(1) = 1  p(0) = 0
observed value = 1 p(1) = 1  p(0) = 0
observed value = 0 p(1) = 0  p(0) = 1
observed value = 0 p(1) = 0  p(0) = 1
observed value = 0 p(1) = 0  p(0) = 1
observed value = 1 p(1) = 0.47619  p(0) = 0.52381
observed value = 1 p(1) = 1  p(0) = 0
observed value = 0 p(1) = 0  p(0) = 1
observed value = 0 p(1) = 0.454545  p(0) = 0.545455
observed value = 0 p(1) = 0  p(0) = 1
observed value = 0 p(1) = 0  p(0) = 1
observed value = 1 p(1) = 1  p(0) = 0
observed value = 1 p(1) = 1  p(0) = 0
observed value = 0 p(1) = 0.5  p(0) = 0.5
observed value = 1 p(1) = 0.5  p(0) = 0.5
observed value = 0 p(1) = 0  p(0) = 1
observed value = 0 p(1) = 0  p(0) = 1
observed value = 1 p(1) = 1  p(0) = 0
observed value = 0 p(1) = 0.894737  p(0) = 0.105263
observed value = 1 p(1) = 1  p(0) = 0
observed value = 1 p(1) = 1  p(0) = 0
observed value = 0 p(1) = 0  p(0) = 1
observed value = 0 p(1) = 0  p(0) = 1
observed value = 0 p(1) = 0  p(0) = 1
observed value = 0 p(1) = 0.47619  p(0) = 0.52381
observed value = 1 p(1) = 1  p(0) = 0
observed value = 1 p(1) = 0.3  p(0) = 0.7
observed value = 0 p(1) = 0  p(0) = 1
observed value = 0 p(1) = 0.5  p(0) = 0.5
observed value = 0 p(1) = 0  p(0) = 1
observed value = 1 p(1) = 1  p(0) = 0
observed value = 1 p(1) = 1  p(0) = 0
observed value = 0 p(1) = 0  p(0) = 1
 
number of groups = 59
 

Проект приаттачен, можно поиграться)
« Последнее редактирование: Октябрь 19, 2019, 11:07 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #25 : Октябрь 19, 2019, 17:19 »

Можно) Интересно было бы сравнить)
А можете выложить последовательность?
Да, конечно) Но позже..)

Прикрепляю для сравнения реальные данные. На них сеть просто идеально отработала)
Код
C++ (Qt)
observed value = 1 p(1) = 0.921875  p(0) = 0.078125
observed value = 1 p(1) = 0.921875  p(0) = 0.078125
observed value = 1 p(1) = 0.921875  p(0) = 0.078125
observed value = 1 p(1) = 0.921875  p(0) = 0.078125
observed value = 1 p(1) = 0.921875  p(0) = 0.078125
observed value = 1 p(1) = 0.921875  p(0) = 0.078125
observed value = 1 p(1) = 0.921875  p(0) = 0.078125
observed value = 1 p(1) = 0.921875  p(0) = 0.078125
observed value = 1 p(1) = 0.921875  p(0) = 0.078125
observed value = 1 p(1) = 0.921875  p(0) = 0.078125
observed value = 0 p(1) = 0.921875  p(0) = 0.078125
observed value = 0 p(1) = 0  p(0) = 1
observed value = 0 p(1) = 0  p(0) = 1
observed value = 0 p(1) = 0  p(0) = 1
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 0 p(1) = 0.0448878  p(0) = 0.955112
observed value = 1 p(1) = 0.0448878  p(0) = 0.955112
observed value = 1 p(1) = 0.944444  p(0) = 0.0555556
observed value = 1 p(1) = 0.941176  p(0) = 0.0588235
observed value = 1 p(1) = 1  p(0) = 0
observed value = 1 p(1) = 0.921875  p(0) = 0.078125
 

Файлик с данными в аттаче)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #26 : Октябрь 19, 2019, 21:12 »

Поигрался с tiny_dnn, на тестовой последовательности (sin(i) + cos(4*i) >= 0) вот такой результат:
Код:
Generate source...
Prepare datas...
Training...
epoch = 100/1000
epoch = 200/1000
epoch = 300/1000
epoch = 400/1000
epoch = 500/1000
epoch = 600/1000
epoch = 700/1000
epoch = 800/1000
epoch = 900/1000
epoch = 1000/1000
Checking...
i = 500 observed = 0 predicted0 = 0.982339 predicted1 = 0.0130699
i = 501 observed = 0 predicted0 = 0.463006 predicted1 = 0.54449
i = 502 observed = 0 predicted0 = 0.964694 predicted1 = 0.0568292
i = 503 observed = 1 predicted0 = -0.0217657 predicted1 = 1.01777
i = 504 observed = 1 predicted0 = -0.0199576 predicted1 = 1.02494
i = 505 observed = 0 predicted0 = 1.00691 predicted1 = -0.0121645
i = 506 observed = 1 predicted0 = -0.0239787 predicted1 = 1.02294
i = 507 observed = 0 predicted0 = 0.962106 predicted1 = 0.0530213
i = 508 observed = 0 predicted0 = 0.972935 predicted1 = 0.0304997
i = 509 observed = 1 predicted0 = -0.020028 predicted1 = 1.04145
i = 510 observed = 1 predicted0 = 0.104954 predicted1 = 0.902725
i = 511 observed = 1 predicted0 = -0.0344391 predicted1 = 1.03813
i = 512 observed = 1 predicted0 = -0.0232968 predicted1 = 1.02557
i = 513 observed = 0 predicted0 = 0.977863 predicted1 = 0.0280755
i = 514 observed = 0 predicted0 = 0.965899 predicted1 = 0.0414848
i = 515 observed = 1 predicted0 = 0.0409188 predicted1 = 0.977059
i = 516 observed = 0 predicted0 = 0.987053 predicted1 = 0.0240999
i = 517 observed = 1 predicted0 = -0.0230293 predicted1 = 1.02866
i = 518 observed = 1 predicted0 = -0.0182573 predicted1 = 1.02402
i = 519 observed = 0 predicted0 = 0.988447 predicted1 = 0.0201739
i = 520 observed = 0 predicted0 = 0.979333 predicted1 = 0.0346248
i = 521 observed = 0 predicted0 = 0.982198 predicted1 = 0.0327407
i = 522 observed = 1 predicted0 = 0.488875 predicted1 = 0.523117
i = 523 observed = 1 predicted0 = -0.0182998 predicted1 = 1.02597
i = 524 observed = 0 predicted0 = 0.996294 predicted1 = 0.00668677
i = 525 observed = 0 predicted0 = 0.524088 predicted1 = 0.479666
i = 526 observed = 0 predicted0 = 0.976493 predicted1 = 0.029696
i = 527 observed = 0 predicted0 = 0.981843 predicted1 = 0.0314973
i = 528 observed = 1 predicted0 = -0.0170248 predicted1 = 1.02021
i = 529 observed = 1 predicted0 = 0.000147805 predicted1 = 0.991886
i = 530 observed = 0 predicted0 = 0.495998 predicted1 = 0.501123
i = 531 observed = 1 predicted0 = 0.463006 predicted1 = 0.54449
i = 532 observed = 0 predicted0 = 0.965241 predicted1 = 0.0396554
i = 533 observed = 0 predicted0 = 0.974981 predicted1 = 0.0321968
i = 534 observed = 1 predicted0 = -0.0154935 predicted1 = 1.01879
i = 535 observed = 0 predicted0 = 0.104954 predicted1 = 0.902725
i = 536 observed = 1 predicted0 = -0.0244336 predicted1 = 1.04083
i = 537 observed = 1 predicted0 = -0.0257705 predicted1 = 1.03416
i = 538 observed = 0 predicted0 = 0.989959 predicted1 = 0.00164001
i = 539 observed = 0 predicted0 = 0.948124 predicted1 = 0.0420177
i = 540 observed = 0 predicted0 = 0.97792 predicted1 = 0.0555568
i = 541 observed = 0 predicted0 = 0.488875 predicted1 = 0.523117
i = 542 observed = 1 predicted0 = -0.0205053 predicted1 = 1.02438
i = 543 observed = 1 predicted0 = 0.645398 predicted1 = 0.362072
i = 544 observed = 0 predicted0 = 0.982339 predicted1 = 0.0130699
i = 545 observed = 0 predicted0 = 0.463006 predicted1 = 0.54449
i = 546 observed = 0 predicted0 = 0.964694 predicted1 = 0.0568292
i = 547 observed = 1 predicted0 = -0.0217657 predicted1 = 1.01777
i = 548 observed = 1 predicted0 = -0.0199576 predicted1 = 1.02494
i = 549 observed = 0 predicted0 = 1.00691 predicted1 = -0.0121645

Завтра попробую данные из файла.

Нужно будет поиграться с размером запроса.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #27 : Октябрь 19, 2019, 21:22 »

Нужно будет поиграться с размером запроса.
Увеличил запрос с 10 до 20 значений и сразу 100% точность.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #28 : Октябрь 19, 2019, 21:28 »

Цитировать
Поигрался с tiny_dnn, на тестовой последовательности (sin(i) + cos(4*i) >= 0) вот такой результат:
Спасибо) Такое ощущение, что хуже..

На самом деле есть реальная функция, зашумлённая на мелком масштабе, а на больших масштабах уже можно увидеть некоторые корреляции. Я блурю этуфункцию, беру производную (числено) и перевожу в бинарный вид: всё что больше 0 = 1, а всё что меньше = 0.
В прикреплённом файле функция слишком сильно разблурена и корреляции проявляются на большом масштабе >> period. Таким образом, последние результаты, приведённые мной не показательны (

Сижу разбираюсь ещё..)  


  
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #29 : Октябрь 19, 2019, 21:35 »

Нужно будет поиграться с размером запроса.
Увеличил запрос с 10 до 20 значений и сразу 100% точность.
Круто) У меня 95% совпадений максимум получается) Но обучение практически мгновенно)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Страниц: 1 [2] 3 4 5   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.147 секунд. Запросов: 22.