زهره کریمی
زهره کریمی
خواندن ۲ دقیقه·۴ سال پیش

ModelBasedCollaborativeFilteringRecommenderSytem

خب سیستم های توصیه گر مدل بیس ، یه مدل براساس رای کاربرا می سازن و براساس اون مدل به کاربرا پیشنهاد فیلم، لباس و... می دن. تو این سیستم ها دو تا مفهوم خیلی مهم SVD و Utility matrix داریم. الان بهتون میگم اینا چیه؛

اولاً SVD یه روش جبر خطی هست که به کمک اون می تونیم ماتریس رو تجزیه کنیم تا اطلاعات رو تفکیک شده بدست بیاریم به طور کلی بگم که به اطلاعات مخفی می تونید دسترسی پیدا کنید. به این شکل نگاه کنید:

خب utility matrices هم یه نوع ماتریسه که تو این مثال شامل کاربرا، فیلم ها و رای هایی هست که اون کاربرا به فیلمهایی که دیدن اختصاص دادن. این ماتریس تقریباً شبیه ماتریس اسپارسه ، چون که خب یه کاربر قطعاً به هزار تا فیلم رای نداده (یعنی همه رو ندیده).

دیتاستی هم که استفاده می کنیم برای این مثال 100kMovielense هست که می تونید از این لینک دانلودش کنید:

https://grouplens.org/datasets/movielens/100k/

حالا ما می خوایم یه مدل از رای این کاربرا بسازیم و براساس اون مدل، به کاربرا فیلم پیشنهاد بدیم. اول که باید کتابخونه های لازمو نصب کنیم:

import pandas as pd

import numpy as np

import sklearn

from sklearn.decomposition import TruncatedSVD

داده هامون رو هم وارد می کنیم:

columns=['user_id','item_id','rating','timestamp']

data=pd.read_csv('u.data',sep='\t',names=columns)

columns=['item_id', 'movie title', 'release date', 'video release date', 'IMDb URL', 'unknown', 'Action', 'Adventure','Animation','Childrens','Comedy','Crime','Documentary', 'Drama', 'Fantasy', 'Film-Noir', 'Horror','Musical', 'Mystery', 'Romance', 'Sci-Fi', 'Thriller', 'War', 'Western']
movies=pd.read_csv('F:/Learning/machine learning/Recommandation/ml-100k/ml-100k/u.item',sep='|',names=columns, encoding='latin-1')
movie_names=pd.DataFrame(movies, columns=['item_id','movie title'])

combined_movie_data=pd.merge(data,movie_names,on='item_id')
rating=pd.DataFrame(combined_movie_data.groupby('item_id')['rating'].count().sort_values(ascending=False))
Filter= combined_movie_data['item_id']==50
print(combined_movie_data[Filter]['movie title'].unique())

حالا میخوایم utility matrix رو بسازیم که شامل کاربرا، فیلما و رایی هست که کاربر به اون فیلم داده: مثلا کاربر به فیلم ایکس رای 3 داده برای بقیه فیلمها رای نداده پس مقدار بقیه 0 در نظر گرفته میشه.

rating_crosstab_mat=combined_movie_data.pivot_table(index='user_id',values='rating',columns='movie title',fill_value=0)

خب الان می خایم مدل رو بسازیم. مدل ما براساس شباهت کاربرا تو رای دادن به فیلم انتخاب میشه. برای همین به کمک TruncatedSVD میایم این کار رو انجام میدیم، با transpose جای سطر و ستون در خروجی بالایی عوض میشه، سطرها اسم فیلمهاست و ستون ها هم کاربرا و رای که به هر فیلم دادن رو نشون میده.

X=rating_crosstab_mat.values.T

SVD=TruncatedSVD(n_components=10,random_state=18)

result_mat=SVD.fit_transform(X)

در نهایت با استفاده از Pearson r correlation matrix میزان ارتباط فیلم ها به همدیگه رو براساس شباهتی که بین رای کاربرا هست پیدا می کنیم:

corr_mat=np.corrcoef(result) movie_name=rating_crosstab_mat.columns movie_list=list(movie_name) star_wars=movie_list.index('Star Wars (1977)') corr_star_wars=corr_mat[star_wars] print(list(movie_name[(corr_star_wars<1)&(corr_star_wars>0.8)]))
هوش مصنوعیسیستم توصیه گرتحلیل داده
کارشناسی ارشد علوم کامپیوتر- (محقق حوزه سیستم های توصیه گر)
شاید از این پست‌ها خوشتان بیاید