[PYTHON] Koordinierte Filterung mit Hauptkomponentenanalyse und K-Mittel-Clustering

Erwägen Sie die Verwendung der API der Empfehlungs-Engine

Die Empfehlungs-Engine wird häufig in WEB-APIs usw. verwendet und muss schnell Ergebnisse liefern, während die Genauigkeit erhalten bleibt. Daher verwenden wir in diesem Artikel bei der Implementierung der Empfehlungsfunktion basierend auf dem Betrachtungsverlauf des Films die Hauptkomponentenanalyse und das K-Mittel-Clustering, um die Empfehlungsgenauigkeit so weit wie möglich aufrechtzuerhalten und sie mit der Berechnungsgeschwindigkeit abzugleichen, damit sie der Verwendung der API standhält. Nehmen.

Die diesmal verwendete Empfehlungslogik ist eine einfache artikelbasierte kooperative Filterung, die Filme mit ähnlichen Benutzerbewertungen für den ausgewählten Film extrahiert und empfiehlt.

Hauptkomponentenanalyse und K-Mittel-Clustering

Die Hauptkomponentenanalyse (PCA) ist eine Methode, die nur die Hauptkomponenten hochdimensionaler oder überdimensionaler Vektoren extrahiert und die Dimensionen des Vektors verringert, um die Datenmenge zu verringern. Da die Anzahl der Dimensionen nach der Hauptkomponentenanalyse im Voraus bestimmt werden kann, kann die Datenmenge auch durch Bestimmen der Dimensionen der Hauptkomponente bestimmt werden, so dass die Berechnungsmenge konstant gehalten werden kann, selbst wenn die Dimensionen des zu analysierenden Quellvektors enorm werden.

Darüber hinaus werden wir durch ein gewisses Maß an Clustering mit Kmeans-Clustering die zu bewertenden Filme einschränken, die Anzahl der Vergleiche verringern und darauf abzielen, die Reaktionsgeschwindigkeit zu verbessern.

Dieses Mal verwenden wir MovieLens, einen kostenlosen Datensatz für Filmbewertungen. https://grouplens.org/datasets/movielens/100k/

Grob gesagt. .. .. ..

Sie sollten auch Filme mögen, die ähnliche Bewertungen von Benutzern haben wie die Filme, die Sie mögen! !! Es wäre jedoch schwierig, mit allen zu vergleichen, da dies lange dauern würde. Bilden Sie also zuerst eine Gruppe von Personen, die ungefähr ähnlich sind (Clustering), und extrahieren Sie nur die Bewertung des Films, die wichtiger zu sein scheint (Hauptkomponentenanalyse). ) Lass uns vergleichen!

Ein bisschen mehr über die Hauptkomponentenanalyse

Wenn Sie beispielsweise Bewertungsdaten für 10.000 Filme haben und es Filme gibt, die jeder sieht, oder Daten, die fast niemand sieht, sind dies keine sehr guten Informationen, sodass Sie sie vom Vergleich ausschließen können. .. Lassen Sie uns auf ungefähr 100 eingrenzen, die leicht zu ermitteln sind. (Genau genommen ist es anders, aber es ist fast so.)

Daten bekommen

https://grouplens.org/datasets/movielens/100k/ Laden Sie ml-100k.zip von herunter und entpacken Sie es. Es sind einige Dateien enthalten, die jedoch in der README-Datei erläutert werden. Dieses Mal benutze ich hauptsächlich u1.base.

Programm

Ich werde einen Kommentar in das Programm schreiben und ihm wie folgt folgen.

recommend.py


import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans

#TSV-Formatdaten lesen
datum = np.loadtxt("u1.base", delimiter="\t", usecols=(0, 1, 2), skiprows=1)

#Bereiten Sie eine Liste mit Benutzer- und Film-IDs vor
user_ids = []
movie_ids = []
for row in datum:
    user_ids.append( row[0] )
    movie_ids.append( row[1] )
user_ids = list(set(user_ids))
movie_ids = list(set(movie_ids))

#Organisieren Sie die Bewertungsdaten nach Film-ID
vectors = {}
for movie_id in sorted(movie_ids):
    vectors[movie_id] = {}
    for user_id in user_ids:
        #Filme, die Sie nicht gesehen haben, sind die Standardeinstellung-1 Bewertung
        vectors[movie_id][user_id] = -1

#Speichern Sie jede Benutzerbewertung in einem Vektor
for row in datum:
    vectors[row[1]][row[0]] = row[2]

dataset = []

#Daten formatieren
for movie_id in vectors:
    temp_data = []
    for user_id in sorted(vectors[movie_id]):
        temp_data.append(vectors[movie_id][user_id])
    dataset.append(temp_data)

#Von Kmeans in 3 Cluster eingeteilt
predict = KMeans(n_clusters=3).fit_predict(dataset)

#Anzahl der Dimensionen nach Hauptkomponentenanalyse
DIMENTION_NUM = 128
#Hauptkomponentenanalyse
pca = PCA(n_components=DIMENTION_NUM)
dataset = pca.fit_transform(dataset)
print('Kumulativer Beitragssatz: {0}'.format(sum(pca.explained_variance_ratio_)))

#Suchen Sie einen Film ähnlich dem Film ID1
MOVIE_ID = 1
#Rufen Sie die Cluster-ID der Film-ID1 ab
CLUSTER_ID = predict[movie_ids.index(MOVIE_ID)]

distance_data = {}
for index in range(len(predict)):
    #Vergleichen Sie die Vektorabstände, wenn sie sich im selben Cluster befinden
    if predict[index] == CLUSTER_ID:
        distance = np.linalg.norm( np.array(dataset[index], dtype=float) - np.array(dataset[movie_ids.index(MOVIE_ID)], dtype=float) )
        distance_data[movie_ids[index]] = distance

#Anzeige in der Reihenfolge der Vektorentfernung
print(sorted(distance_data.items(), key=lambda x: x[1]))

Ergebnis

Kumulativer Beitragssatz: 0.7248119795849713
[(1.0, 0.0), (121.0, 67.0315681132561), (117.0, 69.90161652852805), (405.0, 71.07049485275981), (151.0, 71.39559068741323), (118.0, 72.04600188124728), (222.0, 72.78595965661094), (181.0, 74.18442192660996), (742.0, 76.10520742268852), (28.0, 76.27732956739469), (237.0, 76.31850794116573), (25.0, 76.82773190547944), (7.0, 76.96541606511116), (125.0, 77.07961442692692), (95.0, 77.42577990621398), (257.0, 77.87452368514414), (50.0, 78.80566867021435), (111.0, 78.9631520879044), (15.0, 78.97825600046046), (69.0, 79.22663656944697), (588.0, 79.64989759225082), (82.0, 80.23718315576053), (71.0, 80.26936193506091), (79.0, 81.02025503780014).....

Der Film mit ID = 1 war Toy Story und der nächste Film ID = 121 war Independence Day. Der Beitragssatz von 0,72 bedeutet, dass etwa 72% der Originaldaten nur mit den Hauptkomponenten wiederhergestellt werden können. Ich habe das Gefühl, ich kann es irgendwie verstehen! !! !!

Nachfolgende Implementierung

Dieses Mal habe ich Datenformung, Clustering, Hauptkomponentenanalyse und Vergleich mit einem Skript durchgeführt. Ursprünglich werden die Daten, die für die Hauptkomponenten analysiert wurden, in der Datenbank gespeichert und so implementiert, dass jedes Mal nur der Vergleich durchgeführt wird.

Da Filmdaten und Auswertungsdaten täglich zunehmen, werden wir außerdem einen geeigneten Zeitraum festlegen und das Clustering und die Hauptkomponentenanalyse in Stapeln wiederholen.

Bei der Konvertierung in API werden wir die Empfehlungsgenauigkeit und die Antwortgeschwindigkeit anpassen, indem wir die Anzahl der Dimensionen und Cluster der Hauptkomponente, des API-Caches usw. vollständig nutzen. Diese * Empfehlungsgenauigkeit * lässt sich zunächst daran erkennen, ob sie zu einem Sinn passt oder nicht. Wenn Sie jedoch das Deep Learning, das die tatsächlichen Daten in Kombination mit CTR und CVR berücksichtigt, in vollem Umfang nutzen, wird es noch moderner. Es ist wie maschinelles Lernen.

Das nächste Mal werde ich über die Verwendung von Pythons Flasche usw. schreiben, um daraus eine API zu machen.

Recommended Posts

Koordinierte Filterung mit Hauptkomponentenanalyse und K-Mittel-Clustering
Clustering und Hauptkomponentenanalyse nach der K-Means-Methode (Anfänger)
Dimensionskomprimierung durch Selbstcodierer- und Hauptkomponentenanalyse
Hauptkomponentenanalyse mit Spark ML
Hauptkomponentenanalyse mit Livedoor News Corpus --Practice--
Hauptkomponentenanalyse mit Livedoor News Corpus - Vorbereitung--
Ich habe versucht, die Hauptkomponenten mit Titanic-Daten zu analysieren!
Co-Filterung mit PySpark
Hauptkomponentenanalyse (Hauptkomponentenanalyse: PCA)
Beginnen wir mit der multivariaten Analyse und der Hauptkomponentenanalyse mit Pokemon! Zusammenarbeit zwischen R und Tableau
Fordern Sie die Hauptkomponentenanalyse von Textdaten mit Python heraus
Hauptkomponentenanalyse mit Python von nim mit nimpy
Hauptkomponentenanalyse (PCA) und unabhängige Komponentenanalyse (ICA) mit Python
Ich habe versucht, Co-Filtering (Empfehlung) mit Redis und Python zu implementieren
Lernen ohne Lehrer 3 Hauptkomponentenanalyse
[Empfehlung] Inhaltsbasierte Filterung und kooperative Filterung
Hauptkomponentenanalyse zum Anfassen mit PyCaret [Normalisierung + Visualisierung (grafisch)] Memo
Fotosegmentierung und Clustering mit DBSCAN
Gesichtserkennung mit Hauptkomponentenanalyse
Erklärbare KI ~ Erklärbares k-Mittel- und k-Median-Clustering ~
Erkennen Sie die Kontur und Richtung eines geformten Objekts mit OpenCV3 und Python3 (Hauptkomponentenanalyse: PCA, Eigenvektor)
Die grundlegendste Clusteranalyse mit Scikit-Learn
Unüberwachte Textklassifizierung mit Doc2Vec und k-means
Tweet-Analyse mit Python, Mecab und CaboCha
<Kurs> Maschinelles Lernen Kapitel 4: Hauptkomponentenanalyse
[Python] Vergleich der Theorie und Implementierung der Hauptkomponentenanalyse durch Python (PCA, Kernel PCA, 2DPCA)
Extrahieren Sie die Farbe des Objekts im Bild mit Mask R-CNN und K-Means Clustering
Komprimieren Sie Vektoren mithilfe der Hauptkomponentenanalyse in zwei Dimensionen und visualisieren Sie sie mit matplotlib.
PRML Kapitel 12 Bayesianische Hauptanalyse Python-Implementierung