سیستم های توصیه گر (Recommender System): صد دانه یاقوت

بدون دیدگاه

این پست قسمت چهارم از سری چند گانه سیستم های توصیه گره و توی این قسمت می خوام درباره نحوه ی پیدا سازی یک سیستم توصیه گر بر مبنا فیلترینگ مشارکتی (Collaborative Filtering) با هم صحبت کنیم.

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

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

اما تو قسمت سوم آستین ها مون رو بالا زدیم و یه کم کار رو عملی کردیم و با هم یه سیستمی که بر مبنای فیلترینگ بر اساس محتوا (Content Based Filtering) بود رو پیاده سازی کردیم که می تونست با توجه به آهنگ در حال بخش توصیه ی یک پلی لیست رو به کاربر انجام بده .

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

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

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

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


ولی دیتاستی که ما ازش استفاده می کنیم از سایت movielens است که در این دیتابیس ۹۴۳ کاربر وجود دارد که ۴۴۷ تای آنها بیش از ۶۰ امتیازدهی داشته اند. در کل این دیتابیس شامل ۱۰۰۰۰۰ امتیازدهی به ۱۶۸۲ فیلم می باشد که هر کدام از کاربران حداقل به ۲۰ فیلم امتیاز داده اند .
پباده سازی این الگوریتم شامل مراحلی است که به ترتیب با توجه به این مراحل ما پیش می رویم

مرحله اول: تبدیل داده های خام
داده هایی که توی این دیتا ست قرار دارن خام اند( بدین صورت که در هر سطر آیدی کاربر، آیدی فیلم، ریت کاربر و زمانی که این انتخاب انجام گرفت وجود دارد.) و ما باید این داده های خام رو به شکلی که برای ما قابل استفاده اند تبدیل کنیم برای این کار ما دو نوع رویکرد داریم یکی براساس کاربر-اقلام( user-item) که هر سطر نماینده ی یک کاربر هست و هر ستون برابر با ریتی هست که آن کاربر به آن فیلم داده است و رویکرد دیگری اقلام-کاربر (item_user) که ما در اینجا جای سطر و ستون تغییر می کنه در اینجا ما از رویکرد اول استفاده می کنیم

داده های خام movielens
داده ها یعد از تبدیل

مرحله ی دوم : تقسیم داده ها
بعد از این که داده ها رو مثل صد دانه یاقوت کنار هم قرار دادیم و از پراکندگی آنها جلوگیری نمودیم حالا می ریم سراغ مرحله ی بعد که توی این مرحله باید داده ها رو به دو قسمت آموزش و تست تقسیم کنیم که این کار برای این که نتایجی که به واسطه ی داده های آموزشی به دست آوردیم رو به واسطه ی داده های تست مورد آزمایش قرار بدیم
در اینجا ما از مجموع ۹۴۳ ، ۱۸۹ تا رو برای تست در نظر می گیرم و مابقی رو برای آموزش.

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

خوشه بندی با kmeans در scikit-learn

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

محاسبه ی فرمول شباهت

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

فرمول پیش بینی ریت

در دو فرمول بالا a, b هر یک نماینده ی یک کاربر منحصر به فرد بوده و r مربوط به ریتی بوده که کاربر ها داده اند و r بار هم میانگین ریتی که کاربر داده و p هم نماینده ی آیتم هست و از طرفی ما برای مقایسه ی این روش از روش میانگین هم برای تعیین ریت ها استفاده کردیم به این صورت که میانگین ریتی که تمام کاربران یک دسته به یک آیتم داده اند را به عنواب پیش بینی خود در نظر می گیریم .

تا اینجا ما با موفقیت یه سیستم توصیه گر بر مبنای فیلترینگ همکارانه رو پیاده سازی کردیم و حالا مونده بررسی این که ما به چه میزان این کار رو درست و صحیح انجام داده ایم برای این کار ما سه فرمول اساسی داریم که از آنها کمک می گیریم

فرمول های مربوط به بررسی یک الگوریتم

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

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

نتایج پیاده سازی به درصد

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



دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *