>  기사  >  백엔드 개발  >  Python으로 간단한 추천 시스템을 구축하는 방법

Python으로 간단한 추천 시스템을 구축하는 방법

王林
王林원래의
2023-10-20 17:19:431023검색

Python으로 간단한 추천 시스템을 구축하는 방법

Python으로 간단한 추천 시스템을 구축하는 방법

추천 시스템은 사람들이 관심을 가질 만한 항목을 발견하고 선택할 수 있도록 설계되었습니다. Python은 간단하지만 효과적인 추천 시스템을 구축하는 데 도움이 되는 풍부한 라이브러리와 도구를 제공합니다. 이 기사에서는 Python을 사용하여 사용자 기반 협업 필터링 추천 시스템을 구축하는 방법을 소개하고 특정 코드 예제를 제공합니다.

협업 필터링은 추천 시스템의 일반적인 알고리즘으로 사용자의 행동 이력 데이터를 기반으로 사용자 간의 유사성을 추론한 다음 이러한 유사성을 활용하여 항목을 예측하고 추천합니다. 영화에 대한 사용자 평가 세트가 포함된 MovieLens 데이터세트를 사용하겠습니다. 먼저 필수 라이브러리를 설치해야 합니다.

pip install pandas scikit-learn

다음으로 필수 라이브러리를 가져오고 MovieLens 데이터 세트를 로드합니다.

import pandas as pd
from sklearn.model_selection import train_test_split

# 加载数据集
data = pd.read_csv('ratings.csv')

데이터 세트에는 각각 사용자 ID, 영화 ID 및 등급을 나타내는 userIdmovieIdrating세 개의 열이 포함되어 있습니다. 다음으로 데이터 세트를 훈련 세트와 테스트 세트로 나눕니다.

train_data, test_data = train_test_split(data, test_size=0.2, random_state=42)

이제 추천 시스템을 구축할 수 있습니다. 여기서는 사용자 간의 코사인 유사성을 유사성 측정값으로 사용합니다. 사용자와 영화의 유사성 점수를 저장하기 위해 두 개의 사전을 만들 것입니다.

# 计算用户之间的相似度
def calculate_similarity(train_data):
    similarity = dict()
    for user in train_data['userId'].unique():
        similarity[user] = dict()
        user_ratings = train_data[train_data['userId'] == user]
        for movie in user_ratings['movieId'].unique():
            similarity[user][movie] = 1.0

    return similarity

# 计算用户之间的相似度得分
def calculate_similarity_score(train_data, similarity):
    for user1 in similarity.keys():
        for user2 in similarity.keys():
            if user1 != user2:
                user1_ratings = train_data[train_data['userId'] == user1]
                user2_ratings = train_data[train_data['userId'] == user2]
                num_ratings = 0
                sum_of_squares = 0
                for movie in user1_ratings['movieId'].unique():
                    if movie in user2_ratings['movieId'].unique():
                        num_ratings += 1
                        rating1 = user1_ratings[user1_ratings['movieId'] == movie]['rating'].values[0]
                        rating2 = user2_ratings[user2_ratings['movieId'] == movie]['rating'].values[0]
                        sum_of_squares += (rating1 - rating2) ** 2
                similarity[user1][user2] = 1 / (1 + (sum_of_squares / num_ratings) ** 0.5)

    return similarity

# 计算电影之间的相似度得分
def calculate_movie_similarity_score(train_data, similarity):
    movie_similarity = dict()
    for user in similarity.keys():
        for movie in train_data[train_data['userId'] == user]['movieId'].unique():
            if movie not in movie_similarity.keys():
                movie_similarity[movie] = dict()

            for other_movie in train_data[train_data['userId'] == user]['movieId'].unique():
                if movie != other_movie:
                    movie_similarity[movie][other_movie] = similarity[user][other_user]

    return movie_similarity

# 构建推荐系统
def build_recommendation_system(train_data, similarity, movie_similarity):
    recommendations = dict()
    for user in train_data['userId'].unique():
        user_ratings = train_data[train_data['userId'] == user]
        recommendations[user] = dict()
        for movie in train_data['movieId'].unique():
            if movie not in user_ratings['movieId'].unique():
                rating = 0
                num_movies = 0
                for other_user in similarity[user].keys():
                    if movie in train_data[train_data['userId'] == other_user]['movieId'].unique():
                        rating += similarity[user][other_user] * train_data[(train_data['userId'] == other_user) & (train_data['movieId'] == movie)]['rating'].values[0]
                        num_movies += 1
                if num_movies > 0:
                    recommendations[user][movie] = rating / num_movies

    return recommendations

# 计算评价指标
def calculate_metrics(recommendations, test_data):
    num_users = 0
    sum_of_squared_error = 0
    for user in recommendations.keys():
        if user in test_data['userId'].unique():
            num_users += 1
            for movie in recommendations[user].keys():
                if movie in test_data[test_data['userId'] == user]['movieId'].unique():
                    predicted_rating = recommendations[user][movie]
                    actual_rating = test_data[(test_data['userId'] == user) & (test_data['movieId'] == movie)]['rating'].values[0]
                    sum_of_squared_error += (predicted_rating - actual_rating) ** 2
    rmse = (sum_of_squared_error / num_users) ** 0.5

    return rmse

# 计算用户之间的相似度
similarity = calculate_similarity(train_data)

# 计算用户之间的相似度得分
similarity = calculate_similarity_score(train_data, similarity)

# 计算电影之间的相似度得分
movie_similarity = calculate_movie_similarity_score(train_data, similarity)

# 构建推荐系统
recommendations = build_recommendation_system(train_data, similarity, movie_similarity)

# 计算评价指标
rmse = calculate_metrics(recommendations, test_data)

마지막으로 추천 시스템의 결과와 평가 지표를 출력할 수 있습니다.

print(recommendations)
print('RMSE:', rmse)

위의 코드 예제를 사용하여 사용자 기반 사전을 성공적으로 구축했습니다. Python 협업 필터링 추천 시스템에서 모델을 만들고 평가 지표를 계산했습니다. 물론 이는 단순한 예시일 뿐이며, 실제 추천 시스템에서는 보다 정확한 추천 결과를 얻기 위해서는 더욱 복잡한 알고리즘과 대규모 데이터 세트가 필요합니다.

요약하자면, Python은 추천 시스템을 구축하기 위한 강력한 라이브러리와 도구를 제공하여 협업 필터링 알고리즘을 사용하여 사용자 간의 유사성을 추론하고 이러한 유사성을 기반으로 추천할 수 있습니다. 이 기사가 독자들이 Python에서 간단하지만 효과적인 추천 시스템을 구축하는 방법을 이해하고 추천 시스템 분야를 더 깊이 탐구하기 위한 몇 가지 아이디어를 제공하는 데 도움이 되기를 바랍니다.

위 내용은 Python으로 간단한 추천 시스템을 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.