Erstellen Sie ein Empfehlungssystem mit Python

Überblick

Ich habe beschlossen, ein Empfehlungssystem bei Hackason einzurichten, also notiere es mir als Memorandum.

Erstellen Sie ein System, das Snacks empfiehlt, die zu Ihnen passen. Ich wollte es zu einem Modell für maschinelles Lernen machen, entschied mich jedoch für die kooperative Filterung, weil ich nicht genug Wissen und Zeit hatte.

Referenz

Erstellen Sie ein Empfehlungssystem mit Python (benutzerbasierte kooperative Filterung) Hinweise zur Implementierung einer einfachen Co-Filterung in Python Aufbau eines Empfehlungssystems mit kooperativer Filterung

Kooperative Filterung

Mit einem Wort: Co-Filterung (Empfehlungssystem) ** "Für Sie empfohlen" "Personen, die dieses Produkt gekauft haben, haben dieses Produkt auch gekauft" ** Das ist es. Sie kennen Amazon und Youtube.

Es ist grob in zwei Methoden unterteilt: Benutzerbasis und Artikel- (Produkt-) Basis. Schätzungen der benutzerbasierten Hervorhebungsfilterung ** Zielbenutzerbewertungen (unbekannt) ** aus ** bekannten Bewertungen anderer Benutzer **.

Kreuztabelle, euklidischer Abstand, Pearson-Korrelationskoeffizient,

Wie man Ähnlichkeit berechnet

Ähnlichkeit ist definiert als ** "hohe (niedrige) Bewertung des gleichen Produkts hat hohe Ähnlichkeit" **. Berechnen Sie die Ähnlichkeit anhand des Bewertungswerts für das Produkt jedes Benutzers

・ Je ähnlicher, desto kleiner ist der Wert der euklidischen Distanz. ・ Nehmen Sie die inverse Zahl, damit ähnliche höhere Punktzahlen erhalten ・ Wenn die Ähnlichkeit maximal ist, beträgt der euklidische Abstand 0, also addieren Sie 1

score= \frac{1}{(1+Euklidische Entfernung)}

・ Punktzahl gibt einen Wert von 0 bis 1 zurück. Je größer die Punktzahl, desto höher die Ähnlichkeit.

Eine ausführliche Erläuterung finden Sie unter Benutzerbasierte Co-Filterung unter Erstellen eines Empfehlungssystems mithilfe von Co-Filterung.

Implementierungsablauf

** (1) Extrahieren Sie Personen mit einer Ziel-Likörbewertung von 5 aus den Excel-Daten (Beispiel-Snack-Daten). (2) Ermitteln Sie die Ähnlichkeit zwischen der Bewertung von Zielsnacks (nur bekannte Teile) und Probensnackdaten. ③ Prognostizieren Sie den Bewertungswert des unbekannten Zielsnacks aus der Ähnlichkeit **

Vorbereitung der Daten

Die hier verwendeten Daten sind die Bewertung von Sake und die Bewertung von Snacks von 1 bis 5. Da es sich in der Testphase befindet, haben wir nur vier Daten vorbereitet. image.png

Die Daten unbekannter Benutzer sind wie folgt definiert. Suchen Sie den erwarteten Wert für andere Werte für diesen Benutzer.

target_data = [-1, -1, 5.0, -1, 4.0, -1, -1, 1.0, -1, -1, -1] #-1 ist KEIN

Der erwartete Wert der Snackbewertung bei Auswahl von Sake3 wird anhand der Bewertungswerte der Snacks 2 und 5 vorhergesagt.

(1) Extrahieren Sie Personen mit einer Ziel-Alkoholbewertung von 5 aus den Excel-Daten (Beispiel-Snack-Daten).

def findSameSakeList(sheet, userSakeReputation):
    SameSakeList = [] #Zweidimensionale Liste von Daten mit einer Flottenbewertung von 5 im Bild
    sampleLen = len(sheet.col_values(0))-1
    for i in range(sampleLen):
        row = sheet.row_values(i+1)
        if row[userSakeReputation] == 5:
            SameSakeList.append(row)
        else:
            pass
    return SameSakeList

sake_number = 2
wb = xlrd.open_workbook(r'C:\Users\daisuke\Desktop\voyage\testdata.xlsx')
sheet = wb.sheet_by_index(0)
samePersonList = findSameSakeList(sheet, sake_number) #Anwendbar

(2) Ermitteln Sie die Ähnlichkeit zwischen der Bewertung von Zielsnacks (nur bekannte Teile) und Probensnackdaten.

def get_similarities(samePersonList, target_data):
    similarities = []
    sampleLen = len(samePersonList)

    for j in range(sampleLen):#Zeilennummer des Blattes
        distance_list = []
        for i, value in enumerate(target_data):
            if value == -1:
                pass
            else:
                distance = value - samePersonList[j][i]
                distance_list.append(pow(distance, 2))

        similarities.append([j, 1/(1+np.sqrt(sum(distance_list)))])

    return sorted(similarities, key=lambda s: s[1], reverse=True)

③ Prognostizieren Sie den Bewertungswert des unbekannten Zielsnacks anhand der Ähnlichkeit

Prognose des Bewertungswertes

gewichteter Bewertungswert des entsprechenden Snacks des Probenbenutzers=Ähnlichkeit × Probenbewertungswert

Danach wird der Gesamtbewertungswert genommen und normalisiert.

Normalisierte Punktzahl= \frac{Gesamtpunktzahl für alle Benutzer des oben erhaltenen gewichteten Bewertungswerts}{Volle Ähnlichkeit der Bewerter}
def predict(samePersonList, similarities):#Berechnen Sie den vorhergesagten Bewertungswert, indem Sie die Ähnlichkeit mit dem Bewertungswert für alle gleichen Personen multiplizieren.
    predict_list = []
    for index, value in similarities:
        samePersonList[index] = [round(i*value,5) for i in samePersonList[index]] #Runde Brüche mit runden

    np_samePerson = np.array(samePersonList)
    np_samePerson = list(np.mean(np_samePerson, axis=0))

    for index, value in enumerate(np_samePerson):
        predict_list.append([index, value])
    return sorted(predict_list, key= lambda s: s[1], reverse=True)


samePersonList = findSameSakeList(sheet, sake_number    ) #Werteliste von 5 Personen mit ausgewählter Alkoholbewertung
similarities = get_similarities(samePersonList, target_data)
ranking = predict(samePersonList, similarities)
pprint.pprint(ranking)

 #Rang und Ausgabe normalisiert Socre
 #[[2, 1.225635],
 #[5, 1.100635],
 #[3, 0.850635],
 #[1, 0.745125],
 #[4, 0.725635],
 #[8, 0.620125],
 #[9, 0.6103799999999999],
 #[7, 0.605505],
 #[0, 0.48538],
 #[6, 0.125],
 #[10, 0.0]]


Sake gibt auch eine erwartete Bewertung

Recommended Posts

Erstellen Sie ein Empfehlungssystem mit Python
Machen Sie eine Lotterie mit Python
Lassen Sie uns eine GUI mit Python erstellen.
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Lassen Sie uns mit Python langsam sprechen
Erstellen Sie ein Webframework mit Python! (1)
Erstellen Sie eine Desktop-App mit Python mit Electron
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie ein Webframework mit Python! (2)
Machen Sie Twitter Trend Bot mit Heroku + Python
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Ersetzen wir UWSC durch Python (5) Machen wir einen Roboter
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Erstelle Puyopuyo AI mit Python
Erstellen Sie ein Lesezeichen in Python
Erstellen Sie ein Verzeichnis mit Python
Präsentationsunterstützungssystem mit Python3
Machen Sie ein Feuer mit kdeplot
Kombinieren Sie sich wiederholende Zeichenfolgen mit regulären Python-Ausdrücken zu einer.
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
[Übung] Erstellen Sie eine Watson-App mit Python! # 2 [Übersetzungsfunktion]
[Übung] Erstellen Sie eine Watson-App mit Python! # 1 [Sprachdiskriminierung]
[Lass uns mit Python spielen] Ein Haushaltsbuch erstellen
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Machen Sie mit Python einen Haltepunkt auf der c-Ebene
Erstellen Sie mit Python Pandas Py Installer ein CSV-Formatierungswerkzeug
Was ist Gott? Erstelle einen einfachen Chatbot mit Python
[Super einfach] Machen wir einen LINE BOT mit Python.
[Übung] Erstellen Sie eine Watson-App mit Python! # 3 [Klassifizierung der natürlichen Sprache]
Löse ABC163 A ~ C mit Python
Bedienen Sie den Belegdrucker mit Python
Python-Grafikhandbuch mit Matplotlib.
Machen Sie Apache Log CSV mit Python
Machen Sie einen Sound mit Jupyter Notebook
Löse ABC166 A ~ D mit Python
Verknüpfen Sie Python Enum mit einer Funktion, um es aufrufbar zu machen
Experimentieren Sie mit Python, um ein PDF für Selbstversorger für Kindle zu erstellen
Machen wir einen Blockbruch mit wxPython
Erstellen Sie eine virtuelle Umgebung mit Python!
Ich habe mit Python eine Lotterie gemacht.
Erstellen einer virtuellen Umgebung mit Python 3
Python / Machen Sie ein Diktat aus einer Liste.
Löse ABC168 A ~ C mit Python
[Python] Machen Sie die Funktion zu einer Lambda-Funktion
[Python] Generiere ein Passwort mit Slackbot
Löse ABC162 A ~ C mit Python
Empfehlungssystem mit Matrixzerlegung [Unüberwachtes Lernen mit Python Kapitel 10]
Machen Sie einen Filter mit einer Django-Vorlage
Löse ABC167 A ~ C mit Python
Löse ABC158 A ~ C mit Python
Akustische Signalverarbeitung beginnend mit Python-Lassen Sie uns ein dreidimensionales akustisches System erstellen
Machen wir mit xCAT einen Spacon
Erstellen Sie mit PySide einen Modelliterator
Machen Sie eine schöne Grafik mit Plotly
[Python] Erbt eine Klasse mit Klassenvariablen
Ich habe mit Python einen Daemon erstellt