Коэффициент корреляции Пирсона – Отыскание похожих пользователей

Чуть более сложный способ определить степень схожести интересов людей дает коэффициент корреляции Пирсона. Коэффициент корреляции – это мера того, насколько хорошо два набора данных ложатся на прямую. Формула сложнее, чем для вычисления евклидова расстояния, но она дает лучшие результаты, когда данные плохо нормализованы, например если некоторый критик устойчиво выставляет фильмам более низкие оценки, чем в среднем.

Для визуализации этого метода можете нанести на диаграмму оценки, выставленные двумя критиками, как показано на рис. 2.2. Mick LaSalle оценил фильм «Superman» на 3, а Gene Seymour – на 5, поэтому мы наносим точку (3,5).

Рис. 2.2. Сравнение двух кинокритиков на точечной диаграмме

На диаграмме также изображена прямая линия. Она называется линией наилучшего приближения, поскольку проходит настолько близко ко всем точкам на диаграмме, насколько возможно. Если бы оба критика выставили всем фильмам одинаковые оценки, то эта линия оказалась бы диагональной и прошла бы через все точки. В этом случае получилась бы идеальная корреляция с коэффициентом 1. Но в нашем случае критики разошлись в оценках, поэтому коэффициент корреляции равен 0,4. На рис. 2.3 показан пример с гораздо более высоким коэффициентом корреляции 0,75.

У коэффициента корреляции Пирсона есть одно интересное свойство, которое можно наблюдать на рисунке – он корректирует обесценивание

Рис. 2.3. Два критика с высоким коэффициентом корреляции

оценок. Видно, что Jack Matthews систематически выставляет более высокие оценки, чем Lisa Rose, но линия все равно проходит близко к точкам, поскольку их предпочтения схожи. Если один критик склонен выставлять более высокие оценки, чем другой, то идеальная корреляция все равно возможна при условии, что разница в оценках постоянна. Метод евклидова расстояния в этом случае выдал бы результат, что критики не похожи, поскольку один всегда оказывается строже другого, несмотря на то что их вкусы, по существу, очень сходны. В зависимости от конкретного приложения такое поведение может вас устраивать или нет.

Программа для вычисления коэффициента корреляции Пирсона сначала находит фильмы, оцененные обоими критиками, и вычисляет сумму и сумму квадратов выставленных ими оценок, а также сумму произведений оценок. На последнем этапе найденные значения используются для вычисления коэффициента корреляции; этот код выделен в листинге ниже полужирным шрифтом. В отличие от евклидовой метрики, эта формула интуитивно не так очевидна. Чтобы воспользоваться этой формулой, добавьте в файл recommen- dations.py новую функцию с такой же сигнатурой, как у функции sim_ distance:

# Возвращает коэффициент корреляции Пирсона между p1 и p2 def sim_pearson(prefs,p1,p2): # Получить список предметов, оцененных обоими si={}

for item in prefs[p1]: if item in prefs[p2]: si[item]=1

#    Найти число элементов n=len(si)

#    Если нет ни одной общей оценки, вернуть 0 if n==0: return 0

#    Вычислить сумму всех предпочтений sum1=sum([prefs[p1][it] for it in si]) sum2=sum([prefs[p2][it] for it in si])

#    Вычислить сумму квадратов sum1Sq=sum([pow(prefs[p1][it],2) for it in si]) sum2Sq=sum([pow(prefs[p2][it],2) for it in si])

#    Вычислить сумму произведений

pSum=sum([prefs[p1][it]*prefs[p2][it] for it in si])

#    Вычислить коэффициент Пирсона num=pSum-(sum1*sum2/n)

den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n)) if den==0: return 0

r=num/den

return r

Эта функция возвращает значение от -1 до 1. Значение 1 означает, что два человека выставили каждому предмету в точности одинаковые оценки. В отличие от евклидовой метрики, масштабировать возвращенное значение для приведения к нужному диапазону не требуется. Теперь можете попробовать получить коэффициент корреляции для точек, изображенных на рис. 2.3: >>> reload(recommendations)

>>> print recommendations.sim_pearson(recommendations.critics, … ‘Lisa Rose’,’Gene Seymour’)

0.396059017191

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100