شما اینجا هستید

پیشنهاد محصول

پیغام خطا

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls در book_prev() (خط 775 در /home/molavy/public_html/modules/book/book.module).

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

اما شاید آن منتقد فیلمی که من ممکن است دوست داشته باشم را ندیده باشد و به آن رای نداده باشد. همچنین ممکن است آن منتقد فیلمی را که بقیه منتقدین با سلایقی شبیه به من به آن رای کم داده باشند خیلی دوست داشته باشد.

برای حل این مشکل، شما نیاز به سیستم امتیاز دهی وزن دار به آیتم ها بر اساس رای های منتقدین دارید. رای ها را از تمام منتقدین جمع می کنیم و آن را ضرب در مقدار شباهت آنها به من بر استفاده از رای که به هر فیلم داده اند می کنیم.جدول ۲-۲ جریان کار را در این روش نشان می دهد.

جدول ۲-۲ – ساخت پیشنهادات برای Toby

این جدول رتبه های همبستگی را برای هر منتقد و رای های آن ها به سه فیلم ( The Night Listener, Lady in Water و My Luck) که من به آنها رای نداده ام نشان می دهد.

ستون های که با S.x شروع شده است شباهت را به ضرب رتبه می دهد، بنابراین یک فرد که شبیه به من است رای اش در امتیاز نهایی نسبت به کسی که کمتر شبیه به من است بیشتر مشارکت داده می شود.ستون مجموع، جمع تمام نمره ها را نشان می دهد.

شما می توانید فقط از مجموع ها برای محاسبه رتبه ها استفاده کنید، اما در این حالت فیلم هایی که توسط منتقدین بیشتری بررسی شده اند و تعداد رای بیشتری دارند از این حالت منفعت میبرند. برای حل این مشکل شما نیاز به تقسیم این مقدار به مجموع شباهت منتقدینی که به فیلم رای داده اند، دارید.(مقدار در Total تقسیم بر جمع شباهت منتقدینی که به فیلم رای داده اند از ستون similarity). نتیجه جمع تمام شباهت های منتقدینی که به فیلم رای داده اند در ردیف sim. Sum آمده است.به دلیل اینکه فیلم The Night Listener توسط همه بررسی شده است مقدار در total بر مجموع تمام شباهت ها تقسیم شده است. فیلم Lady in the Water توسط Puig نقد نشده است. بنابراین تمام شباهت ها به غیر از مقدار شباهت puig راه با هم جمع کرده و رتبه فیلم در total را بر آن تقسیم می کنیم . نتیجه تقسیم در ردیف نهایی نتیجه نمایش داده شده است.

کدهای مرتبط با این بخش کاملا سر راست است و با هر دو روش اندازه گیری همبستگی پیرسون و فاصله اقلیدسی کار می کند.کد زیر را به recommandations.py اضافه کنید:

 

# Gets recommendations for a person by using a weighted average
# of every other user's rankings
def getRecommendations(prefs,person,similarity=sim_pearson):
  totals={}
  simSums={}
  for other in prefs:
    # don't compare me to myself
    if other==person: continue
    sim=similarity(prefs,person,other)

    # ignore scores of zero or lower
    if sim<=0: continue
    for item in prefs[other]:
	    
      # only score movies I haven't seen yet
      if item not in prefs[person] or prefs[person][item]==0:
        # Similarity * Score
        totals.setdefault(item,0)
        totals[item]+=prefs[other][item]*sim
        # Sum of similarities
        simSums.setdefault(item,0)
        simSums[item]+=sim

  # Create the normalized list
  rankings=[(total/simSums[item],item) for item,total in totals.items()]

  # Return the sorted list
  rankings.sort()
  rankings.reverse()
  return rankings 

این کد به وسیله یک حلقه بر روی تمام افراد دیگر در دیکشنری prefs اجرا می شود.

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

حال شما می توانید ببینید که فیلم بعدی که من باید ببینم چیست:

 

 >>> reload(recommendations)
>>> recommendations.getRecommendations(recommendations.critics,'Toby')
[(3.3477895267131013, 'The Night Listener'), (2.8325499182641614, 'Lady in the
Water'), (2.5309807037655645, 'Just My Luck')]
>>> recommendations.getRecommendations(recommendations.critics,'Toby',
...
similarity=recommendations.sim_distance)
[(3.5002478401415877, 'The Night Listener'), (2.7561242939959363, 'Lady in the
Water'), (2.4619884860743739, 'Just My Luck')] 

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

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

در ادامه این فصل ما می بینیم که چگونه می توان از API سایت del.icio.us برای گرفتن داده های واقعی و پیشنهاد وب سایت برای افراد استفاده کرد.

دیدگاه جدیدی بگذارید