Generierung eines empfohlenen Films unter Verwendung der Surprise-Bibliothek von Python | von Jhairo Garcia | Juni 2023

0
23


Wir empfehlen die Verwendung von Filmen mit den Daten von MovieLens

MovieLens Es handelt sich um eine virtuelle Net- und Neighborhood-Seite, die eine große Vielfalt an Datensätzen mit Punkten oder Bewertungen von Dateien enthält, die von den verschiedenen Mitgliedern der Neighborhood stammen. Enthält etwa 11 Meilen von Punkten für etwa 8500 Pelikula. Wurde 1997 von der Untersuchungsgruppe gegründet GroupLens Abteilung für Informatik und Ingenieurwesen an der Universidad de Minnesota.

Die Idee besteht darin, einen empfohlenen Movie zu erstellen, der auf einer kollaborativen Filtrierung basiert, die wie Daten aus einem Datensatz stammt MovieLens y que utilice los algorithmus de KNNBasic j KNNWithMeans Für die Erstellung eines Modells, das eine Bewertung oder „Bewertung“ nachweisen muss, sind ein Benutzeridentifikator und ein Movie erforderlich.

Um ein bestimmtes Ziel zu erreichen, müssen Sie zunächst das Gerät herunterladen und installieren Überraschung In der Umgebung der Arbeit (in diesem Fall in einer Bibliothek von Jupyter)

!pip set up scikit-surprise

Jetzt können Sie die Pandas-Bibliothek importieren und Shock verwenden

import pandas as pd
from shock import KNNBasic, KNNWithMeans
from shock import Dataset
from shock import Reader
from shock import accuracy
from shock.model_selection import train_test_split

Als Nächstes müssen Sie das Format der Zeilen oder Filas genau bestimmen, bevor Sie den Textual content lesen.Leser„Sie laden den Datensatz, der durch den „Pfad“ definiert wurde, durch den Schlüssel.“Datensatz”de Überraschung. Die erste Zeile muss die Anzahl der Kolumnen umfassen Benutzer, Artikel, Bewertung und Zeitstempel Und das ist ein Hinweis darauf, dass der Wert verloren geht ‚::‘. El archivo a cargar se llama ‚bewertungen.datSie befinden sich auf dem lokalen Laufwerk.

reader = Reader(line_format='consumer merchandise ranking timestamp', sep='::')
knowledge = Dataset.load_from_file('/content material/scores.dat', reader=reader)

Anschließend werden die Teilnehmerverbindungen definiert (zugeteilt). 70 % de los knowledge) y validacion (con un 30 % de los knowledge)

practice, take a look at = train_test_split(knowledge, random_state = 25, test_size=0.3)

Später definieren wir den Algorithmus KNNBasic (basiert auf dem KNN-Algorithmus) j KNNWithMeans (mit den Medien der Bewertungsmedien) mit den entsprechenden Parametern.

Index der Ähnlichkeit von Pearson

Mittlerweile ähnelt die Ähnlichkeit zwischen Benutzern oder Elementen im Zusammenhang mit der Filterung und Zusammenarbeit und weist darauf hin, dass sie Ähnlichkeiten mit den Präferenzen der Benutzer oder Elemente aufweisen, die sich auf die Funktion der Kalibrierungen oder Interaktionen beziehen.

r = (Σ[(X_i - X_avg) * (Y_i - Y_avg)]) / (sqrt(Σ(X_i - X_avg)^2) * sqrt(Σ(Y_i - Y_avg)^2))

Donde:

  • r Es ist der Korrelationskoeffizient von Pearson.
  • X_i j Y_i Es sind jeweils die Werte der Variablen X und Y enthalten.
  • X_avg j Y_avg Es handelt sich dabei um die Medien der Variablen X und Y.
  • Σ repräsentiert die Summe.

Indice de similitud coseno

Mittlerweile ähneln sie den Benutzern in der Funktion ihrer Kunden oder zwischen Elementen und Funktionen ihrer Attribute oder Merkmale

similarity = dot_product(A, B) / (norm(A) * norm(B))

Donde:

  • A j B Es gibt keine Vektoren, die es zu vergleichen gilt.
  • dot_product(A, B) Es ist das Produkt, das von den Vektoren heraufgestuft wird A j BDiese Berechnung multipliziert jedes Aspect, das den Vektoren entspricht und die Ergebnisse enthält.
  • norm(A) j norm(B) Sohn der euklidischen Normen der Vektoren A j B jeweils. Die euklidische Norm entspricht der Berechnung der Summe der vier Elemente des Vektors.

KNNBasic Verwenden Sie ein Busradio 50 Viel mehr, mit einem dem Koeffizienten entsprechenden Ähnlichkeitsindex Pearsonbasierend auf „usuario” Dentro de las opciones de simulación. Porotro lado, KNNWithMeans Verwenden Sie ein Busradio 50 Vecinos mas cercanos, mit einem Index der Ähnlichkeit, der a entspricht cosenobasierend auf „Pelikula” Dentro de las opciones de simulación.

knn = KNNBasic(okay=50, sim_options={'title': 'pearson', 'user_based': True})
kMeans = KNNWithMeans(okay=50, sim_options={'title': 'cosine','user_based': False})

Gehen Sie zu jedem einzelnen Algorithmus, um die Eingabemethode mit der Methode zu verbinden match. Tatsächlich können Sie darauf achten, dass der erste mit dem Index erstellt wird Ähnlichkeit mit Pearson y el segundo con el el index de ähnlichkeit coseno.

knn.match(practice)
kMeans.match(practice)
Computing the pearson similarity matrix...
Executed computing similarity matrix.
Computing the cosine similarity matrix...
Executed computing similarity matrix.
<shock.prediction_algorithms.knns.KNNWithMeans at 0x7f6345d45db0>

Um die Vorhersage der generierten Bewertungen durch einen einzigen Algorithmus zu treffen, werden die 10 ersten Benutzer-IDs und Artikel-IDs zusammen mit der Validierung und dem Vergleich mit den Originalbewertungen benötigt.

for uid, iid, ranking in take a look at[:10]:
print(f"Usuario: {uid}t Merchandise: {iid}t Ranking: {ranking}t KNN_est: {knn.predict(uid,iid).est:.1f}t KMeans_est: {kMeans.predict(uid,iid).est:.1f}t")
Usuario: 3751  Merchandise: 2517  Ranking: 3.0  KNN_est: 2.9  KMeans_est: 2.9 
Usuario: 1140 Merchandise: 3932 Ranking: 3.0 KNN_est: 3.7 KMeans_est: 3.6
Usuario: 3432 Merchandise: 2150 Ranking: 1.0 KNN_est: 4.0 KMeans_est: 3.2
Usuario: 4808 Merchandise: 662 Ranking: 3.0 KNN_est: 2.7 KMeans_est: 2.8
Usuario: 3292 Merchandise: 2583 Ranking: 4.0 KNN_est: 3.6 KMeans_est: 3.9
Usuario: 3568 Merchandise: 2202 Ranking: 3.0 KNN_est: 4.1 KMeans_est: 4.3
Usuario: 1547 Merchandise: 3148 Ranking: 5.0 KNN_est: 4.2 KMeans_est: 3.8
Usuario: 1546 Merchandise: 475 Ranking: 5.0 KNN_est: 4.0 KMeans_est: 4.2
Usuario: 5266 Merchandise: 1230 Ranking: 4.0 KNN_est: 4.4 KMeans_est: 4.2
Usuario: 5837 Merchandise: 1125 Ranking: 5.0 KNN_est: 3.9 KMeans_est: 4.2

Ich habe eine Prüfung mit Daten durchgeführt, die keinen Inhalt im Datensatz enthalten.

user_id = str(42)
item_id = str(7)
knn_user_prediction = knn.predict(user_id, item_id)
kMeans_user_prediction = kMeans.predict(user_id, item_id)
print(f"El ranking generado por el metodo KNN para el usuario {user_id} y la pelicula {item_id} es: {knn_user_prediction.est}")
print(f"El ranking generado poe el metodo KNNMeans para el usuario {user_id} y la pelicula {item_id} es: {kMeans_user_prediction.est}")
El ranking generado por el metodo KNN para el usuario 42 y la pelicula 7 es:  3.5253922902703017
El ranking generado poe el metodo KNNMeans para el usuario 42 y la pelicula 7 es: 3.5004632604541244

Ursache des mittelmäßigen Cuadratico-Fehlers

Mittlerweile könnte ein gutes Empfehlungsmodell den Anforderungen oder Präferenzen der Benutzer in Bezug auf die Daten des Unternehmens zuvorkommen. Da der Wert des RMSE noch geringer ist, ist die Modellvorhersage noch präziser

RMSE = sqrt(sum((y_true - y_pred)^2) / n)

Donde:

  • y_true Es ist die Tapferkeit, die du beobachtest.
  • y_pred Es ist die Tapferkeit, die geschätzt wird.
  • n Es ist die Gesamtzahl der Beobachtungen

Abschließend wird die Metrik der mittleren Fehlerrate (RMSE) durch einen von ihnen in Verbindung mit der Validierung verwendeten Algorithmus generiert.

knn_test_predictions = knn.take a look at(take a look at)
kMeans_test_predictions = kMeans.take a look at(take a look at)
knn_rmse = accuracy.rmse(knn_test_predictions)
kMeans_rmse = accuracy.rmse(kMeans_test_predictions)
print(f"La raiz del error cuadratico medio (RMSE) por el metodo KNN es: {knn_rmse}")
print(f"La raiz del error cuadratico medio (RMSE) por el metodo KNNMeans es: {kMeans_rmse}")
La raiz del error cuadratico medio (RMSE) por el metodo KNN es: 0.9636878906811673
La raiz del error cuadratico medio (RMSE) por el metodo KNNMeans es: 0.8962561561289004



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here