[PYTHON] Machine learning putain d'amateur que j'ai appris en 2 mois jusqu'à la sortie du produit

Faire un peu d'apprentissage automatique avec scikit-learn est plus facile que de créer une petite application Web avec LAMP. Voici un résumé de ce que j'ai appris au cours des deux mois écoulés depuis mes débuts.

surligner

  1. Trois choses que je pensais importantes
  2. Présentation de l'apprentissage automatique
  3. À propos de scikit learn
  4. Un mot sur l'API Google Prediction, Mahout, Spark, Cython

3 choses que je pensais importantes

1. Avoir des amis qui maîtrisent l'apprentissage automatique

Comme pour toute technologie, vous pouvez procéder en toute confiance en demandant à un ami et en obtenant d'abord un aperçu. Avoir cette confiance rend plus difficile pour vous de briser votre cœur. @Fukkyy m'a dit que «les sites d'introduction utilisent des termes difficiles pour me faire peur, mais si j'utilise une bibliothèque, l'apprentissage automatique n'est pas effrayant», et j'ai ignoré les sites d'introduction dans les rues et j'ai commencé à frapper la bibliothèque, donc c'était facile d'entrer. .. Nous avons reçu divers conseils de @ ysks3n, tels que la suppression de dimension et l'utilisation appropriée de chaque algorithme. Si les bases ne vous dérangent pas, je peux vous enseigner la pratique, alors appelez-moi si vous êtes intéressé.

\ # Merci à vous deux!

2. Réduisez la taille verticale et horizontale des données d'entraînement

S'il est vertical et horizontal, il y a un problème de degré, mais couper l'horizontale contribue souvent à la performance.

La quantité de données qui pouvait être jetée dans la bibliothèque à volonté était bien inférieure à ce à quoi je m'attendais. Il y avait une croyance infondée selon laquelle si les données faisaient environ 30 Go, il serait possible de se passer de tout traitement. Il existe une bibliothèque dans scikit-learn qui effectue une compression dimensionnelle (réduction de la taille horizontale), il est donc bon de l'utiliser. J'ai écrit comment compresser les dimensions dans l'exemple de code ci-dessous. Si vous partez d'un petit nombre de dimensions et que vous l'augmentez, le taux de réponse correct peut augmenter, il est donc préférable de s'arrêter à ce point. Les données verticales doivent également être supprimées si elles ne sont pas liées à l'apprentissage.

3. L'écriture de code est plus rapide que l'étude de la théorie

Comme je l'ai écrit ci-dessus, il existe des sites d'introduction difficiles dans les rues, mais je pense que les débutants peuvent utiliser l'exemple de code avant d'étudier la théorie. De plus, l'apprentissage automatique utilise divers modèles, le cas échéant, mais si vous étudiez chaque modèle en détail, il est écrit que c'est difficile et qu'il a tendance à gaspiller de la chaleur, donc si vous utilisez scicit-learn, vous pouvez utiliser le modèle. Je pense que vous devriez tous les essayer et utiliser celui avec le taux de précision le plus élevé. Vous pouvez changer de modèle en réécrivant simplement une ligne. J'ai écrit l'exemple de code en bas. Si vous avez besoin de plus de précision et que vous pouvez vous le permettre, étudiez.

Présentation de l'apprentissage automatique

Il existe deux principaux types d'apprentissage automatique (avec un enseignant).

1. Retour

C'est une méthode de prédiction de valeurs numériques à partir de données. Par exemple, comme indiqué ci-dessous, il est utilisé pour apprendre la relation avec la température à partir du temps passé, du lieu et de la date, et pour prédire la température la prochaine fois que vous entrez le temps et le lieu.

Tout d'abord, apprenez les données suivantes et apprenez la relation entre les caractéristiques (météo, lieu, date) et la température.

Température Météo endroit temps
19 Bien Tokyo 111
29 pluie Osaka 311
19 Nuageux Fukuoka 121
29 Bien Kumamoto 11
39 pluie Kyoto 311
29 Nuageux Aichi 131
19 Bien Nara 211
9 pluie Ishikawa 141
49 Nuageux enfer 151

Ensuite, utilisez les résultats d'apprentissage pour prédire la température lorsque la fonction est donnée.

Température Météo endroit Date
? pluie Tokyo 111

2. Classification

Une méthode pour prédire la classification à partir de données. Par exemple, vous pouvez apprendre la relation entre le livre que vous lisez et la classification des hommes et des femmes, et l'utiliser pour classer le sexe de la personne la prochaine fois que vous entrez les informations du livre que vous lisez.

Tout d'abord, apprenez les données suivantes et apprenez la relation entre les caractéristiques (que vous lisiez chaque dessin animé ou non) et le sexe.

sexe La légende la plus forte Kurosawa Chasseur chasseur Masque en verre
Homme lis lis Pas lu
Homme Pas lu lis Pas lu
femme Pas lu lis lis
Homme Pas lu lis Pas lu
femme Pas lu lis lis
Homme lis lis Pas lu
Homme lis lis lis
femme Pas lu lis lis
Homme lis lis Pas lu

Ensuite, utilisez les résultats appris pour prédire le sexe lorsque la fonction est donnée.

sexe La légende la plus forte Kurosawa Chasseur chasseur Masque en verre
? lis lis lis

\ # Il y a aussi un clustering de l'apprentissage non supervisé, mais je ne le gère pas, donc je vais l'exclure cette fois

À propos de scikit learn

C'est une bibliothèque de rêve où tout le monde peut faire du machine learning.

sk_learn_sample.py


# -*- coding: utf-8 -*-
from sklearn.svm import LinearSVC
from sklearn.ensemble import AdaBoostClassifier,ExtraTreesClassifier ,GradientBoostingClassifier, RandomForestClassifier
from sklearn.decomposition import TruncatedSVD
from sklearn import datasets
from sklearn.cross_validation import cross_val_score


#Préparer les données d'entraînement
iris     = datasets.load_iris() #Exemples de données attachées à la bibliothèque
features = iris.data            #Données sur les fonctionnalités
                                #Dans l'exemple de classification ci-dessus, cela correspond à la météo, au lieu, à la date et si vous lisez ou non chaque manga.
labels   = iris.target          #Corriger les données de réponse pour la quantité d'entités
                                #Dans l'exemple de classification ci-dessus, cela correspond à la température et au sexe.

#Compresser la cote de quantité d'objets
#Traitez les caractéristiques de nature similaire comme étant identiques
lsa = TruncatedSVD(2)
reduced_features = lsa.fit_transform(features)

#Je ne sais pas quel modèle utiliser, donc j'avais un œil dessus. Pour le moment, tuez tout le monde avec les paramètres par défaut.
clf_names = ["LinearSVC","AdaBoostClassifier","ExtraTreesClassifier" ,"GradientBoostingClassifier","RandomForestClassifier"]
for clf_name in clf_names:
  clf    = eval("%s()" % clf_name) 
  scores = cross_val_score(clf,reduced_features, labels,cv=5)
  score  = sum(scores) / len(scores)  #Mesurer le taux de réponse correct du modèle
  print "%score de s:%s" % (clf_name,score)

#Score LinearSVC:0.973333333333
#Score du classificateur AdaBoost:0.973333333333
#Score du classificateur ExtraTrees:0.973333333333
#GradientBoostingClassifier score:0.966666666667
#Score de RandomForestClassifier:0.933333333333

Un mot sur l'API Google Prediction, Mahout, Spark, Cython

Google Prediction API L'introduction coûte moins cher que sk-learn, mais l'inconvénient est que la quantité de données pouvant être gérée est faible.

Mahout Cela semble être un outil capable d'effectuer un apprentissage automatique distribué à l'aide de Hadoop, mais la personne qui a écrit la série de Mahout en japonais a recommandé Spark à Mahout. Ceci est un projet Apache.

Spark Je ne sais pas grand-chose sur la différence avec Mahout, mais une personne formidable a recommandé celui-ci. Le scikit-learn fonctionnait plutôt bien, alors je l'ai juste touché et je me suis arrêté immédiatement. C'est aussi un projet Apache.

Cython C'est explosif, mais parfois le code qui fonctionnait en Python ne fonctionne pas en Cython, ou le processus qui a été traité en parallèle est toujours actif. Si vous rencontrez un problème à un bas niveau, vous pouvez essayer de l'exécuter normalement en Python.

Résumé

Si vous avez un ami détaillé, demandez à cette personne. Demandez-moi si vous n'avez pas d'amis. Échangeons la technologie. Pour le moment, j'aimerais que vous installiez scicit-learn, collez l'exemple de code ci-dessus et l'exécutiez.

\ # Le produit que j'ai fabriqué cette fois-ci est sous-traité, je ne l'ai donc pas ouvert. Pas mal. C'est une application Web qui a résolu \ # des problèmes comme celui-ci.

Recommended Posts

Machine learning putain d'amateur que j'ai appris en 2 mois jusqu'à la sortie du produit
Ce que j'ai appris avant un ingénieur système qui ne pouvait pas respecter la date de livraison était un peu fiable sans délai
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (1)
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (3)
Ce que j'ai appris en participant aux qualifications ISUCON10
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (2)
J'ai essayé de comparer la précision des modèles d'apprentissage automatique en utilisant kaggle comme thème.
Une histoire à laquelle j'étais accro en spécifiant nil comme argument de fonction dans Go
Des mots qui m'intéressaient en tant que débutant en programmation
J'ai écrit un script qui divise l'image en deux
Ce que j'ai appris en Python
Ce que j'ai appris au cours de la dernière année en tant que personne âgée (ne convient pas à mon âge)
Ce que j'ai appris en écrivant une Pull Request Python pour la première fois de ma vie
Même si je savais que le cours d'apprentissage automatique de l'exemple était bon, j'ai continué à le suivre pendant deux ans, mais c'était quand même bon
Les gens mémorisent les connaissances acquises dans le cerveau, comment mémoriser les connaissances acquises dans l'apprentissage automatique
(Apprentissage automatique) J'ai essayé de comprendre attentivement l'algorithme EM dans la distribution gaussienne mixte avec l'implémentation.