Существует ли контролируемый алгоритм обучения, который принимает теги в качестве входных данных и выдает вероятность в качестве выходных данных? - PullRequest
5 голосов
/ 28 апреля 2011

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

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

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

Предположим, что с любым заданным вопросом будет связано до 7 тегов, которые взяты из надмножества десятков тысяч.

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

Так, например, может случиться так, что слово «java» увеличивает вероятность моего повышения, за исключением случаев, когда оно присутствует с «базой данных», однако «база данных» может увеличить вероятность моего повышения, если присутствует с «ruby».

О, и это должно быть разумно с точки зрения вычислений (обучение в течение часа или двух по миллионам вопросов).

Какие подходы я должен исследовать здесь?

Ответы [ 2 ]

4 голосов
/ 28 апреля 2011

Учитывая, что в сообщении, вероятно, не так много тегов, вы можете просто создать теги "n-грамм" и применить наивный байесовский метод.Деревья регрессии также производят эмпирическую вероятность в конечных узлах, используя +1 для повышения и 0 для отсутствия.См. http://www.stat.cmu.edu/~cshalizi/350-2006/lecture-10.pdf для некоторых читаемых заметок лекции и http://sites.google.com/site/rtranking/ для реализации с открытым исходным кодом.

1 голос
/ 28 апреля 2011

Вы можете попробовать несколько методов (линейная регрессия, SMV, нейронные сети). Входной вектор должен состоять из всех возможных тегов, где каждый тег представляет одно измерение.

Затем каждая запись в обучающем наборе должна быть преобразована во входной вектор в соответствии с тегами. Например, предположим, у вас есть разные комбинации из 4 тегов в вашем обучающем наборе (php, ruby, ms, sql), и вы определяете невзвешенный входной вектор [php, ruby, ms, sql]. Допустим, у вас есть следующие 3 записи, которые преобразуются во взвешенные входные векторы:

php, sql -> [1, 0, 0, 1]

ruby ​​-> [0, 1, 0, 0]

мс, sql -> [0, 0, 1, 1]

Если вы используете линейную регрессию, вы используете следующую формулу

y = k * X

где y представляет ответ (повышающий / понижающий) в вашем случае и вставляя известные значения (X - взвешенные входные векторы).

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

...