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.
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.
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].
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.
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].
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! !!
[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