Einführung in sie gemacht mit Python ~ Tinder Automatisierungsprojekt ~ Episode 6

Inhaltsverzeichnis

Was ich getan habe Hauptveranstaltungen
Episode 1 Automatisches Wischen nach rechts
Episode 2 Automatisches Senden von Nachrichten Mit einer Frau abgestimmt
Folge 3 Bibliothek Austauschlinie mit einer passenden Frau
Nummer 3.Folge 5 Wiedererlangung des Zugriffstokens Tokens konnten mit dem vorherigen Code nicht erhalten werden
Folge 4 Datensammlung LINE-Antworten kommen nicht mehr
Folge 5 Datenanalyse Profiltext Informationsprodukte wurden von Leuten empfohlen, mit denen ich befreundet war
Folge 6 Datenanalyse Bildausgabe Ein echtes Bekanntschaftsmädchen ruft mich kürzlich spät in der Nacht an(?)

Der Code kann von [GitHub] git angezeigt werden.

Synopse bis zum letzten Mal

Aktuelle Situation

Ich habe in letzter Zeit nicht geschlafen. Es scheint, dass eine andere Bekanntschaft sie gemacht hat. Dieser Verräter ist ... Übrigens habe ich neulich eine GPU bekommen, also lerne ich ab dieser Zeit damit.

Geschichte früherer Forschungen

Ich bin nicht der erste, der daran denkt, ein Modell in Tinders Swipe-Strategie zu integrieren. Selbst wenn ich es nur nachgeschlagen habe, Leute, die nur diejenigen streichen, die ein Gesichtsfoto haben [1], Leute, die DNN ihr Lieblingsfoto lernen lassen und [2] [3] über das Gesicht streichen Es wurde jemand [4] gefunden, der beurteilte, ob es verarbeitet wurde oder nicht.

... Nun, was wollten wir machen?

Maschinelles Lernen ist ein Ärgernis und es macht Spaß, sich zu bewegen. Wenn Sie es bemerken, weichen Ihre Ziele von Ihren ursprünglichen Zielen ab. Zurück zum Ausgangspunkt, wir haben angefangen, Code zu schreiben, weil sie es wollte. Die meisten Informationen, die aus der Welt kommen, sind Code, um "nicht unnötigen Personen zu entsprechen", aber wir brauchen Code, um "so vielen Personen wie möglich zu entsprechen". Die aktuelle Situation ist schließlich, ob eine Person pro Tag übereinstimmen soll oder nicht. Wenn Sie also einer Person entsprechen, die Sie nicht mögen, können Sie sie manuell abbrechen [^ 1](Eine große Anzahl von Übereinstimmungen tritt auf und Sie können manuell abbrechen Dies ist natürlich nicht der Fall für diejenigen, die in Schwierigkeiten sind, weil sie nicht mithalten können.) Was tun Sie, indem Sie den Bereich der Begegnungen von sich selbst einschränken [^ 2]?

[5] ist hilfreich in Bezug auf die Bemühungen, sie zu machen. Anstatt nach Personen zu suchen, die wahrscheinlich übereinstimmen, wie wir es jetzt versuchen, versuchen wir, den Ansatz zu verfolgen, "ein Profil zu erstellen, das so viele Personen wie möglich erreicht". Wenn der verwendete Matching-Service unterschiedlich ist, kann die Bewertungsstrategie des Benutzers unterschiedlich sein, sodass sie nicht einfach angewendet werden kann, aber ich denke, dass dies ein interessanter Versuch ist. Ich würde es gerne eines Tages mit Tinder versuchen, aber werde ich in diesem Fall mehrere Profile mit unterschiedlichen Sätzen zur Selbsteinführung erstellen und einen A / B-Test [^ 3] durchführen und das Lernen basierend auf dieser Punktzahl stärken? .. Diese Richtlinie wurde für mich auf Eis gelegt, da erwartet wird, dass es lange dauern wird und eine große Anzahl von Telefonnummern, um genügend Daten zu sammeln, und ehrlich gesagt ist es ärgerlich. Laut [5] ist es für Frauen einfacher, nach rechts zu streichen, wenn Sie in Ihr Profil entsprechende Beschreibungen zu "Bildung", "Kind wollen", "Sozialität" und "Alkohol" aufnehmen [^ 4].

Bilderkennung

Ich habe oben eine lange zusätzliche Sache geschrieben, aber der Punkt ist

--In: Profilbild --Out: Ob es passt

Es ist eine Geschichte, die ich zu einer maschinellen Lernmaschine machen möchte.

Modellbau

In Bezug auf die Bilderkennung verwenden wir CNN, um zu schätzen, ob aus dem Profilbild eine Übereinstimmung hergestellt wird oder nicht. Laden Sie zunächst das Bild aus dem Datenordner.

analytics.py


import pandas as pd
import cv2
import numpy as np
from tqdm.notebook import tqdm
import os
import re

filePath = "data/tinder.xlsx"
imagePath = "data/photos"

df = pd.read_excel(filePath)
df.drop_duplicates(inplace=True, subset="id")
df.set_index("id", inplace=True)

X=[]
y=[]
for fileName in tqdm(os.listdir(imagePath)):
    try:
        id_ = re.match("([a-z0-9]*)-\d( \(\d\))?.jpg ",fileName).group(1)
        match = df.loc[id_]["match"]
        filePath = os.path.join(imagePath, fileName)
        img = cv2.imread(filePath)
        img = cv2.resize(img, (120,120))
        X.append(img)
        y.append(match)
    except:
        pass
X=np.asarray(X)
y=np.asarray(y)

Die Größe des Bildes ist auf 120 * 120 vereinheitlicht. Teilen Sie das geladene Bild durch 255, damit es in den Bereich 0-1 passt, und teilen Sie es in Zug und Test.

analytics.py


from sklearn.model_selection import train_test_split

X = X/255
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8888)

Nachdem die Daten fertig sind, erstellen wir das CNN. Dieses Mal haben wir ein Modell von 2 Schichten Faltungsschicht + 2 Schichten vollständig verbundener Schicht erstellt.

analytics.py


import keras
from keras.models import Sequential
from keras.layers import Conv2D, Dense, ReLU, Dropout, Flatten, MaxPool2D

def getModel():
    model=Sequential()
    model.add(Conv2D(3,3,input_shape=(120,120,3)))
    model.add(ReLU())
    model.add(MaxPool2D((2,2)))
    model.add(Dropout(0.25))
    model.add(Conv2D(3,3,padding="same"))
    model.add(ReLU())
    model.add(MaxPool2D((2,2)))
    model.add(Dropout(0.25))
    model.add(Flatten())
    model.add(Dense(1024))
    model.add(Dense(2,activation="softmax"))
    return model

Wir werden trainieren und Vorhersagen treffen.

analytics.py


model = getModel()
model.compile(optimizer=Adam(), loss='categorical_crossentropy', metrics=["accuracy"])
model.fit(X_train, to_categorical(y_train), epochs=30, validation_data=(X_test, to_categorical(y_test)))

y_pred = model.predict(X_test)
y_pred = np.exp(y_pred)
y_pred = (y_pred/np.sum(y_pred, axis=1).reshape(-1,1))[:,1]
print(roc_auc_score(y_test, y_pred))
#>>0.5116927510028815

auc0.51 ... Ist es besser als zufällig? Es ist nicht sehr nützlich. Es gibt nur wenige übereinstimmende Daten ...

Daher möchte ich versuchen, das Lernen zu übertragen. Beim Transferlernen wird ein Modell, das zuvor für eine Aufgabe geschult wurde, auf andere Aufgaben angewendet. Im Bilderkennungsmodell von CNN ist empirisch bekannt, dass die Faltungsschicht die universellen Merkmale des Bildes zu extrahieren scheint, und es gibt ein Modell, das eine andere Aufgabe erledigt, indem es die letzte vollständig verbundene Schicht ordnungsgemäß neu erstellt. Es ist geschafft [6].

image.png Aus CS231n: Faltungsneurale Netze für die visuelle Erkennung, Vorlesung 7

Dieses Mal werde ich basierend auf VGG16 eine vollständig verbundene Ebene hinzufügen und die Übereinstimmungswahrscheinlichkeit ausgeben.

analytics.py


#Die Datenaufbereitung ist dieselbe wie zuvor, X._train, y_train, X_test, y_Es wird davon ausgegangen, dass der Test bereits vorbereitet wurde.
from keras.applications.vgg16 import VGG16

def getModel():
    model = VGG16(weights="imagenet", include_top=False)
    x = model.output
    x = GlobalAveragePooling2D()(x)
    predictions = Dense(1, activation="linear")(x)
    model = Model(inputs=model.input, outputs=predictions)
    for layer in model.layers[:-3]:
        layer.trainable=False
    return model

model = getModel()
model.compile(optimizer=Adam(), loss="mse", metrics=["mse"])
model.fit(X_train, y_train, epochs=10, validation_data=(X_test, y_test))
y_pred = model.predict(X_test)
print(roc_auc_score(y_test, y_pred))
#>>0.6025131864722308

Auc überschritt sicher 0,6. Ich denke, wir haben endlich ein brauchbares Modell fertiggestellt. Nächstes Mal werden wir endlich eine passende Person finden, die auf Sätzen, Bildern und Tabellendaten basiert. Ich möchte es vor Weihnachten fertigstellen.

Warten! Meine zukünftige Freundin! !!

Verweise

[1]https://note.mu/sarasara201512/n/n20ec9765a387 [2]https://qiita.com/KR_bangkok/items/00b5ed45f5a8c1428960 [3]https://github.com/joelbarmettlerUZH/auto-tinder [4]https://blog.aidemy.net/entry/2018/07/05/172157 [5]https://qiita.com/data_psyence/items/54bab846337fe1ca61e4 [6]https://qiita.com/ANNEX_IBS/items/55c7a8984fe88a756965

[^ 1]: Aus diesem Grund ziehen wir nicht in Betracht, obstruktive Konten für geschäftliche Werbung mechanisch zu eliminieren. Auch wenn Sie sich nicht die Mühe machen, ein Modell herzustellen, können Sie es sofort verstehen, indem Sie tatsächlich sprechen. [^ 2]: Natürlich kann das Vorhandensein oder Fehlen eines Gesichts als Merkmalsgröße verwendet werden. [^ 3]: Neulich habe ich mich mit einer Google-Person angefreundet, aber er sagte, sein Kollege sei von der Universität Kyoto und habe einen A / B-Test mit oder ohne Ausfüllen der Spalte mit dem akademischen Hintergrund zur Selbsteinführung durchgeführt. Infolgedessen "wurde sowohl mit als auch ohne den Universitätsnamen (Universität Kyoto), der mit 0 Frauen übereinstimmte, kein signifikanter Unterschied festgestellt." Das Ende war so traurig, dass ich keine weiteren Details hören konnte. [^ 4]: Es funktioniert, weil das Fragenelement "Möchtest du ein Kind?" Standardmäßig vorhanden ist und ich das Gefühl habe, dass ich gemieden würde, wenn ich mir die Mühe mache, solche Inhalte in Tinder zu schreiben, was eine kostenlose Beschreibung ist.

Recommended Posts

Einführung in sie gemacht mit Python ~ Tinder Automatisierungsprojekt ~ Episode 6
Einführung in sie gemacht mit Python ~ Tinder Automatisierungsprojekt ~ Episode 5
IPynb-Bewertungssystem mit TA von Introduction to Programming (Python)
Einführung in das Auffüllen von Python-Bildern Auffüllen von Bildern mit ImageDataGenerator
[Einführung in Python] Verwenden wir foreach mit Python
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
Einführung in die künstliche Intelligenz mit Python 1 "Genetic Algorithm-Theory-"
Markov Chain Artificial Brainless mit Python + Janome (1) Einführung in Janome
Markov-Kette Künstlich Gehirnlos mit Python + Janome (2) Einführung in die Markov-Kette
Einführung in die künstliche Intelligenz mit Python 2 "Genetic Algorithm-Practice-"
Einführung in Tornado (1): Python Web Framework mit Tornado gestartet
Einführung in den Formationsflug mit Tello edu (Python)
Einführung in Python mit Atom (unterwegs)
Einführung in das Generalized Linear Model (GLM) von Python
[Einführung in die Udemy Python3 + -Anwendung] 9. Drucken Sie zunächst mit print
Einführung in die Python-Sprache
Einführung in OpenCV (Python) - (2)
[Einführung in Python] Wie iteriere ich mit der Bereichsfunktion?
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Einführung in die verteilte Parallelverarbeitung von Python durch Ray
Einführung in die Mathematik ab Python Study Memo Vol.1
Lesehinweis: Einführung in die Datenanalyse mit Python
Ich habe versucht, Othello dazu zu bringen, Kindern Python3 beizubringen (6) Final
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Automatisierung] Betreiben Sie GitLab mit Python, um die Verwaltung von Anfragen zu vereinfachen
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Stellen Sie mit Python eine Verbindung zu BigQuery her
Einführung in Python Django (2) Win
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich habe einen Blackjack mit Python gemacht!
Stellen Sie mit Python eine Verbindung zu Wikipedia her
Post to Slack mit Python 3
Ich habe eine einfache Buch-App mit Python + Flask ~ Introduction ~ erstellt
Einführung in RDB mit sqlalchemy Ⅰ
20200329_Einführung in die Datenanalyse mit Python 2nd Edition Personal Summary
Einführung in die serielle Kommunikation [Python]
Konvertieren Sie das Scratch-Projekt in Python
Mayungos Python Learning Episode 3: Ich habe versucht, Zahlen zu drucken
Einführung in Python für VBA-Benutzer - Aufrufen von Python aus Excel mit xlwings-
Schalten Sie Python mit Alternativen auf 2.7 um
Schreiben Sie mit Python in csv
[Einführung in Python] <Liste> [Bearbeiten: 22.02.2020]
Einführung in Python (Python-Version APG4b)
Eine Einführung in die Python-Programmierung
[Raspi4; Einführung in den Sound] Stabile Aufzeichnung der Toneingabe mit Python ♪
Ich habe mit Python einen Blackjack gemacht.
Othello gemacht mit Python (wie GUI)
Ich habe Wordcloud mit Python gemacht.
Einführung in Python For, While
[Einführung in Python] So erhalten Sie Daten mit der Funktion listdir
[Einführung in Udemy Python3 + Application] 51. Seien Sie vorsichtig mit Standardargumenten
Aktiviert, um PNG mit Pillow of Python in JPG zu konvertieren
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
Eine Geschichte über das Hinzufügen einer REST-API zu einem mit Python erstellten Daemon
[Einführung in Python] So teilen Sie eine Zeichenfolge mit der Funktion split
Einführung in die Datenanalyse mit Python P32-P43 [ch02 3.US Babynamen 1880-2010]
Einführung in die Datenanalyse mit Python P17-P26 [ch02 1.usa.gov Daten von bit.ly]
Ich las "Das Lernen mit Python von der Einführung bis zur Praxis stärken", Kapitel 1
Einführung in die Bayes'sche statistische Modellierung mit Python ~ Versuch einer linearen Regression mit MCMC ~