Russian Qt Forum
Ноябрь 22, 2024, 13:36
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Алгоритмы
>
К проблеме предсказания событий
Страниц: [
1
]
2
3
...
5
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: К проблеме предсказания событий (Прочитано 33724 раз)
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
К проблеме предсказания событий
«
:
Октябрь 17, 2019, 17:12 »
Приветствую)
Задача формулируется следующим образом:
У нас есть функция, которая на каждом шаге возвращает только одно из двух значений: либо 0 либо 1.
Мы не знаем как она устроена внутри, но предполагаем, что какая то корреляция относительно её значений существует. Более того, у нас есть достаточно большой массив её значений в прошлом. Что даёт возможность "обучить" алгоритм находить эти корреляции (какие-нибудь свойственные для неё закономерности).
И так, мы хотим, взяв N её последних значений, предсказать какие следующие n значений она выдаст. Т.е. всего может быть 2^n различных последовательностей и для каждой хотелось бы сопоставить свою вероятность.
Есть идеи как это лучше сделать?
Я заранее ответа не знаю
(есть только абстрактные, почти философские соображения
)
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: К проблеме предсказания событий
«
Ответ #1 :
Октябрь 17, 2019, 18:51 »
Можно попробовать обучить нейросеть.
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: К проблеме предсказания событий
«
Ответ #2 :
Октябрь 17, 2019, 19:13 »
Цитата: Old от Октябрь 17, 2019, 18:51
Можно попробовать обучить нейросеть.
Да, здесь нейросетью попахивает)
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: К проблеме предсказания событий
«
Ответ #3 :
Октябрь 17, 2019, 19:17 »
Но закономерности должны быть иначе пустая трата времени.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: К проблеме предсказания событий
«
Ответ #4 :
Октябрь 18, 2019, 06:09 »
Был похожий случай. Есть пр-во заполненное какой-то ф-цией, но очень "жиденько". Ну и при трассировке луча "львиная доля" расчетов уходит на "пустоты" как вода в песок. А от самой ф-ции тоже добиться ничего не удается. Ну я перешел к параметру "плотность", для него построил гистограмму и вычислял минимальный шаг по лучу на основании текущей плотности. Какой-то эффект был - но это все что я помню спустя много лет
Записан
ssoft
Программист
Offline
Сообщений: 584
Re: К проблеме предсказания событий
«
Ответ #5 :
Октябрь 18, 2019, 08:41 »
Если нет никаких предположений о виде функции, то можно грубо оценить вероятность возвращения функцией 0 или 1 по её статистическим значениям.
Например, как отношения P
0
=N
0
/N и P
1
=N
1
/N. Тогда вероятности получения последовательности n следующих значений получится как
P=P
0
n0
P
1
n1
, где n0 и n1 - ожидаемое количество получения 0 и 1.
То есть нет необходимости оценивать все 2
n
вариантов, так как, например, 00110 01010 01100 10001 и т.п. равновероятны.
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: К проблеме предсказания событий
«
Ответ #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
Сообщений: 584
Re: К проблеме предсказания событий
«
Ответ #7 :
Октябрь 18, 2019, 11:18 »
Цитата: m_ax от Октябрь 18, 2019, 10:53
Идея понятна, но это слишком грубое приближение для которого, например функции вида:
1) 10101010101010...
2) 1111000011110000...
3) белый шум
...
будут неразличимы( Т.е. такая оценка не запоминает важных закономерностей..
Возьмите тогда более сложные комбинации битов, вместо 0 и 1.
Два бита - 00 01 10 11
Три бита - 000 001 ...
...
Восемь бит
...
Посчитайте статистику встречаемости таких комбинаций в последовательности.
Можно графики построить даже и попытаться приблизить к какому-нибудь разложению Фурье.
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: К проблеме предсказания событий
«
Ответ #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
Сообщений: 4350
Re: К проблеме предсказания событий
«
Ответ #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
Сообщений: 2095
Re: К проблеме предсказания событий
«
Ответ #10 :
Октябрь 18, 2019, 12:12 »
Цитировать
Если закономерности есть, то нейросеть будет работать.
Ну с этим я не спорю)
Цитировать
Параметры сети:
Вход - N значений
Выход - 2 значения (0 или 1)
А почему выход только 2 значения? Я бы хотел на несколько шагов вперёд смотреть (в разумных пределах, конечно).. Т.е. 2^n выходов..
Прогноз на один шаг вперёд - один слой? Или как?
«
Последнее редактирование: Октябрь 18, 2019, 12:14 от m_ax
»
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: К проблеме предсказания событий
«
Ответ #11 :
Октябрь 18, 2019, 12:24 »
Цитата: m_ax от Октябрь 18, 2019, 12:12
А почему выход только 2 значения?
Вероятность выпадения для значения 0 и для значения 1.
Можно попробовать обойтись одним и смотреть к чему оно ближе к 0 или 1.
Цитата: m_ax от Октябрь 18, 2019, 12:12
Я бы хотел на несколько шагов вперёд смотреть (в разумных пределах, конечно)..
Я думал вы хотите по текущей последовательности предсказать следующее значение.
Если хотите несколько, то и выходов нужно несколько.
Записан
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: К проблеме предсказания событий
«
Ответ #12 :
Октябрь 18, 2019, 13:11 »
Я бы ради интереса вместо 0 поставил -1 и посмотрел на график "нарастающей суммы" (на каждом шаге (X) прибавляем текущее значение к предыдущей сумме (Y)). Может нейронная сеть хомо сапиенс там сразу какую-нибудь закономерность распознает
. Вдруг там синусоида вообще
.
Записан
Пока сам не сделаешь...
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: К проблеме предсказания событий
«
Ответ #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
Сообщений: 4350
Re: К проблеме предсказания событий
«
Ответ #14 :
Октябрь 18, 2019, 19:30 »
m_ax, ну это не совсем та нейросеть, в традиционном ее представлении.
Записан
Страниц: [
1
]
2
3
...
5
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...