今回の目的
機械学習・レコメンデーションの実装
今回のゴール
あるユーザーに好みの映画を予測して映画をおすすめ
アウトプットのイメージ
『ハリーポッター・秘密の部屋』を見た人には、●●(映画名)がおすすめ!
実装手順
- ライブラリ、データのインポート
- データの確認
- データの処理
- データの切り取り
- データの関連付け
- 「モノ」からレコメンデーションモデルの作成
- 「人」からレコメンデーションモデルの作成
実装コード
Netflix - Movie recommendation | Kaggle
アウトプット
- 評価4が最も多い
- 評価4、3で全体の半数以上を占める
- 評価3以下の映画よりも、高評価(4・5)の映画のほうが多い
- MAE,RMSEともに、1を下回っている
この実装の難所
-
movie_id列を追加する
-
映画をrecommendする
movie_id列を追加する
df_nan = pd.DataFrame(pd.isnull(df.Rating))
df_nan = df_nan[df_nan['Rating'] == True]
df_nan = df_nan.reset_index()
movie_np = []
movie_id = 1
for i,j in zip(df_nan['index'][1:],df_nan['index'][:-1]):
# numpy approach
temp = np.full*1
print('Length: {}'.format(len(movie_np)))
映画をrecommendする
def recommend(movie_title, min_count):
print("For movie ({})".format(movie_title))
print("- Top 10 movies recommended based on
Pearsons'R correlation - ")
i = int(df_title.index[df_title['Name'] == movie_title][0])
target = df_p[i]
similar_to_target = df_p.corrwith(target)
corr_target = pd.DataFrame(similar_to_target, columns = ['PearsonR'])
corr_target.dropna(inplace = True)
corr_target = corr_target.sort_values('PearsonR', ascending = False)
corr_target.index = corr_target.index.map(int)
corr_target = corr_target.join(df_title).join(df_movie_summary)
[['PearsonR', 'Name', 'count', 'mean']]
print(corr_target[corr_target['count']>min_count][:10].
to_string(index=False))
*1:1,i-j-1), movie_id)
movie_np = np.append(movie_np, temp)
movie_id += 1
# Account for last record and corresponding length
# numpy approach
last_record = np.full((1,len(df) - df_nan.iloc[-1, 0] - 1),movie_id)
movie_np = np.append(movie_np, last_record)
print('Movie numpy: {}'.format(movie_np