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.
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.
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.
Starten Sie nach Abschluss der Einstellungen den Jubatus-Server.
$ jubaclassifier --configpath adrs_clf.json
Wenn kein Fehler vorliegt, wird er ausgeführt.
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)
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