Heim >Backend-Entwicklung >Python-Tutorial >So erstellen Sie ein einfaches Empfehlungssystem in Python

So erstellen Sie ein einfaches Empfehlungssystem in Python

王林
王林Original
2023-10-20 17:19:431082Durchsuche

So erstellen Sie ein einfaches Empfehlungssystem in Python

So erstellen Sie ein einfaches Empfehlungssystem in Python

Empfehlungssysteme sollen Menschen dabei helfen, Elemente zu entdecken und auszuwählen, die für sie von Interesse sein könnten. Python bietet eine Fülle von Bibliotheken und Tools, die uns beim Aufbau eines einfachen, aber effektiven Empfehlungssystems helfen können. In diesem Artikel wird erläutert, wie Sie mit Python ein benutzerbasiertes kollaboratives Filterempfehlungssystem erstellen und spezifische Codebeispiele bereitstellen.

Kollaborative Filterung ist ein gängiger Algorithmus für Empfehlungssysteme. Er schließt auf der Grundlage der Verhaltensverlaufsdaten der Benutzer auf Ähnlichkeiten zwischen Benutzern und verwendet diese Ähnlichkeiten dann, um Elemente vorherzusagen und zu empfehlen. Wir werden den MovieLens-Datensatz verwenden, der eine Reihe von Benutzerbewertungen von Filmen enthält. Zuerst müssen wir die erforderlichen Bibliotheken installieren:

pip install pandas scikit-learn

Als nächstes importieren wir die erforderlichen Bibliotheken und laden den MovieLens-Datensatz:

import pandas as pd
from sklearn.model_selection import train_test_split

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

Der Datensatz enthält userIdmovieIdratingdrei Spalten, die jeweils Benutzer-ID, Film-ID und Bewertung darstellen. Als nächstes teilen wir den Datensatz in Trainings- und Testsätze auf:

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

Jetzt können wir das Empfehlungssystem aufbauen. Hier verwenden wir die Kosinusähnlichkeit zwischen Benutzern als Ähnlichkeitsmaß. Wir werden zwei Wörterbücher erstellen, um die Ähnlichkeitswerte von Benutzern und Filmen zu speichern:

# 计算用户之间的相似度
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)

Schließlich können wir die Ergebnisse und Bewertungsmetriken des Empfehlungssystems ausgeben:

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

Mit dem obigen Codebeispiel haben wir erfolgreich ein benutzerbasiertes Wörterbuch erstellt Modell im Python Collaborative Filtering-Empfehlungssystem und seine Bewertungsindikatoren werden berechnet. Dies ist natürlich nur ein einfaches Beispiel, und tatsächliche Empfehlungssysteme erfordern komplexere Algorithmen und größere Datensätze, um genauere Empfehlungsergebnisse zu erhalten.

Zusammenfassend bietet Python leistungsstarke Bibliotheken und Tools zum Aufbau von Empfehlungssystemen. Wir können kollaborative Filteralgorithmen verwenden, um auf Ähnlichkeiten zwischen Benutzern zu schließen und auf der Grundlage dieser Ähnlichkeiten Empfehlungen abzugeben. Ich hoffe, dass dieser Artikel den Lesern helfen kann, zu verstehen, wie man ein einfaches, aber effektives Empfehlungssystem in Python erstellt, und einige Ideen für die weitere Erforschung des Bereichs der Empfehlungssysteme liefert.

Das obige ist der detaillierte Inhalt vonSo erstellen Sie ein einfaches Empfehlungssystem in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn