۱۰ اردیبهشت ۱۳۹۹

داده کاوی - ۷ - شباهت کسینوسی تعدیل یافته

How to adjust seat angle on a Dutch bicycle

مسئله

می‌خواهیم شباهت فیلم‌ها را با توجه به امتیازات کاربران به آن‌ها در مجموعه داده‌ای ratings_grade_inflation2 که جزئیات آن در داده کاوی - ۳ - جزئیات دیتاست‌ها در دسترس است محاسبه کنیم.

 u1u2u3u4
Interstellar1234
Inception1234
Hangover4321

با نگاهی کوتاه به نظرات کاربران می‌توان به این نتیجه رسید که شباهت دو فیلم interstellar و inception بیشتر از شباهت interstellar و hangover هست، به عبارتی در بهترین حالت انتظار داریم معیار ما شباهت کامل را برای دو فیلم interstellar و inception نتیجه دهد و عدم شباهت کامل برای دو مورد بعدی زیرا نظر کاربران برای دو فیلم interstellar و inception کاملا مشابه و برعکس نظر هر کاربر برای interstellar و hangover متفاوت بوده.

ابتدا با روش شباهت کسینوسی که در داده کاوی - ۵ - شباهت کسینوسی به شرح آن پرداختیم میزان شباهت فیلم‌ها را محاسبه می‌کنیم و به نتیجه زیر می‌رسیم.

Interstellar-Inception:1.000000
Interstellar-Hangover:0.666667

خروجی بدست آمده به نتاج مورد نظر ما نزدیک است، همانطور که انتظار داشتیم میزان شباهت Interstellar-Inception برابر شباهت کامل یعنی مثبت یک شد ولی برای دو فیلم Interstellar-Hangover که انتظار عدم شباهت کامل یعنی منفی یک را داشتیم عدد مثبت 0.666 حاصل شد!

فرمول شباهت کسینوسی تعدیل یافته یا Adjusted Cosine Similarity 

در فرمول بالا برابر میانگین مقادیر ثبت شده برای ویژگی i است که در مثال ما برابر میانگین امتیازات یک فرد مثل alireza است. در روش شباهت کسینوسی تعدیل شده با کم کردن میانگین امتیازات کاربر از امتیازهایش سعی شده تا مشکل تورم درجه حل شود.

پیاده‌سازی شباهت کسینوسی تعدیل یافته در پایتون

def mean(lst): 
    return sum(lst) / len(lst) 

def dot(A,B,a_mean,b_mean): 
    return (sum((a-a_mean)*(b-b_mean) for a,b in zip(A,B)))

def get_adjusted_cosine_similarity(rating1,rating2):
    a = rating1.values()
    a_mean = mean(a)
    b = rating2.values()
    b_mean = mean(b)
    return dot(a,b,a_mean,b_mean) / ( (dot(a,a,a_mean,a_mean) **.5) * (dot(b,b,b_mean,b_mean) ** .5) )

همانطور که مشاهده می‌کنید تغییر اصلی متد شباهت کسینوسی که در داده کاوی - ۵ - شباهت کسینوسی مطرح شد شامل اضافه شدن تابع mean برای محاسبه‌ی میانگین امتیازات دو کاربر و کم کردن میانگین امتیازات هر فرد زمان استفاده از امتیاز اوست.

حال مجددا میزان شباهت را با استفاده از روش شباهت کسینوسی تعدیل یافته با متد get_adjusted_cosine_similarity بدست می‌آوریم.

Interstellar-Inception:1.000000
Interstellar-Hangover:-1.000000

همانطور که مشاهده می‌کنید جواب بدست آمده با روش کسینوسی تعدیل یافته برابر جواب مورد انتظار ما است یعنی شباهت کامل دو فیلم Interstellar و Inception و عدم شباهت کامل Interstellar و Hangover.

فهرست مطالب `داده کاوی در پایتون`

نظرات خوانندگان این نوشته

تا به حال نظری ثبت نشد!

نظری در این مورد دارید؟ خوشحال می‌شم اون رو برام ارسال کنید.

captcha