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

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

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

Сообщений: 2095



Просмотр профиля
« : Октябрь 17, 2019, 17:12 »

Приветствую)

Задача формулируется следующим образом:
У нас есть функция, которая на каждом шаге возвращает только одно из двух значений: либо 0 либо 1.
Мы не знаем как она устроена внутри, но предполагаем, что какая то корреляция относительно её значений существует. Более того, у нас есть достаточно большой массив её значений  в прошлом. Что даёт возможность "обучить" алгоритм находить эти корреляции (какие-нибудь свойственные для неё закономерности). 

И так, мы хотим, взяв N её последних значений, предсказать какие следующие  n значений она выдаст. Т.е. всего может быть 2^n различных последовательностей и для каждой  хотелось бы сопоставить свою вероятность.

Есть идеи как это лучше сделать?
Я заранее ответа не знаю Улыбающийся (есть только абстрактные, почти философские соображения  Улыбающийся)

     
Записан

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

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

Сообщений: 4350



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

Можно попробовать обучить нейросеть.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



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

Можно попробовать обучить нейросеть.
Да, здесь нейросетью попахивает)
Записан

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

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

Сообщений: 4350



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

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

Сообщений: 11445


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

Был похожий случай. Есть пр-во заполненное какой-то ф-цией, но очень "жиденько". Ну и при трассировке луча "львиная доля" расчетов уходит на "пустоты" как вода в песок. А от самой ф-ции тоже добиться ничего не удается. Ну я перешел к параметру "плотность", для него построил гистограмму и вычислял минимальный шаг по лучу на основании текущей плотности. Какой-то эффект был - но это все что я помню спустя много лет  Улыбающийся
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 584


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

Если нет никаких предположений о виде функции, то можно грубо оценить вероятность возвращения функцией 0 или 1 по её статистическим значениям.
Например, как отношения P0=N0/N и P1=N1/N. Тогда вероятности получения последовательности n следующих значений получится как

P=P0n0P1n1, где n0 и n1 - ожидаемое количество получения 0 и 1.

То есть нет необходимости оценивать все 2n вариантов, так как, например, 00110 01010 01100 10001 и т.п. равновероятны.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



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

Цитировать
Но закономерности должны быть иначе пустая трата времени.
Да, разумеется) Но даже случай с белым шумом мы в принципе можем распознать. Т.е. мы запускаем ботов: первая группа использует "обученный" алгоритм и предсказывает поведение функции на основе его прогнозов, и контрольный бот, который просто кидает монетку. В случае с белым шумом все боты окажутся неразличимы статистически.

Цитировать
Если нет никаких предположений о виде функции, то можно грубо оценить вероятность возвращения функцией 0 или 1 по её статистическим значениям.
Например, как отношения P0=N0/N и P1=N1/N. Тогда вероятности получения последовательности n следующих значений получится как

P=P0n0P1n1, где n0 и n1 - ожидаемое количество получения 0 и 1.
Идея понятна, но это слишком грубое приближение для которого, например функции вида:
1) 10101010101010...
2) 1111000011110000...
3) белый шум
...
будут неразличимы( Т.е. такая оценка не запоминает важных закономерностей..
Записан

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

Arch Linux Plasma 5
ssoft
Программист
*****
Offline Offline

Сообщений: 584


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

Идея понятна, но это слишком грубое приближение для которого, например функции вида:
1) 10101010101010...
2) 1111000011110000...
3) белый шум
...
будут неразличимы( Т.е. такая оценка не запоминает важных закономерностей..

Возьмите тогда более сложные комбинации битов, вместо 0 и 1.

Два бита - 00 01 10 11
Три бита - 000 001 ...
...
Восемь бит
...

Посчитайте статистику встречаемости таких комбинаций в последовательности.

Можно графики построить даже и попытаться приблизить к какому-нибудь разложению Фурье.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



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

Цитировать
Возьмите тогда более сложные комбинации битов, вместо 0 и 1.

Два бита - 00 01 10 11
Три бита - 000 001 ...
...
Восемь бит
...

Посчитайте статистику встречаемости таких комбинаций в последовательности.
Да, это уже лучше) Однако это опять даст мне только наиболее часто встречающиеся последовательности, но информация о том, какая последовательность в среднем встречается после другой будет потеряна( Т.е. я хочу следующее: я беру N предыдущих значений функции (скажем N = 10) (которые мне известны) и на основе "нейросети" получить наиболее вероятную группу последующих n значений (скажем, n = 3). Размер обучающей выборки у нас значительно больший >> N, n.

Я, по возможности, вечером постараюсь свои соображения на этот счёт привети.. Но они пока такие, сырые ещё..  
« Последнее редактирование: Октябрь 18, 2019, 11:37 от m_ax » Записан

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

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

Сообщений: 4350



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

Если закономерности есть, то нейросеть будет работать.

Пусть есть исходные данные - последовательность от 0..M

Параметры сети:
Вход - N значений
Выход - 2 значения (0 или 1)

Обучение:
Выбираем случайное значение X в последовательности (N+1)..M - правильный ответ.
N значений до X подаем на вход.
В зависимости от X устанавливаем значение выхода (если X=0 - то выход 1/0, если X=1 - то выход 0/1)

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

Получение результата:
На вход N значений - на выходе вероятности 0 или 1.

Можно попробовать использовать 1 выход - и смотреть к чему ближе будет результат, к 0 или 1.
« Последнее редактирование: Октябрь 18, 2019, 12:04 от Old » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



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

Цитировать
Если закономерности есть, то нейросеть будет работать.
Ну с этим я не спорю)

Цитировать
Параметры сети:
Вход - N значений
Выход - 2 значения (0 или 1)
А почему выход только 2 значения? Я бы хотел на несколько шагов  вперёд смотреть (в разумных пределах, конечно).. Т.е. 2^n выходов..
Прогноз на один шаг вперёд - один слой? Или как?
« Последнее редактирование: Октябрь 18, 2019, 12:14 от m_ax » Записан

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

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

Сообщений: 4350



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

А почему выход только 2 значения?
Вероятность выпадения для значения 0 и для значения 1. Улыбающийся
Можно попробовать обойтись одним и смотреть к чему оно ближе к 0 или 1.

Я бы хотел на несколько шагов  вперёд смотреть (в разумных пределах, конечно)..
Я думал вы хотите по текущей последовательности предсказать следующее значение.
Если хотите несколько, то и выходов нужно несколько.  Улыбающийся
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



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

Я бы ради интереса вместо 0 поставил -1 и посмотрел на график "нарастающей суммы" (на каждом шаге (X) прибавляем текущее значение к предыдущей сумме (Y)). Может нейронная сеть хомо сапиенс там сразу какую-нибудь закономерность распознает Улыбающийся. Вдруг там синусоида вообще Улыбающийся.
Записан

Пока сам не сделаешь...
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



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

Цитировать
Я бы ради интереса вместо 0 поставил -1 и посмотрел на график "нарастающей суммы"
Ну качественно замена 0 на -1 ничего не изменит, главное, что функция возвращает только два значения..

Цитировать
Может нейронная сеть хомо сапиенс там сразу какую-нибудь закономерность распознает  Улыбающийся
Нееет, хомо сапиенс отпадает, поскольку подвержен различным когнитивным ошибкам (я уж не говорю про его склонность ко всякому роду мракобесия  Улыбающийся)
И потом, сегодня зависимость одна, завтра другая.. нафиг-нафиг Улыбающийся

Цитировать
Если хотите несколько, то и выходов нужно несколько.   Улыбающийся
В принципе да, можно сделать и два выхода. А потом, на основе этого смоделировать стат. ансамбль на n шагов вперёд.
Поэтому разумно остановиться пока на таком варианте: Мы знаем N предыдущих значений: нужно получить вероятность для 1 и 0 на следующем шаге.

Мои мысли по архитектуре такой "сети" (для наглядности, пусть N=4):
1) Сеть формируется при обучении.
2) Сеть состоит из списка групп. Каждая группа представляет из себя некий объект у которого есть два счётчика: один указывает на число исходов 1, а ругой на исходов 0.
Группа создаётся и инициируется последовательностью из N значений и в последующем может определять входит ли другая последовательность из N в данную (в качестве критерия логично использовать Manhetten lenght) Например, мы говорим, что последовательность a и b принадлежат одной группе если их manhetten lenght <= m (пусть m = 2).

Пример обучения такой сети. Обучающая последовательность:
111001101101110...
Вначале список групп пуст, мы стартуем с нулевой позиции. Создаём первую группу в списке и инициализируем её последовательностью 1110. При этом счётчик исхода_0 = 1.
Перемещаемся на шаг вперёд, теперь наша последовательность = 1100, а исход 1. Смотрим, входит ли такая последовательность в уже существующую группу? Входит: 1110 - 1100 = 1 < 2. В результате у нас по прежнему одна группа в сиске, но оба счётчика равны 1.  И так далее..

После обучения, мы скармливаем сети последовательность x, для которой хотим предсказать вероятности для 1 и 0. Ищем в списке к какой группе принадлежит последовательность x и смотрим на значения счётчиков: наиболее вероятный исход будет соответствовать наибольшему значению счётчика.

Вот вся логика  Улыбающийся
Осталось реализовать и проверить  Улыбающийся  
« Последнее редактирование: Октябрь 18, 2019, 18:35 от m_ax » Записан

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

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

Сообщений: 4350



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

m_ax, ну это не совсем та нейросеть, в традиционном ее представлении. Улыбающийся
Записан
Страниц: [1] 2 3 ... 5   Вверх
  Печать  
 
Перейти в:  


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