[PYTHON] Eine Geschichte über die Vorhersage von Präfekturen aus Städtenamen mit Jubatus

Alte Geschichte

Als ich anfing, maschinelles Lernen zu lernen, gab es überhaupt keinen Github. Ich ließ die Quelle ins Netz fallen, stellte sie zusammen und sagte: "Oh, ich weiß es nicht, aber es funktioniert nicht ..." Oder: "Oh, ich weiß nicht, aber es hat funktioniert ...". Ansonsten weiß ich nicht, wie gut ich meinen eigenen Code geschrieben und richtig implementiert habe. Ich habe mit dem Code experimentiert (der in Bezug auf die Informatik definitiv ineffizient ist).

Aber heutzutage sind selbst die komplexesten Implementierungen der Theorie normalerweise auf Github. Und auf github veröffentlicht zu werden bedeutet, dass die Verwendung klar angegeben ist und jeder sie verwenden kann. Die einfache Oberfläche ist einfach.

Jubatus ist so ein Rahmen, es ist wie ein Traum, dass man maschinelles Lernen machen kann, ohne eine komplizierte Theorie zu kennen. http://jubat.us/ja/

Dies ist das Ende der Taiko-Holding.

Es ist ein Artikel, den ich mit Jubatus ausprobiert habe. Das erste, was Sie tun möchten, ist, den Namen der Stadt und des Dorfes einzugeben und dann etwas zu machen, das Ihnen sagt, welche Präfektur der Ortsname ist. Da der Zweck "versuchen zu verwenden" ist, war das Ziel alles, aber um klar zu sein, alles war in Ordnung. Das Adressbuch des Präfekturnamens wurde als CSV-Datei auf der Website [hier] 1 bereitgestellt, also habe ich es verwendet.

pre-processing

Ich werde die oben heruntergeladenen Daten verwenden, aber ich mag den Zeichencode in SJIS nicht, deshalb werde ich ihn in utf-8 konvertieren.

wget http://jusyo.jp/downloads/new/csv/csv_zenkoku.zip
unzip csv_zenkoku.zip
nkf -w zenkoku.csv > zenkoku_utf-8.csv

Ich denke, dass die Daten jetzt als Japanisch gelesen werden können. Diese Konvertierung ist in der Windows-Umgebung übrigens nicht erforderlich, diesmal gehen wir jedoch von Linux (CentOS) aus. (Wenn Sie versuchen, Jubatus überhaupt unter Windows zu verwenden, sollte dies nicht einfach sein, daher halte ich diese Erklärung nicht für notwendig.)

Ich mag die erste Zeile (Erklärung jeder Spalte) nicht, also lösche ich sie.

Damit sind die von jubatus zu verzehrenden Daten bereit, aber wenn sie unverändert bleiben, ist die Anordnung der Daten zu regelmäßig. Egal was Sie sagen, der Hokkaido-Liebhaber, der "Hokkaido" zurückgibt, wird nur fertiggestellt, also mischen Sie die Zeilen im Voraus.

shuf zenkoku_utf-8.csv > shuffled_zenkoku.csv

Speichern Sie dies in einem Verzeichnis namens data.

configration

Jetzt, da die Daten vorhanden sind, ist es Zeit, die Einstellungen in json zu schreiben, um Jubatus zu füttern. https://github.com/chase0213/address_classifier/blob/master/adrs_clf.json

AROW wird als Lernalgorithmus verwendet. Es gibt keinen besonderen Grund.

Im Grunde genommen ist der Eingabevektor wie bisher ein Vektor, der eine Zeichenfolge als Element hat Schreiben Sie in das Feld string_rules, wie mit dieser Zeichenfolge umgegangen werden soll. Es ist kein Plan, etwas Praktisches zu machen, also zähle ich vorerst nur die Anzahl der Zeichen geteilt durch Unigramm.

"string_rules": [
      { "key": "*", "type": "unigram", "sample_weight": "bin", "global_weight": "bin" }
]

Wenn Sie etwas Praktisches machen möchten, müssen Sie natürlich über diesen Teil richtig nachdenken. (Erstens gibt es nichts Praktisches, weil im Vorbehandlungsteil fast nichts getan wird)

Einzelheiten zur Einstellung finden Sie auf [Jubatus Official Page] 2.

starting jubatus server

Starten Sie nach Abschluss der Einstellungen den Jubatus-Server.

$ jubaclassifier --configpath adrs_clf.json

Wenn kein Fehler vorliegt, wird er ausgeführt.

training

Nach Abschluss der Einstellungen treten wir endlich in die Lernphase ein. Dies ist ein sogenanntes Training. https://github.com/chase0213/address_classifier/blob/master/train.py

Als ich alle Daten gelernt habe, ist das Zeitlimit abgelaufen, sodass ich vorerst ungefähr 50.000 gebe.

tnum = 50000

Normalerweise werden Trainingsdaten und Klassifizierungsdaten separat gespeichert. Diesmal ist es ein Ärger (

Ich habe nichts besonders Schwieriges getan. Wenn Sie also so weit gelesen haben, können Sie anhand des Codes sehen, was Sie tun. Also werde ich die Erklärung weglassen.

Der einzige wichtige Punkt ist

# training data must be shuffled on online learning!
random.shuffle(train_data)

Hier ist es. Da das Sample so wie es ist umgeleitet wird, habe ich aber sorgfältig Kommentare aufgenommen Wenn Sie die Lehrerdaten ohne Mischen übergeben, spiegelt dies die Auswirkung der Reihenfolge der Daten wider. Ich verstehe den Algorithmus nicht wirklich, daher kann ich nichts im Detail sagen. Vielleicht wird der Einfluss der am Ende verzehrten Daten stärker. In diesem Fall wurden die Daten also ursprünglich gemischt Selbst wenn Sie hier nicht mischen, wird sich die Leistung nicht so stark verschlechtern, aber wenn Sie es vergessen, wenn Sie es wiederverwenden, ist es das.

Beginnen Sie nach dem Mischen mit dem Lernen.

# run train
client.train(train_data)

classification

Dies ist auch nicht besonders schwierig. Schauen Sie sich also den Code an. https://github.com/chase0213/address_classifier/blob/master/detect.py

Dieses Mal gab ich drei Ortsnamen an: "Isezaki", "Takasaki" und "Kamakura", und welche Präfektur ist das? ?? Ich werde das machen.

Klicken Sie hier für die Ergebnisse.

$ python detect.py
Präfektur Gunma Isezaki
Präfektur Gunma Takasaki
Kamakura, Präfektur Kanagawa

Oh! !! richtig! !! Beeindruckend! !! !!

・ ・ ・ ・ ・ ・.

Speichern Sie 50.000 "Präfektur-Stadt" -Paare in Ihrer Python, Welche Präfektur ist das? Bitte versuchen Sie so etwas. Die Summe sollte ungefähr 160.000 betragen, also sollte eine Trefferchance von 1/3 bestehen.

Ich bin froh, dass ich wusste, dass dieses Beispiel nicht klug war, bevor ich anfing. Es gibt jedoch noch gute Punkte. Es ist "Klassifizierungsfähigkeit für unbekannte Daten".

Der Klassifikator (oder das maschinelle Lernen) liefert ursprünglich bekannte Daten, um unbekannte Daten vorherzusagen Denn auch für Ortsnamen, die nicht als Lehrerdaten angegeben wurden, Sie können vorhersagen (geben Sie die Antwort vorerst zurück). Wenn Sie versuchen, dies nur mit Python zu tun, sollte es ziemlich schwierig sein.

Das war's für den Versuch, einen Jubaclassifier zu verwenden.

Recommended Posts

Eine Geschichte über die Vorhersage von Präfekturen aus Städtenamen mit Jubatus
Die Geschichte einer Soundkamera mit Touch Designer und ReSpeaker
Eine Geschichte über die Berechnung der Geschwindigkeit eines kleinen Balls, der mit Python und Sympy beim Luftwiderstand fällt
Die Geschichte des Starts eines Minecraft-Servers von Discord
Eine Geschichte über die Änderung des Master-Namens von BlueZ
Eine Geschichte darüber, wie man das Atomfeld (XML-Telegramm) der Meteorologischen Agentur mit einem Raspeltorte bekommt und twittert
(Erster Beitrag) Eine Geschichte über die numerische Berechnung von Influenza und neuem Lungenentzündungs-Coronavirus mit Tensorflow
Eine Geschichte über die Portierung des Codes "Versuchen Sie zu verstehen, wie Linux funktioniert" nach Rust
Die Geschichte des Django-Modellfeldes verschwindet aus der Klasse
Eine Geschichte über den Umgang mit dem CORS-Problem
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Eine Geschichte, die mit der Installation der maschinellen Lernbibliothek JAX zusammenhängt
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Durchsuchen Sie das Verzeichnis und erstellen Sie eine Liste mit Verzeichnispfaden und Dateinamen
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Die Geschichte von Python und die Geschichte von NaN
Die Geschichte des Exportierens eines Programms
Eine Geschichte über das Erstellen eines Programms, mit dem die Anzahl der Instagram-Follower in einer Woche von 0 auf 700 erhöht wird
Eine Geschichte, die die Gegenwart von Qiita mit Qiita API + Elasticsearch + Kibana visualisiert
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
Berechnen Sie die kürzeste Route eines Diagramms mit der Dyxtra-Methode und Python
Ermitteln Sie mit NumPy die Trägheitsspindel und das Hauptträgheitsmoment aus dem Trägheitstensor
Eine Geschichte über die Automatisierung von Online-Mahjong (Jakutama) mit OpenCV und maschinellem Lernen
Erstellen Sie DNN-CRF mit Chainer und erkennen Sie den Akkordfortschritt der Musik
Holen Sie sich das durchschnittliche Gehalt eines Jobs mit bestimmten Bedingungen von Indeed.com
[Python] Eine Geschichte über das Sammeln von Twitter-Kontonamen aus Handle-Namen (wie @ 123456) durch Kombinieren von BeautifulSoup- und Excel-Eingabe / Ausgabe.
Eine Geschichte über maschinelles Lernen mit Kyasuket
Die Geschichte, deep3d auszuprobieren und zu verlieren
Eine Geschichte über Python Pop und Append
Die Geschichte der Verarbeitung A von Blackjack (Python)
Die Geschichte einer Box, die Peppers AL Memory und MQTT miteinander verbindet
Lernen Sie mit Jubatus die Trends von Feature-Wörtern in Texten kennen und kategorisieren Sie Ihre Eingabetexte
Deep Learning von Grund auf neu Die Theorie und Implementierung des mit Python erlernten Deep Learning Kapitel 3
Die Geschichte der Erstellung einer Webanwendung, die umfangreiche Lesungen mit Django aufzeichnet
SSH-Anmeldung am Zielserver von Windows mit einem Klick auf eine Verknüpfung
Holen Sie sich mit Python den Aktienkurs eines japanischen Unternehmens und erstellen Sie eine Grafik