Использование генетического программирования для оценки вероятности

Я хотел бы использовать генетическую программу (gp) для оценки вероятности «результата» от «события». Для обучения nn я использую генетический алгоритм.

Итак, в моей базе данных есть много событий, каждое из которых содержит множество возможных исходов.

Я дам GP набор входных переменных, которые относятся к каждому результату в каждом событии.

У меня вопрос - какая должна быть фитнес-функция в гп ????

Например, прямо сейчас я даю GP набор входных данных (входные переменные результата) и набор целевых данных (1, если результат ДЕЙСТВИТЕЛЬНО происходит, 0, если результат НЕ возникает, при этом функция пригодности является среднеквадратическим погрешность выходов и целей). Затем я беру сумму каждого результата для каждого результата и делю каждый результат на сумму (чтобы получить вероятность). Однако я точно знаю, что это неправильный способ.

Для ясности, вот как я В НАСТОЯЩЕЕ ВРЕМЯ это делаю:

Я хотел бы оценить вероятность 5 различных исходов события:

Outcome 1 - inputs = [0.1, 0.2, 0.1, 0.4] 
Outcome 1 - inputs = [0.1, 0.3, 0.1, 0.3] 
Outcome 1 - inputs = [0.5, 0.6, 0.2, 0.1] 
Outcome 1 - inputs = [0.9, 0.2, 0.1, 0.3] 
Outcome 1 - inputs = [0.9, 0.2, 0.9, 0.2] 

Затем я рассчитаю выход GP для каждого входа:

Outcome 1 - output = 0.1 
Outcome 1 - output = 0.7 
Outcome 1 - output = 0.2 
Outcome 1 - output = 0.4 
Outcome 1 - output = 0.4

Сумма выходов для каждого результата в этом событии будет: 1,80. Затем я бы рассчитал «вероятность» каждого результата, разделив результат на сумму:

Outcome 1 - p = 0.055 
Outcome 1 - p = 0.388 
Outcome 1 - p = 0.111 
Outcome 1 - p = 0.222 
Outcome 1 - p = 0.222 

Прежде чем вы начнете - я знаю, что это ненастоящие вероятности, и что этот подход не работает !! Я просто поместил это здесь, чтобы помочь вам понять, чего я пытаюсь достичь.

Может ли кто-нибудь дать мне несколько советов о том, как я могу оценить вероятность каждого исхода? (также обратите внимание, что моя математика не очень хороша)

Большое спасибо


person Sherlock    schedule 22.10.2012    source источник
comment
Я не понимаю проблему, которую вы описываете. Как именно выглядит ваш набор данных? Как это было создано? Что именно вы пытаетесь оценить?   -  person ziggystar    schedule 22.10.2012
comment
Я пытаюсь оценить вероятность возникновения исхода в событии. Событие может быть чем угодно (например, гонка), а результатом может быть что угодно (например, бегун). Входными данными в GP будут переменные, относящиеся к каждому бегуну, и я пытаюсь оценить вероятность того, что каждый бегун выиграет гонку.   -  person Sherlock    schedule 22.10.2012
comment
Итак, ваш Event не является Event в вероятностном смысле, а является событием в общий смысл происходящего? Это очень сбивает с толку. Итак, вы пытаетесь оценить условную вероятность определенного исхода с учетом события?   -  person ziggystar    schedule 22.10.2012
comment
Да вы правы. Приношу свои извинения за использование терминологии - как я уже сказал, моя математика совсем не хороша.   -  person Sherlock    schedule 22.10.2012
comment
Вам следует изучить машинное обучение. Однако будьте осторожны: это огромная тема. Также работайте над формализацией вашей проблемы. Вы заметите, что это очень распространенная и общая проблема, и существует множество различных подходов к ее решению.   -  person ziggystar    schedule 22.10.2012


Ответы (2)


Я понимаю первую часть вашего вопроса: то, что вы описали, является проблемой классификации. Вы изучаете, связаны ли ваши вводные данные с тем, был ли достигнут результат (1) или нет (0).

Хотя со второй частью есть сложности. Если я вас правильно понимаю, вы берете необработанный вывод GP для определенной строки входов (например, 0,7) и рассматриваете его как вероятность. Вы сказали, что это явно не работает. В GP вы можете выполнять классификацию, вводя пороговое значение, которое разделяет ваши классы. Если он больше, чем, скажем, 0,3, результат должен быть 1, если меньше - 0. Этот порог не обязательно 0,5 (опять же, это просто число, а не вероятность).

Я думаю, что если вы хотите получить вероятность, вам следует попытаться изучить несколько моделей, которые хорошо объясняют вашу проблему классификации. Я не ожидаю, что у вас есть идеальная модель, которая прекрасно объясняет ваши данные, соответственно, если у вас есть вероятность, вам все равно не нужна вероятность. Вы можете собрать эти модели вместе (создать ансамбль), и для каждого результата вы можете наблюдать, сколько моделей предсказало 1, а сколько моделей предсказало 0. Количество моделей, которые предсказали 1, деленное на количество моделей, затем можно интерпретировать как вероятность что этот исход будет наблюдаться. Если все модели одинаково хороши, вы можете забыть о взвешивании между ними, если они различаются по качеству, конечно, вы можете учесть это в своем решении. Модели с меньшим качеством в их обучающем наборе с меньшей вероятностью будут способствовать хорошей оценке.

Таким образом, вы должны попытаться применить GP, например. 10 раз, а затем используйте все 10 моделей в обучающем наборе, чтобы вычислить их оценку (0 или 1). Однако не стоит навязывать себя только терапевту, существует множество алгоритмов классификации, которые могут дать хорошие результаты.

Кстати, я являюсь частью группы разработчиков программного обеспечения под названием HeuristicLab, которое работает под Windows и с которым вы может запускать ГП и создавать такие ансамбли. Программное обеспечение с открытым исходным кодом.

person Andreas    schedule 31.10.2012

ИИ - это сложные алгоритмы. Подумайте об этом, обратная сторона очень часто заключается в том, что эти алгоритмы становятся черными ящиками. Таким образом, обратная сторона алгоритмов, таких как NN и GA, заключается в том, что они по своей сути непрозрачны. Это то, что вам нужно, если вы хотите, чтобы машина вела себя сама. С другой стороны, это означает, что вам нужны инструменты, чтобы заглянуть в черный ящик.

Я говорю о том, что GA, вероятно, не то, что вы хотите решить для своей проблемы. Если вы хотите решить проблемы типа AI, вы сначала должны знать, как использовать стандартные методы, такие как регрессия, LDA и т. Д.

Итак, объединение NN и GA - обычно плохой знак, потому что вы кладете один черный ящик на другой. Я считаю, что это плохой дизайн. NN и GA - это не что иное, как нелинейные оптимизаторы. Я бы посоветовал вам сначала взглянуть на анализ главных компонентов (КПК), SVD и линейные классификаторы (см. Википедию). Если вы решите простые статистические задачи, переходите к более сложным. Ознакомьтесь с замечательным учебником Рассела / Норвига, прочтите их исходный код.

Чтобы ответить на вопросы, действительно нужно внимательно изучить набор данных. Если вы работаете над небольшой проблемой, определите вероятности и т. Д., И вы можете получить здесь ответ. Возможно, посмотрите и байесовскую статистику. Я верю, что это поможет вам начать.

person RParadox    schedule 31.10.2012
comment
Не знаю, откуда вы взяли, что GA непрозрачны. NN непрозрачны, GA - действенный и широко используемый метод решения проблемы непрозрачности NN. - person Jeremy List; 09.09.2013