Какой алгоритм обучения вы бы использовали для построения модели того, сколько времени требуется человеку, чтобы решить данную ситуацию в судоку? - PullRequest
1 голос
/ 27 ноября 2009

У меня нет большого опыта в машинном обучении, распознавании образов, интеллектуальном анализе данных и т. Д., А также в теории и системах, лежащих в их основе.

Я хотел бы разработать искусственную модель времени, которое требуется человеку, чтобы сделать ход в заданной головоломке Судоку.

Итак, что я ищу в качестве результата процесса машинного обучения, так это модель, которая может дать прогноз относительно того, сколько времени требуется целевому человеку, чтобы совершить движение в данной ситуации судоку.

Один и тот же вход не всегда соответствует одному и тому же результату. Человеку требуются разные времена, чтобы сделать шаг в одной и той же ситуации, но моя гипотеза состоит в том, что в результирующем распределении вероятностей есть тенденция. (Мое обоснованное предположение, что это ~ нормально.)

У меня есть идеи о факторах, которые влияют на распределение (например, #empty slots), но я бы предпочел, чтобы система выяснила эти шаблоны. Обратите внимание, что мне не интересны шаблоны, только модель.

Я могу легко создавать образцы и данные испытаний, запуская головоломки Судоку и измеряя время, необходимое для выполнения шагов.

Какой алгоритм обучения вы бы предложили использовать для этого?

Я думал о NN, но я не уверен, что они могут иметь желаемое свойство давать взвешенные случайные результаты для одного и того же ввода.

Ответы [ 3 ]

1 голос
/ 28 ноября 2009

Если я правильно понимаю, у вас есть входной вектор длиной 81, который содержит 1, если квадрат заполнен, и 0 в противном случае. Вы хотите изучить функцию, которая возвращает распределение вероятностей, которое моделирует время реакции человека на эту позицию на доске.

Моим первым ответом было бы, что это проблема регрессии, и вы должны попробовать прямую линейную регрессию . Это не обеспечит вас распределением времени отклика, но будет единичным «точным предположением» времени отклика.

Мне не ясно, почему вы хотите смоделировать распределение времени отклика. Однако, если вы действительно хотите вывести дистрибутив, то это выглядит так, как будто вы хотите посмотреть байесовские методы . Я не очень разбираюсь в байесовских умозаключениях, поэтому не могу здесь вам помочь.

Однако я не думаю, что ваш подход сработает, потому что я согласен с вашей интуицией о том, что такие функции, как количество пустых слотов, важны. Есть и другие очевидные особенности, такие как количество пустых слотов в строке / столбце, которые могут быть важными. Явное включение этих функций в ваше представление, вероятно, будет гораздо более успешным, чем ожидание, что алгоритм обучения сам по себе выведет нечто подобное.

0 голосов
/ 30 декабря 2009

Если у вас есть предположения относительно того, что влияет на функцию (количество пустых ячеек и т. Д.), Попробуйте обучить классификатор по вектору признаков , а не по вектору из 81 ячейки (0 / 1 или 0..9, для моего аргумента значения не имеют).

Я думаю, что ваше требование:

нам не нужно было бы знать базовые паттерны, «обученные паттерны» в обучающей системе автоматически кодируют эти иногда довольно тонкие и тонкие паттерны внутри них - это одна из их великих возможностей

неправильно. Вы делаете должны предоставить сети правильный домен. например, при попытке обнаружить объект на изображении работа в пиксельной области бессмысленна. вы получите результаты только в том случае, если сначала запустите обнаружение некоторых объектов, чтобы обнаружить края, углы и т. д. Теоретически, при достаточной нелинейности (в NN - достаточно слоев в сети) он может обнаруживать такие вещи, но на практике я никогда не видел эту работу, не предоставив классификатору нужные функции для работы.

Я думал о NN, но я не уверен, что они могут иметь желаемое свойство давать взвешенные случайные результаты для одного и того же ввода.

Вы просто пытаетесь изучить функцию от 2 ^ 81 или 10 ^ 81 (или намного меньшего пространства признаков, как я предлагаю) до R (время отклика между 0 и Inf) или некоторую дискретизацию этого. Таким образом, NN и другие классификаторы могут сделать это.

0 голосов
/ 27 ноября 2009

Кажется, что метод Монте-Карло будет хорошо работать здесь, но для этого потребуется стек решений размером с Луну.И это не даст вам время на человека, просто время в среднем.

Мое понимание этого, каким бы сомнительным оно ни было, заключается в том, что у вас есть база данных с указанием позиции на доске и времени, которое понадобилось человеку, чтобы сделать следующий шаг.По крайней мере, у вас есть отправная точка для большинства ходов.Даже если его нет в базе данных, вы можете начать рассчитывать, сколько времени потребуется, чтобы сделать ход, основываясь на каком-то алгоритме.Хотя я знаю, что вы указали, что для этого нужно машинное обучение, возможно, стоит разбить проблему на что-то немного меньшее, чем опираться на нее.

...