K-nearest neighbors を段階的に理解する
K-nearest neighbors を使うと、似た嗜好を持つ人たちの「集合知」に基づいて、誰かがまだ見ていないアイテムをどう評価しそうかを推定できることを見てきました。 この演習では、そのプロセスを皆さん自身で順を追って実行し、仕組みをしっかり理解していきます。
これまでに何度も類似度行列を作成してきたので、出発点として、そのステップはすでに完了しています。ユーザー間の類似度行列は DataFrame に包んで user_similarities として読み込まれています。
この DataFrame では、各ユーザーが行と列に並び、交差する位置に対応する類似度スコアが入っています。
この演習では、user_001 の類似度スコアを用いて最も近い近傍を見つけ、その近傍がある映画に付けた評価から、user_001 がその映画を見た場合にどの評価を付けそうかを推定します。
この演習はコースの一部です
Pythonでつくるレコメンデーションエンジン
演習の手順
ordered_similaritiesから上位10人のユーザーを抽出し、nearest_neighborsとして保存して、User_Aの10人の最近傍のIDを取得します。user_ratings_tableから、nearest_neighborsに含まれるユーザーが付けた評価を抽出し、neighbor_ratingsとして取得します。- これらのユーザーが映画
Apollo 13 (1995)に付けた評価の平均を計算し、User_Aがそれを見ていた場合に付けそうな評価を推定します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Isolate the similarity scores for user_1 and sort
user_similarity_series = user_similarities.loc['user_001']
ordered_similarities = user_similarity_series.sort_values(ascending=False)
# Find the top 10 most similar users
nearest_neighbors = ordered_similarities[1:11].____
# Extract the ratings of the neighbors
neighbor_ratings = user_ratings_table.____(nearest_neighbors)
# Calculate the mean rating given by the users nearest neighbors
print(neighbor_ratings['Apollo 13 (1995)'].____())