ホームページ  >  記事  >  バックエンド開発  >  Pythonによるレコメンデーションシステムの例

Pythonによるレコメンデーションシステムの例

WBOY
WBOYオリジナル
2023-06-10 08:51:151935ブラウズ

Python は現在非常に人気のあるプログラミング言語であり、その強力なライブラリ システムと学習しやすい構文により、さまざまなアプリケーションを開発するための最初の選択肢となっています。機械学習の分野では、Python もよく使用されるプログラミング言語です。この記事ではPythonを使ってレコメンドシステムを構築する例を紹介します。

レコメンデーション システムとは、ユーザーの過去の行動、興味、その他の情報に基づいて、製品、コンテンツ、サービスをユーザーに推奨するアルゴリズムとアプリケーションを指します。レコメンデーション システムは、電子商取引、ソーシャル メディア、ニュース閲覧などの分野で広く使用されています。 Python は、レコメンデーション システムの構築に使用できるライブラリとフレームワークをいくつか提供します。

1. レコメンデーション システムの種類

レコメンデーション システムは、主にコンテンツベースのレコメンデーションと協調フィルタリング レコメンデーションの 2 種類に分類されます。

コンテンツベースのレコメンドとは、ユーザーの過去の興味や趣味、商品の属性特性に基づいて、類似した商品をレコメンドすることです。この方法では商品の特性を分析する必要があるため、テキスト処理ライブラリ NLTK または Scikit-learn を使用して、商品のタイトルや説明などの商品属性のテキスト情報を処理できます。

協調フィルタリングの推奨は、過去の行動データに基づいてユーザー間の関係を検出し、ユーザーが興味を持つ可能性のある製品を推奨することです。協調フィルタリングの推奨には、ユーザーベースの協調フィルタリングとアイテムベースの協調フィルタリングという 2 つの主なアプローチがあります。

ユーザーベースの協調フィルタリングは、ユーザー間の類似性に基づいて推奨を行います。つまり、現在のユーザーと同様の関心を持つ他のユーザーを見つけ、これらのユーザーが好む製品に基づいて製品を現在のユーザーに推奨します。この方法ではユーザー間の類似度を計算する必要があり、Scikit-learn の cosine_similarity を使用してコサイン類似度を計算できます。

アイテムベースの協調フィルタリングは、アイテム間の類似性に基づいて推奨を行います。つまり、現在のユーザーが好むアイテムに類似したアイテムを見つけて、これらの類似したアイテムを現在のユーザーに推奨します。この方法では項目間の類似性を計算する必要があるため、Scikit-learn のペアワイズ距離を使用してユークリッド距離またはコサイン距離を計算できます。

2. レコメンドシステムの例

次に、Pythonを使用してアイテムベースの協調フィルタリングレコメンドシステムを構築する例を紹介します。

まず、データを準備する必要があります。映画 ID、ユーザー ID、評価などの情報を含む映画評価データ セットを選択します。 Pandas ライブラリを使用してデータを読み取り、処理できます。以下はコード例です:

import pandas as pd
ratings_data = pd.read_csv('ratings.csv')
movies_data = pd.read_csv('movies.csv')

次に、データを前処理して必要な情報を抽出する必要があります。ムービー ID をムービー名に、ユーザー ID をラベルにマッピングする必要があります。以下はコード例です:

# 将电影ID映射为电影名称
movie_names = {}
for index, row in movies_data.iterrows():
    movie_names[row['movieId']] = row['title']

# 将用户ID映射为标号
user_ids = {}
user_counter = 0
for index, row in ratings_data.iterrows():
    user_id = row['userId']
    if user_id not in user_ids:
        user_ids[user_id] = user_counter
        user_counter += 1

次に、映画評価行列を構築する必要があります。行列の行はユーザーを表し、列は映画を表し、行列の各要素は映画に対するユーザーの評価を表します。映画。マトリックスには欠損値がいくつかあり、対応する映画がユーザーによって評価されていないことを示しています。 fill メソッドを使用してこれらの欠損値を埋める必要があります。コード例は次のとおりです:

import numpy as np
n_users = len(user_ids)
n_movies = max(movie_names.keys())
rating_matrix = np.zeros((n_users, n_movies))
for index, row in ratings_data.iterrows():
    user_id = row['userId']
    movie_id = row['movieId']
    rating = row['rating']
    rating_matrix[user_ids[user_id], movie_id] = rating

# 使用均值填充缺失值
mean_ratings = np.zeros((n_users,))
for i in range(n_users):
    ratings = rating_matrix[i, :]
    ratings = ratings[ratings > 0]
    mean_ratings[i] = ratings.mean()
    rating_matrix[i, ratings == 0] = mean_ratings[i]

次に、映画間の類似性行列を計算する必要があります。Scikit-learn のペアワイズ_ディスタンス関数を使用して、ユークリッド距離またはコサイン距離を計算できます。ここではコサイン距離を選択します。コードサンプルは次のとおりです:

from sklearn.metrics.pairwise import pairwise_distances
movie_similarity = 1 - pairwise_distances(rating_matrix.T, metric='cosine')

最後に、ユーザーに映画を推奨する必要があります。ユーザーのお気に入りの映画に基づいて、類似した映画を推奨できます。以下はコード例です:

# 找到用户最喜欢的电影
user_id = 0
user_ratings = rating_matrix[user_id, :]
fav_movie = np.argmax(user_ratings)
print('用户 %d 最喜欢的电影是 %s' % (user_id, movie_names[fav_movie]))

# 根据相似度找到相似的电影
similar_movies = movie_similarity[fav_movie, :]
top_k = 5
top_k_movies = np.argsort(similar_movies)[::-1][:top_k]
for i, movie_id in enumerate(top_k_movies):
    print('Top %d 推荐电影是 %s' % (i+1, movie_names[movie_id]))

上記は、項目ベースの協調フィルタリング推奨システムの Python の例です。

概要

レコメンデーション システムは、広く使用されている機械学習アプリケーションです。Python には、開発者がレコメンデーション システムを迅速に構築するのに役立つ豊富なライブラリとフレームワークが用意されています。この記事では、Python を使用してアイテムベースの協調フィルタリング推奨システムを構築する方法の例を紹介します。

以上がPythonによるレコメンデーションシステムの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。