Программа совместной фильтрации: что делать для оценки Пирсона, когда данных недостаточно - PullRequest
6 голосов
/ 18 декабря 2009

Я создаю механизм рекомендаций с использованием совместной фильтрации. Для оценки сходства я использую корреляцию Пирсона. Это здорово в большинстве случаев, но иногда у меня есть пользователи, которые имеют только 1 или 2 поля. Например:

User 1{
a: 4
b: 2
}

User 2{
a: 4
b: 3
}

Поскольку это только 2 точки данных, корреляция Пирсона всегда будет равна 1 (прямая или идеальная корреляция). Это, очевидно, не то, что я хочу, поэтому какое значение я должен использовать вместо этого? Я мог бы просто выбросить все экземпляры, подобные этому (дать корреляцию 0), но мои данные сейчас очень скудны, и я не хочу ничего терять. Могу ли я использовать какой-либо показатель сходства, который бы соответствовал остальным моим показателям сходства (все по Пирсону)?

Ответы [ 4 ]

5 голосов
/ 08 марта 2010

Возможно, вы захотите использовать косинусное сходство, а не корреляцию Пирсона. Он не страдает от этой проблемы и широко используется в литературе по системам рекомендаций.

Каноническое решение этого, описанное Herlocker et al. в «Эмпирическом анализе вариантов проектирования в алгоритмах совместной фильтрации на основе соседства» - «ослабить» корреляцию Пирсона, чтобы скорректировать слишком высокую корреляцию между пользователями с небольшими наборами совместного рейтинга. По сути, вы умножаете корреляцию Пирсона на меньшее из 1 и cc / 50, где cc - количество элементов, которые оценили оба пользователя. Эффект состоит в том, что, если у них есть по крайней мере 50 общих элементов, сходство - сырой Пирсон; в противном случае он масштабируется линейно с количеством общих предметов, которые они имеют. Оказывается, что ложная корреляция 1 в подобие 0,02.

50, возможно, потребуется адаптировать в зависимости от вашего домена и системы.

Вы также можете использовать косинусное сходство, которое таким же образом не страдает от этого ограничения. Однако для CF пользователя-пользователя корреляция Пирсона обычно предпочтительна.

Обновление: В более поздней работе мы обнаружили, что сходство косинусов преждевременно отклонено для пользовательского CF. Сходство по косинусу, когда выполняется на нормализованных данных (вычтите среднее значение пользователя из каждого рейтинга до вычисления сходства по косинусу - результат очень похож на корреляцию Парсона, за исключением того, что он имеет встроенный самозатухающий термин), превосходит Пирсона в «стандартная» среда. Конечно, если это возможно, вам следует провести некоторое тестирование ваших собственных данных и среды, чтобы увидеть, что работает лучше всего. Бумага здесь: http://grouplens.org/node/479

Отказ от ответственности: я студент в лаборатории, которая произвела вышеупомянутую газету Херлокера.

1 голос
/ 09 мая 2010

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

Сходство меры косинуса - действительно хорошая альтернатива. Однако, если вы «центрируете» данные (смещение означает 0) перед вычислением, и есть причины, по которым вы должны это делать, тогда они сводятся к корреляции Пирсона. Таким образом, вы сталкиваетесь с похожими проблемами, иначе у вас будет другой набор проблем, чем не центрирование.

Рассмотрим евклидову метрику подобия, основанную на расстоянии & mdash; Сходство обратно связано с расстоянием, где пользовательские рейтинги рассматриваются как точки в пространстве. У него нет этой проблемы разреженности, хотя его необходимо нормализовать для измерения, чтобы не отдавать предпочтение пользователям, которые совместно оценивают многие элементы и поэтому пока их расстояние увеличивается по многим измерениям.

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

Есть еще соображения, которые могут не иметь этой проблемы: корреляция Спирмена, расстояние Танимото (на основе коэффициента Жакара).

Где вы можете узнать больше и получить реализацию? Вуаля, Апач Махоут

0 голосов
/ 15 августа 2011

Спасибо за советы, как всегда, Шон! Я согласен с тем, что LogLikelihood - это лучший показатель по умолчанию, с которого можно начинать, потому что он может работать с двоичными и недвоичными наборами оценок и возвращает оценки сходства между (0,1).

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

0 голосов
/ 02 января 2010

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

...