In [51]:
# import
import graphlab as gl
from matplotlib import pyplot
%matplotlib inline
In [32]:
# reading data
songs = gl.SFrame('data/song_data.gl/')
In [33]:
songs.head()
Out[33]:
In [34]:
gl.canvas.set_target('ipynb')
In [35]:
songs['song'].show()
In [36]:
# total
len(songs)
Out[36]:
In [37]:
# counting no of users
users = songs['user_id'].unique()
In [38]:
len(users)
Out[38]:
In [39]:
train_data, test_data = songs.random_split(0.8, seed=0)
In [40]:
popularity_model = gl.popularity_recommender.create(train_data,
user_id='user_id',
item_id='song',
)
In [41]:
popularity_model.recommend(users=[users[0]])
Out[41]:
In [42]:
popularity_model.recommend(users=[users[1]])
Out[42]:
The problem with "Popularity Model" is - It recommends same items to everyone, Not personalized
In [43]:
personalized_model = gl.item_similarity_recommender.create(train_data,
user_id='user_id',
item_id='song')
In [44]:
personalized_model.recommend(users=[users[0]])
Out[44]:
In [45]:
personalized_model.recommend(users=[users[1]])
Out[45]:
In [46]:
personalized_model.get_similar_items(['With Or Without You - U2'])
Out[46]:
In [47]:
personalized_model.get_similar_items(['Chan Chan (Live) - Buena Vista Social Club'])
Out[47]:
In [59]:
model_perf = gl.recommender.util.compare_models(test_data,
[popularity_model, personalized_model],
user_sample=0.05)
In [61]:
gl.show_comparison(model_perf,[popularity_model, personalized_model])
In [62]:
model_perf
Out[62]:
In [66]:
popularity_model.show(view='Evaluation')
personalized_model.show(view='Evaluation')