用GraphLab Create構建音樂推薦系統
最近跟著大神在進行機器學習實戰,用GraphLab Create做音樂推薦系統。在這裡,我將構建兩種方法的音樂推薦系統,分別為:基於流行度的推薦系統和基於個性化的推薦系統。並且對於構建的推薦系統,分別用準確率和召回率來進行評估。
下面我將詳細介紹怎麼用GraphLab Create來構建音樂推薦系統。
- 系統:Windows10系統
- 軟體:GraphLab Create,Jupyter Notebook,python2,IPython
1、匯入GraphLab Create包
import graphlab
並將GraphLab Canvas的顯示設定為顯示在IPython Notebook中(PS:這一步純屬個人習慣)
graphlab.canvas.set_target('ipynb')
2、讀取資料
song_data = graphlab.SFrame('song_data.csv')
我們的音樂資料格式如下圖所示,由X1(每一行的行標)、UserID(使用者名稱對映過來的ID)、SingerID(歌手名對映過來的ID)、Rating(使用者點選歌手的次數,代表歌手的流行度)、SingerTitle(歌手名)、UserTitle(使用者名稱)組成
3、探索資料
①檢視資料集中最流行的歌手
可知,伍佰是最流行的歌手,被三個使用者點選,佔比為0.515%
②分別計算資料集中資料和使用者的個數
#計算資料集中資料的個數
len(song_data) #資料集中資料個數為583
#計算資料集中使用者的個數
users = song_data['UserID'].unique()
len(users) #資料集中使用者個數為80
4、構建推薦系統
①使用random_split函式,將資料集劃分為訓練資料集和測試資料集,其中訓練集和測試集資料比例為8:2
train_data, test_data = song_data.random_split(.8, seed=0)
②構建音樂推薦系統
a. 呼叫GraphLab Create中內建的popularity_recommender庫中的create函式,構建基於流行度的音樂推薦模型
popularity_model = graphlab.popularity_recommender.create(train_data, user_id='UserID', item_id='SingerID')
b. 呼叫GraphLab Create中內建的item_similarity_recommender庫中的create函式,構建基於個性化的音樂推薦模型
personalized_model = graphlab.item_similarity_recommender.create(train_data, user_id='UserID', item_id='SingerID')
③基於音樂推薦系統對使用者進行預測
a. 呼叫recommend函式,利用基於流行度的音樂推薦系統對使用者進行預測
分別對使用者2和使用者9進行預測,從結果中可看出,基於流行度的推薦系統對兩個使用者的預測很相似,符合基於流行度進行推薦的特點
popularity_model.recommend(users=[users[1]])
popularity_model.recommend(users=[users[8]])
b. 呼叫recommend函式,利用基於個性化的音樂推薦系統對使用者進行預測
分別對使用者2和使用者9進行預測,從結果中可看出,基於個性化的推薦系統對兩個使用者的預測很不相似,符合基於個性化進行推薦的特點
personalized_model.recommend(users=[users[8]])
personalized_model.recommend(users=[users[8]])
五、評估推薦系統
對構建的基於流行度的推薦系統和基於個性化的推薦系統從準確率和召回率兩方面進行評估與比較,可以直接呼叫GraphLab Create中的compare函式
model_performance = graphlab.compare(test_data, [popularity_model, personalized_model], user_sample=1.0)
結果為:
為了更直觀的看到兩個推薦系統的評估和比較結果,可以呼叫GraphLab Create中的show_comparison函式,將結果顯示在GraphLab Canvas圖表中
graphlab.show_comparison(model_performance, [popularity_model, personalized_model])
由影象可直觀的看出,基於個性化的推薦系統比基於流行度的推薦系統性能更好。