You are here

نرخ همبستگی پیرسون

Error message

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls in book_prev() (line 775 of /home/molavy/public_html/modules/book/book.module).

یک راه کمی پیچیده تر برای تشخیص شباهت بین علایق افراد استفاده از ضریب همبستگی پیرسون است. ضریب همبستگی نشان می دهد چقدر می توان دو مجموعه از داده ها را روی یک خط راست تنظیم کرد. این فرمول کمی پیچیده تر از نرخ فاصله اقلیدسی است، اما نتایج بهتری را در شرایطی که داده ها به صورت کامل نرمال شده نیستند بر می گرداند -- برای مثال، اگر امتیاز هایی که به فیلم ها توسط منتقدین داده باشند از حالت معمول نا منظم تر باشند.

این نمایش این متد، شما می توانید امتیازهای دو منتقد به فیلم ها را روی چارت رسم کنید، همانطور که در تصویر ۲-۲ نشان داده شده است . Superman توسط Mick Lasalle امتیاز ۳ گرفته است و همین فیلم توسط Gene Seymour امتیاز ۵ را دریافت کرده است. بنابراین روی چارت در مکان (۳،۵) قرار دارد.

تصویر ۲-۲ مقایسه امتیاز های دو منتقد به فیلم ها رو چارت

شما همچنین می توانید خط مستقیمی را روی چارت ببینید. این خط به نام «بهترین تناسب» شناخته می شود.دلیل این نام گذاری این است که این خط سعی می کند به تمام به تمام آیتم های روی چارت تا حد امکان نزدیک شود. اگر دو منتقد برای تمام فیلم ها رای های یکسانی داشته باشند، این خط به صورت قطری در می آیند و روی تمام آیتم ها می افتاد و بهترین ضریب همبستگی یعنی ۱ را به ما بر می گرداند. در مورد توضیح داده شده، منتقدان بر سر امتیاز چند فیلم توافق ندارند، بنابراین ضریب همبستگی حدود ۰.۴ است. در تصویر ۳-۲ مثالی آمده از یک ضریب همبستگی بالاتر آمده است

تصویر ۲-۳ دو منتقد با ضریب همستگی بالاتر.

یک جنبه جالب در استفاده از روش پیرسون، این است که در تصویر می بینید اصلاح مشکل درجه تورم است. در این تصویر Jack Matthews تمایل به دادن نمره های بالاتر از Lisa Rose دارد. اما در خط هنوز تناسب دیده می شود، زیرا آنها ترجیهات نسبتا شبیه به هم دارند. اگر یک منتقد مایل به دادن رای های بالاتر به بقیه داشته باشد، هنوز می توان یک ضریب همبستگی مناسب داشت اگر تفاوت در تمامی امتیازهای آنها یک مقدار ثابت باشد.در فاصله اقلیدسی که قبلا شرح داده شد شما می بینید که دو منتقد شبیه به هم نیستند به دلیل اینکه یکی سخت گیر تر از دیگری است، حتی اگر سلایق شبیه به هم باشند.وابسته به برنامه ممکن است این رفتار مورد نظر شما باشد یا نباشد.

کد برای نرخ همبستگی پیرسون تمامی رای هایی که توسط دو منتقد داده شده است را میابد. سپس مجموع امتیازات محصولات را محاسبه می کند.. در انتها از نتایج برای محاسبه ضریب همبستگی پیرسون استفاده می کند، در زیر به صورت پر رنگ نشان داده شده است. برخلاف اندازه گیری فاصله به صورت معمولی، این فرمول خیلی بصری نیست، اما این فرمول به شما می گوید چقدر مقدار ها به ازای محصولات مختلف با هم تغییر می کنند.

برا استفاده از این فرمول، یک تابع جدید در recommendations.py مشابه تابع sim_distance بسازید:

 def sim_pearson(prefs,p1,p2):
  # Get the list of mutually rated items
  si={}
  for item in prefs[p1]: 
    if item in prefs[p2]: si[item]=1

  # if they are no ratings in common, return 0
  if len(si)==0: return 0

  # Sum calculations
  n=len(si)
  
  # Sums of all the preferences
  sum1=sum([prefs[p1][it] for it in si])
  sum2=sum([prefs[p2][it] for it in si])
  
  # Sums of the squares
  sum1Sq=sum([pow(prefs[p1][it],2) for it in si])
  sum2Sq=sum([pow(prefs[p2][it],2) for it in si])	
  
  # Sum of the products
  pSum=sum([prefs[p1][it]*prefs[p2][it] for it in si])
  
  # Calculate r (Pearson score)
  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 

این تابع یک مقدار بین -۱ و ۱ بر می گرداند. مقدار ۱ به معنی این است که دو فرد رای های یکسانی به یک آیتم داشته اند. برخلاف محاسبه فاصله معمولی، شما نیاز به تغییر این مقدار برای رسیدن به ابعاد صحیح ندارید. اکنون سعی کنید مقدار نرخ پیرسون در تصویر ۳-۲ را محاسبه کنید.

 >>> reload(recommendations)

>>> print recommendations.sim_pearson(recommendations.critics,

... 'Lisa Rose','Gene Seymour')

0.396059017191

Add new comment

انیمیشن پیام راشل کوری