ぺーぱーの日々

上機嫌でいること、夢中でいることを目標に、今日も色んなことに手を出します。

MENU

機械学習 映画レコメンデーション

今回の目的

機械学習・レコメンデーションの実装

今回のゴール

あるユーザーに好みの映画を予測して映画をおすすめ

アウトプットのイメージ

ハリーポッター・秘密の部屋』を見た人には、●●(映画名)がおすすめ!

実装手順

  1. ライブラリ、データのインポート
  2. データの確認
  3. データの処理
  4. データの切り取り
  5. データの関連付け
  6. 「モノ」からレコメンデーションモデルの作成
  7. 「人」からレコメンデーションモデルの作成

実装コード

Netflix - Movie recommendation | Kaggle

アウトプット

評価の分散
  • 評価4が最も多い
  • 評価4、3で全体の半数以上を占める
  • 評価3以下の映画よりも、高評価(4・5)の映画のほうが多い

学習精度
  • MAE,RMSEともに、1を下回っている

user_785314が好きそうな映画TOP10

'What the #$*! Do We Know!?'と相関が強い映画TOP10

 

X2: X-Men Unitedと相関が強い映画TOP10
  • X-Menと相関が強い映画10本には、バットマンシリーズが5本あり、良作の相関が強いことを示唆している

この実装の難所

  • 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