Künstliche Intelligenz 5 Min. Lesezeit

Schritt-für-Schritt-Anleitung zur Einrichtung und Implementierung eines Empfehlungssystems mit der Surprise-Bibliothek für Machine-Learning-Enthusiasten

PROFSCODE Ekibi 26 Jul 2026
Paylaş:
Aufbau eines einfachen Empfehlungssystems mit kollaborativem Filtern in Python

In der heutigen digitalen Welt ist einer der Schlüssel zur Personalisierung der Benutzererfahrung ein effektives Empfehlungssystem. Von Netflix' Filmvorschlägen bis zu Amazons Produktempfehlungen erhöhen viele Plattformen die Interaktion, indem sie ihren Benutzern ansprechende und relevante Inhalte anbieten. In diesem Artikel werden wir Softwareentwicklern und KI-Enthusiasten Schritt für Schritt beibringen, wie man ein einfaches kollaboratives Filter-basiertes Empfehlungssystem mit der leistungsstarken Python-Bibliothek Surprise einrichtet und implementiert.

Was ist kollaboratives Filtern?

Kollaboratives Filtern (Collaborative Filtering) ist eine Methode, um neue Empfehlungen auf der Grundlage vergangener Verhaltensweisen und Interaktionen von Benutzern oder Elementen zu erstellen. Es gibt grundsätzlich zwei Hauptansätze:

  • Benutzerbasiertes kollaboratives Filtern: Findet Benutzer mit ähnlichen Geschmäckern und macht Empfehlungen, indem es davon ausgeht, dass, wenn ein Benutzer etwas mochte, ähnliche Benutzer es auch mögen würden.
  • Elementbasiertes kollaboratives Filtern: Findet Elemente, die den von einem Benutzer gemochten Elementen ähneln, und empfiehlt diese ähnlichen Elemente dem Benutzer.

In diesem Artikel werden wir uns auf einen moderneren Ansatz konzentrieren, der Matrixfaktorisierungsalgorithmen wie SVD (Singular Value Decomposition) verwendet, die sowohl Benutzer- als auch Elementähnlichkeiten intern behandeln.

Einführung in die Surprise-Bibliothek

Surprise ist eine Python-Bibliothek, die die Entwicklung von Empfehlungssystemen im Bereich des maschinellen Lernens vereinfacht. Sie ermöglicht es Ihnen, verschiedene Algorithmen (SVD, NMF, k-NN usw.) einfach mit Benutzerbewertungsdaten anzuwenden und Modelle zu bewerten. Die Installation ist recht einfach:

pip install scikit-surprise

Datenvorbereitung

Für Empfehlungssysteme benötigen wir typischerweise einen Datensatz, der aus user_id-, item_id- und rating- (oder Interaktions-)Spalten besteht. In diesem Beispiel simulieren wir einen kleinen Teil des MovieLens 100k-Datensatzes.

import pandas as pdfrom surprise import Dataset, Readerfrom surprise.model_selection import train_test_split, cross_validate# Beispieldaten erstellen (in realen Anwendungen aus einer Datenbank oder Datei gelesen)data = {    'user_id': ['user1', 'user1', 'user2', 'user2', 'user3', 'user3', 'user1', 'user2', 'user3'],    'item_id': ['itemA', 'itemB', 'itemB', 'itemC', 'itemA', 'itemC', 'itemC', 'itemA', 'itemB'],    'rating': [4, 3, 5, 4, 3, 2, 5, 4, 3]}df = pd.DataFrame(data)# Ein Reader-Objekt erstellen, das die Surprise-Bibliothek versteht. Das Reader-Objekt definiert die Bewertungsskalareader = Reader(rating_scale=(1, 5))# Den DataFrame in das 'Dataset'-Format der Surprise-Bibliothek laden (mithilfe der load_from_df-Methode)data_surprise = Dataset.load_from_df(df[['user_id', 'item_id', 'rating']], reader)print("Datensatz erfolgreich geladen.")

Modellauswahl und Training

Die Surprise-Bibliothek bietet viele Algorithmen. Wir werden unser Modell mit einem der beliebtesten und effektivsten Algorithmen, SVD (Singular Value Decomposition), trainieren. SVD lernt latente Faktoren, indem es die Bewertungsmatrix in zwei kleinere Matrizen zerlegt.

from surprise import SVD# Daten in Trainings- und Testsätze aufteilen (ähnlich traditionellen maschinellen Lernmethoden)trainset, testset = train_test_split(data_surprise, test_size=0.25, random_state=42)# SVD-Algorithmus initialisieren und trainierenalgo = SVD(random_state=42, n_epochs=20, lr_all=0.005, reg_all=0.02)algo.fit(trainset)print("Modell erfolgreich trainiert.")

Modellbewertung

Um zu bewerten, wie gut unser trainiertes Modell Vorhersagen trifft, werden üblicherweise Metriken wie RMSE (Root Mean Squared Error) und MAE (Mean Absolute Error) verwendet. Niedrigere Werte deuten auf eine bessere Leistung hin.

from surprise import accuracy# Vorhersagen auf dem Testsatz treffenpredictions = algo.test(testset)# RMSE- und MAE-Werte berechnenaccuracy.rmse(predictions, verbose=True)accuracy.mae(predictions, verbose=True)

Vorhersagen treffen und Empfehlungen generieren

Unser Modell ist nun bereit, neue Vorhersagen zu treffen. Wir können vorhersagen, welche Bewertung ein bestimmter Benutzer einem bestimmten Element geben wird.

# Vorhersage, welche Bewertung user1 für itemD geben wirdprediction_user1_itemD = algo.predict('user1', 'itemD')print(f"Vorhergesagte Bewertung für user1 für itemD: {prediction_user1_itemD.est:.2f}")# Vorhersage, welche Bewertung user3 für itemA geben wirdprediction_user3_itemA = algo.predict('user3', 'itemA')print(f"Vorhergesagte Bewertung für user3 für itemA: {prediction_user3_itemA.est:.2f}")

Sehen wir uns nun an, wie man einem Benutzer die Top-3-Empfehlungen aus Elementen gibt, die er noch nicht bewertet hat:

def get_top_n_recommendations(predictions, user_id, n=3):    # Alle Vorhersagen für den Benutzer filtern    user_predictions = [pred for pred in predictions if pred.uid == user_id]    # Nach geschätzter Bewertung sortieren    user_predictions.sort(key=lambda x: x.est, reverse=True)    # Die Top n Empfehlungen abrufen    top_n = user_predictions[:n]    return [(item.iid, item.est) for item in top_n]# Erstellen wir Vorhersagen für alle Benutzer und Elemente (einschließlich derer, die nicht im Trainingssatz enthalten sind)all_predictions = []for uid in df['user_id'].unique():    for iid in df['item_id'].unique():        # Nur für Elemente vorhersagen, die der Benutzer noch nicht bewertet hata        if not ((df['user_id'] == uid) & (df['item_id'] == iid)).any():            all_predictions.append(algo.predict(uid, iid))# Die Top 3 Empfehlungen für 'user1' abrufentop_3_for_user1 = get_top_n_recommendations(all_predictions, 'user1', n=3)print(f"Top 3 Empfehlungen für user1: {top_3_for_user1}")# Die Top 3 Empfehlungen für 'user2' abrufentop_3_for_user2 = get_top_n_recommendations(all_predictions, 'user2', n=3)print(f"Top 3 Empfehlungen für user2: {top_3_for_user2}")

Fazit

In diesem Artikel haben Sie gelernt, wie man ein einfaches, aber effektives Empfehlungssystem unter Verwendung der Prinzipien des kollaborativen Filterns mit der Python-Bibliothek Surprise erstellt. Wir haben alle Schritte praxisnah behandelt, von der Vorbereitung Ihres Datensatzes und dem Training Ihres Modells mit dem SVD-Algorithmus bis zur Bewertung der Leistung und schließlich der Bereitstellung personalisierter Empfehlungen für Benutzer. Aufbauend auf dieser Grundlage können Sie Ihr System mit hybriden Empfehlungssystemen, Lösungen für Kaltstartprobleme oder fortgeschrittenen Algorithmen weiterentwickeln. Entdecken Sie diese praktische Anwendung der künstlichen Intelligenz weiter!

Zurück zum Blog

Kommentare (0)

Noch keine Kommentare. Seien Sie der Erste!

Kommentar absenden