پروژه متلب پیشنهاد هوشمند فیلم ها کاربر بپسند بر اساس ماتریس شباهت
Fetch information from movie rating using Similarity matrix
شرح پروژه :
هدف نهایی پروژه : پیشنهاد فیلم هایی که انتظار میرود کاربر بپسندد با استفاده از فیلم هایی که قبلا به آن امتیاز داده.
کد ها باید بصورت تابع نوشته شوند.سه تابع برای استفاده داده شده بهمون، گفتن باید همونها رو بسط بدیم. یکی لیست همه ی فیلم هایی که هر کاربر به آنها امتیاز داده و دیگری لیست کاربرانی که به دو فیلم امتیاز داده اند(برای مثال کاربرانی که هم به فیلم ۱ و هم به فیلم ۲ امتیاز داده اند) را برمیگزداند. با استفاده از این توابع باید تابع بنویسیم که ماتریس شباهت را برگرداند. بدین معنی که خروجی ماتریس n*n باشد(n تعداد فیلم ها است) که میزان شباهت فیلم ها به هم را نشان دهد( شباهت دو فیلم= تعداد کاربران مشترکی که به هر دو امتیاز دادند/ماکزیمم طول).در مرحله ی آخر باید فیلم های
مشابه را به کاربران هم پیشنهاد دهیم. برای مثال اگر در ماتریس شباهت، شباهت فیلم ۱ و ۲ از نیم بیشتر باشد، فیلم ۱ را به تمام کاربرانی که فیلم ۲ را دیده اند و فیلم ۲ را به تمام کاربرانی که فیلم ۱ را دیده اند پیشنهاد میدهیم.
بخشی از گزارش:
در این پروژه با بدست آوردن ماتریس شباهت برای کاربران، شباهت دو کاربر را به هم بدست می آوریم به این صورت که برای هر کاربر با کاربر دیگر یک عدد بین ۱ و ۰ بدست می آید، که با استفاده از این عدد برای هر کاربر کابران شبیه را بدست می آوریم، و فیلم هایی که کاربران شبیه به کاربر مورد نظر دیده اند و به آنها رای داده اند را به کاربر مورد نظر پیشنهاد می کنیم.
پروژه به این صورت پیاده سازی شده است که ابتدا داده های ورودی خوانده می شوند این داده ها درون ماتریس Data.mat وجود دارند که این ماتریس شامل ۴ ستون و ۱۰۰۰۰۰ سطر است که سطون ۱ شماره کاربر، ستون ۲ شماره فیلم، ستون ۳ مقدار رای داده شده از طرف این کاربر به فیلم می باشد.
بعد از گرفتن ورودی ها تابعی در فایل Test.m صدا زده می شود به نام SimilaryMatrix این تابع برای ما ماتریس شباهت را بدست می آورد به این صورت که برای هر کاربر با کاربر دیگر یک عدد شباهت بدست می آید فرض کنید شباهت کاربر i با کاربر j را می خواهیم بدست بیاوریم ابتدا شماره فیلم هایی که کاربر i به آنها رای داده است را بدست می آوریم سپس شماره فیلم هایی که کاربر j به آنها رای داده است را بدست می آوریم که هر دو این مراحل با استفاده از تابع AllFilmsRatedBy محاسبه می شوند.
سپس باید فیلم هایی را که این دو کاربر به صورت مشترک به آنها رای داده اند را بدست بیاوریم که این مرحله با استفاده از تابع Eshterak بدست می آید.حال ما با انجام این مراحل دو کاربر i و j را داریم که با هم به چند فیلم رای داده اند و مقادیر رای های داده شده به این فیلم ها را نیز داریم و با استفاده از این مقادیر بدست آمده ما باید شباهت دو کاربر i و j را بدست بیاوریم. در این مرحله رای های داده شده به فیلم های مشترک از طرف کاربر i را از رای های داده شده به فیلم های مشترک از طرف کاربر j کم می کنیم تا فاصله ی رای ها برای هر فیلم بدست آید سپس به این صورت عمل می کنیم که بیشترین فاصله رای های دو کاربر به یک فیلم ۴ است بنابراین ۱۰۰ تقسیم بر ۴ برابر با ۲۵ می شود حال اگر کاربر i به فیلم اول امتیاز ۴ داده باشد و کاربر j به فیلم اول امتیاز ۲ داده باشد ۴ منهای ۲ برابر با ۲ می شود و ۲ ضربدر ۲۵ برابر ۵۰ می شود که میزان فاصله دو کاربر از هم برای این فیلم را به درصد بیان می کند.
بنابراین برای دو کاربر i و j به تعداد فیلم های مشترکی که با هم دیده اند درصد هایی بدست می آید که اگر میانگین این درصد ها را محاسبه کنبم له شباهت دو کاربر i و j دست پیدا می کنیم.بعد از بدست آوردن ماتریس شباهت برای همه ی کاربران به یک ماتریس مربعی به طول و عرضی برابر با تعداد کاربران دست پیدا می کنیم. که دارای درصدی برای هر کاربر با کاربر دیگر است که نشاندهنده ی شباهت دو کاربر به هم می باشد.
در مرحله بعد ما با استفاده از تابع SimilaryUsers کاربران شبیه به هم را بدست می آوریم این کار به این صورت می باشد که با استفاده از ماتریس بدست آمده از مراحل قبل اگر میزان شباهت کاربر i نسبت به کاربر j از ۷۵ درصد بیشتر بود این دو کاربر را شبیه به هم انتخاب می کنیم. و در نهایت به یک ماتریس می رسیم که دارای دو ستون و به تعداد کاربران شبیه به هم دارای سطر می باشد ستون اول این ماتریس شماره کاربر i ستون دوم شماره کاربر j می باشد. نام این ماتریس در کد ماتریس SU می باشد.
بعد از این مرحله ما باید برای هر کاربر فیلم های مناسب با رای هایی را که داده است را به او پیشنهاد دهیم بنابراین یک حلقه به تعداد کاربران می نویسیم و در آن برای هر کاربر فیلم های مناسب را پیشنهاد می دهیم به این صورت که ابتدا با استفاده از تابع Recommentation فیلم های مناسب این کاربر را با استفاده از اطلاعات بدست آمده تا الان بدست می آوریم.
تابع Recommentation دو خروجی دارد که اولین خروجی این تابع شماره فیلم های مناسب برای کاربر i و دومین خروجی میزان شباهت علایق این کاربر به فیلم ها می باشد.
این تابع همچنین چهار ورودی می گیرد که اولی ماتریس US دومی شماره کاربری که می خواهیم به آن فیلم پیشنهاد دهیم سومی داده های ورودی به برنامه که همان ماتریس Data.mat می باشد و چهارمی ماتریس شباهت است.
در این تابع ابتدا تمامی سطرهایی در ماتریس US که دارای شماره این کاربر مورد نظر هستند را استخراخ می کنبم. سپس با بدست آمدن کاربران شبیه به این کاربر فیلم های دیده شده توسط کاربران شبیه را از ماتریس Data بدست می آوریم و در نهایت با استفاده از ماتریس شباهت میزان درصد شباهت این کاربر را به فیلم های بدست آمده در ماتریس S ذخیره می کنیم.
در آخر نیز با استفاده از یک حلقه برای فیلم های پیشنهادی به کاربر مورد نظر شماره فیلم ها را در کنار هم در متغیر answer قرار می دهیم و در آخر آنها را در خروجی نمایش می دهیم.
لطفاً براي ارسال دیدگاه، ابتدا وارد حساب كاربري خود بشويد