2nd place solution Vorstellung des Ansatzes des Zweitplatzierten. 2nd place solution | team brain-afk Feature-Generierung, mehrere Modelle, Stapelung und FFM-Anpassung.
Es gibt einige Stellen, an denen das Verständnis der englischen Übersetzung zweifelhaft ist. Wenn Sie also interessiert sind, überprüfen Sie bitte den Originaltext. Es gibt einige Fragen im Diskussionsteil unten.
Mit Ausnahme von LibFFM und FTRL kann es einem normalen Klassifizierungswettbewerb ähneln. Ich denke, es ist ziemlich selten, Liblinear zu haben. Ist Keras nur ein mehrschichtiges Perzeptron? Es wird keine besondere Erwähnung gemacht.
Alexey hat FFM angepasst. Infolgedessen wird die Geschwindigkeit erhöht und der Speicherverbrauch ist gering. Der Code für k wird sofort in github veröffentlicht.
CV&Meta Modeling Die hier erwähnten Wörter "belnd" und "stacking" sind die Geschichte des Ensemble-Lernens.
Wir haben 6 Millionen Zeilen als Selbstvalidierungssatz verwendet und gemäß der Struktur des Testsatzes abgetastet. (2 zukünftige Tage, 50% gemeinsame Tage / 50% zukünftige Tage Zeilen). Zusätzlich wurde eine Teilmenge von ca. 14 Mio. verwendet, um schneller (?) Für neue Ideen zu trainieren.
Bevor Alexey dem Team beitrat, wurden 20 Layer1-Modelle in 6-Millionen-Sets mit einer Verbesserung von 0,003 Punkten im öffentlichen Vorstand ausgeführt. Dann lernte ich die Daten von 6M mit dem Mischmodell von XGBoost & Keras. (=> keine gemeinsamen Tage / zukünftigen Tage Trennung (was meinst du ???))
In der letzten Woche der Frist hat sich ein Modell stark verbessert und das Stapelergebnis verbessert. Bei der Vorhersage von Schicht1 wurde die verallgemeinerte Zeit als Merkmalsgröße für Schicht2 verwendet. Dies verbesserte die Punktzahl von 0,00020. Alexey trat bei und beendete die endgültige Einreichung, indem er die Stapeldaten, die er hatte, zusammenführte und mischte.
Final solution Wir haben die Absackergebnisse von Alexeys Meta-Stack, XGBoost und Keras durch geometrische Mittelung eingereicht. Das Gewicht wurde intuitiv anhand des LB-Scores bestimmt.
Best single model Alexeys benutzerdefinierte sh FFM-Implementierung ergab die beste Genauigkeit. 0,70017 im öffentlichen Führer Boarc.
Extrahieren Sie Lean in 30 Minuten mit kleinem Speicher, veröffentlicht von rcarson Einführung in die Feature-Mengengenerierung von Code). (Gist is here)
Es müssen zwei Daten verwendet werden: page_views.csv und saved_content.csv. Zusammenfassend enthält page_views die ID der Webseite, die der Benutzer besucht hat, und saved_content enthält die Details jeder Anzeigen-ID.
for c,row in enumerate(csv.DictReader(open('../input/promoted_content.csv'))):
if row['document_id'] != '':
leak[row['document_id']] = 1
Wenn in boost_content eine Dokument-ID enthalten ist, kennzeichnen Sie das Leck.
filename = '../input/page_views.csv'
filename = '../input/page_views_sample.csv' # comment this out locally
for c,row in enumerate(csv.DictReader(open(filename))):
if count>limit:
break
if c%1000000 == 0:
print (c,count)
if row['document_id'] not in leak:
continue
if leak[row['document_id']]==1:
leak[row['document_id']] = set()
lu = len(leak[row['document_id']])
leak[row['document_id']].add(row['uuid'])
if lu!=len(leak[row['document_id']]):
count+=1
Wenn danach eine Seite mit dem Inhalt "anced_content "zu" page_views "gelangt, wird die Benutzer-ID (uuid) hinzugefügt.
for i in leak:
if leak[i]!=1:
tmp = list(leak[i])
fo.write('%s,%s\n'%(i,' '.join(tmp)))
del tmp
Schließlich werden die Dokumentinformationen, die eine oder mehrere im Leck enthaltene Benutzeroberflächen enthalten, in die Datei geschrieben.
In der exportierten Datei sieht es so aus.
Die Linkdatei von document_id und uuid ist fertig. Mit anderen Worten, es ist eine Datei, die beschreibt, welchen Benutzer auf einer eindeutigen Webseite besucht hat.
Dies ist eine erweiterte Version von kooperativer Filterung und FM. Es wird seit Mitte letzten Jahres häufig in Wettbewerben verwendet, die sich mit solchen Daten befassen.
Ab dem 9. März 2017 treten aufgrund des Versuchs, libffm unter Linux und Mac zu installieren, einige Fehler auf. Das Problem ist, dass das neueste SDK kein Nanosocket hat und der Import von ffm nicht durchgeführt werden kann, wenn es mit einer früheren Version installiert wird. Das Turi-Code-Problem und der Stapelüberlauf standen bereits mehrmals auf der Tagesordnung, aber es scheint, dass sie nicht gelöst wurden. Daher wird das von den Wettbewerbsteilnehmern häufig verwendete libffm-Beispielprogramm hier nicht verwendet. Es ist eine Schande, weil es eine Bibliothek ist, die diesmal sehr gute Ergebnisse erzielt hat.
Sobald das Problem behoben ist, werde ich die Details in einem anderen Artikel behandeln.
FTRL-Proximal SRK hat Python-Code mit FTRL veröffentlicht. Klicken Sie hier für das Wesentliche.
FTRL ist der von Google für die CTR-Vorhersage verwendete Algorithmus (dies ist das Originalpapier) (http://www.eecs.tufts.edu/~dsculley/papers/ad-click-prediction.pdf).
Es wird gesagt, dass es ein Programm verwendet, das vowpal wabbit und diesen Code verwendet. Ich habe vowpal wabbit noch nicht verwendet, aber da es von Kaggle-Vorgesetzten verwendet wird, denke ich darüber nach, es zusammen mit FTRL zu implementieren und als weiteren Artikel hochzuladen. Es scheint, dass die Korrelation mit dem von einem Klassifikator wie Tensorflow vorhergesagten Ergebnis gering ist und beim Kombinieren beim Lernen von Ensembles verwendet werden kann.
liblinear Ein Werkzeug zur linearen Vorhersage für große Datenmengen. Es ist selten, dass es in Wettbewerben verwendet wird, aber es scheint zu unerwartet höheren Punktzahlen zu führen. Referenzseite (Englisch)
Recommended Posts