Lorsque j'ai commencé à apprendre le machine learning, il n'existait pas de github. J'ai laissé tomber la source sur le net, je l'ai compilée et j'ai dit: "Oh, je ne sais pas, mais ça ne marche pas ..." Ou, "Oh, je ne sais pas, mais ça a marché ...". Sinon, je ne sais pas dans quelle mesure j'ai bien écrit mon propre code et mis en œuvre correctement. J'expérimentais le code (ce qui est définitivement inefficace en termes d'informatique).
Mais de nos jours, même les implémentations les plus complexes de la théorie sont généralement sur github. Et le fait qu'il soit publié sur github signifie que l'utilisation est clairement indiquée et que tout le monde peut l'utiliser. L'interface simple est simple.
Jubatus est un tel cadre, c'est comme un rêve que vous puissiez faire de l'apprentissage automatique sans connaître de théorie compliquée. http://jubat.us/ja/
C'est la fin de la tenue de taiko.
C'est un article que j'ai essayé en utilisant Jubatus. La première chose à faire est de saisir le nom de la ville, de la ville et du village, puis de créer quelque chose qui vous indiquera de quelle préfecture est le nom du lieu. Puisque le but est «d'essayer d'utiliser», la cible était n'importe quoi, mais pour être clair, tout allait bien. Le carnet d'adresses du nom de la préfecture a été fourni sous forme de fichier csv sur le site [ici] 1, donc je l'ai utilisé.
J'utiliserai les données téléchargées ci-dessus, mais je n'aime pas le code de caractère dans SJIS, je vais donc le convertir en utf-8.
wget http://jusyo.jp/downloads/new/csv/csv_zenkoku.zip
unzip csv_zenkoku.zip
nkf -w zenkoku.csv > zenkoku_utf-8.csv
Je pense que les données peuvent maintenant être lues en japonais. À propos, cette conversion n'est pas nécessaire dans l'environnement Windows, mais cette fois nous supposons Linux (CentOS). (Si vous essayez d'utiliser jubatus sous Windows en premier lieu, cela ne devrait pas être simple, donc je ne pense pas que cette explication soit nécessaire.)
Donc, je n'aime pas la première ligne (explication de chaque colonne), donc je la supprime.
Avec cela, les données à manger par jubatus sont prêtes, mais si elles sont laissées telles quelles, la disposition des données est trop régulière. Peu importe ce que vous dites, l'Amant de Hokkaido, qui renvoie "Hokkaido", ne sera que terminé, alors mélangez les lignes à l'avance.
shuf zenkoku_utf-8.csv > shuffled_zenkoku.csv
Enregistrez-le dans un répertoire appelé data.
Maintenant que les données sont en place, il est temps d'écrire les paramètres dans json pour alimenter Jubatus. https://github.com/chase0213/address_classifier/blob/master/adrs_clf.json
AROW est utilisé comme algorithme d'apprentissage. Il n'y a pas de raison particulière.
Donc, fondamentalement, comme c'est le cas maintenant, le vecteur d'entrée est un vecteur qui a une chaîne de caractères comme élément, donc Écrivez dans le champ string_rules comment gérer cette chaîne. Ce n'est pas un plan pour faire quelque chose de pratique, donc pour le moment, je vais juste compter le nombre de caractères divisé par unigramme.
"string_rules": [
{ "key": "*", "type": "unigram", "sample_weight": "bin", "global_weight": "bin" }
]
Bien sûr, si vous voulez faire quelque chose de pratique, vous devez bien réfléchir à cette partie. (En premier lieu, il n'y a rien de pratique car presque rien n'est fait dans la partie prétraitement)
Veuillez consulter la [Page officielle de Jubatus] 2 pour plus de détails sur le réglage.
Une fois les paramètres définis, démarrez le serveur jubatus.
$ jubaclassifier --configpath adrs_clf.json
S'il n'y a pas d'erreur, il est en cours d'exécution.
Après avoir terminé les réglages, nous entrerons enfin dans la phase d'apprentissage. C'est ce qu'on appelle la formation. https://github.com/chase0213/address_classifier/blob/master/train.py
Quand j'ai appris toutes les données, elles ont expiré, alors je donne environ 50 000 pour le moment.
tnum = 50000
Normalement, les données d'entraînement et les données de classification sont stockées séparément. Cette fois, c'est un problème (
Je n'ai rien fait de particulièrement difficile, donc si vous avez lu jusqu'ici, vous pouvez voir ce que vous faites en regardant le code. Je vais donc omettre l'explication.
Le seul point important est
# training data must be shuffled on online learning!
random.shuffle(train_data)
C'est ici. Étant donné que l'échantillon est détourné tel quel, j'ai soigneusement inclus des commentaires, mais Si vous transmettez les données de l'enseignant sans mélange, cela reflétera l'effet de l'ordre des données. Je ne comprends pas vraiment l'algorithme donc je ne peux rien dire en détail, Peut-être que l'influence des données consommées à la fin deviendra plus forte. Dans ce cas, les données ont été mélangées à l'origine, donc Même si vous ne mélangez pas ici, les performances ne se détérioreront pas autant, mais si vous l'oubliez lorsque vous la réutilisez, c'est tout.
Après la lecture aléatoire, commencez à apprendre.
# run train
client.train(train_data)
Ce n'est pas particulièrement difficile non plus, alors jetez un œil au code. https://github.com/chase0213/address_classifier/blob/master/detect.py
Cette fois, j'ai donné trois noms de lieux, «Isezaki», «Takasaki» et «Kamakura», et de quelle préfecture s'agit-il? ?? Je le ferai.
Cliquez ici pour les résultats.
$ python detect.py
Préfecture de Gunma Isezaki
Préfecture de Gunma Takasaki
Kamakura, préfecture de Kanagawa
Oh! !! correct! !! Hou la la! !! !!
・ ・ ・ ・ ・ ・.
Enregistrez 50 000 paires "préfecture-ville" dans votre python, De quelle préfecture s'agit-il? Veuillez essayer quelque chose comme ça. Le total devrait être d'environ 160 000, donc il devrait y avoir 1/3 de chance de toucher.
C'est bien que je savais que cet exemple n'était pas intelligent avant de commencer, Cependant, il y a encore de bons points. Il s'agit de la «capacité de classification des données inconnues».
Le classificateur (ou apprentissage automatique) donne à l'origine des données connues pour prédire des données inconnues Parce que, même pour les noms de lieux qui n'ont pas été donnés comme données d'enseignant, Vous pouvez prédire (renvoyer la réponse pour le moment). Si vous essayez de faire cela avec python uniquement, cela devrait être assez difficile.
C'est tout pour essayer d'utiliser jubaclassifier.