[PYTHON] J'ai essayé la séparation linéaire super facile avec Chainer

En tant que pratique de Chainer, j'ai essayé un simple problème de séparation linéaire.

environnement

tâche

Je veux apprendre une fonction qui détermine si je suis obèse ou non en saisissant la taille (cm), le poids (kg) et le tour de poitrine (cm). Cependant, l'obésité est définie ici comme ayant un IMC (poids divisé par la taille au carré) de 25 ou plus. Par conséquent, les informations sur le poids et la taille sont suffisantes pour déterminer si le patient est obèse ou non, et les informations sur le tour de poitrine ne sont pas nécessaires. Ensuite, le dispositif d'apprentissage réalisé cette fois pourra-t-il déterminer s'il est obèse ou non en se concentrant uniquement sur la taille et le poids sans être dérouté par les informations sur le tour de poitrine?

Les données

J'ai créé des données factices dans Excel. Les indicateurs de taille, de poids, de tour de poitrine et d'obésité sont disposés sur une ligne séparée par des espaces. La taille, le poids et le tour de poitrine ont chacun été générés en ajoutant un nombre aléatoire normal avec une variance appropriée à la valeur moyenne des hommes. L'indicateur d'obésité était mis à 1 si l'IMC calculé à partir de la taille et du poids était de 25 ou plus. Nous en avons fait 1000 indépendamment, dont 900 pour l'apprentissage et 100 pour l'évaluation.

 Hauteur Poids Tour de poitrine Drapeau d'obésité
152.5110992	70.64096855	76.24909648	1
176.5483602	72.54812988	79.99468908	0
171.9815877	78.13768514	80.87788608	1
180.013773	77.60660479	79.71464192	0
171.9685041	81.20240554	84.93720091	1
186.3999693	77.03393024	82.25099179	0
175.1117213	81.23388203	86.89111757	1

data.png

Comme vous pouvez le voir, c'est presque linéaire.

Apprenant

Après avoir pratiqué Chainer, j'ai essayé de construire un perceptron multicouche. Il a une structure à trois couches avec trois dimensions pour l'entrée, quatre dimensions pour les éléments cachés et deux dimensions pour la sortie. (Comme il s'agit d'une tâche de séparation linéaire, elle peut être effectuée avec un perceptron monocouche.) Les autres paramètres sont les suivants.

--Fonction d'activation: ReLu

class MLP(Chain):
  def __init__(self):
    super(MLP, self).__init__(
 Réseau dimensionnel # 3-4-2
      l1=L.Linear(3, 4),
      l2=L.Linear(4, 2),
     )
  def forward(self, x, t, train):
    h1 = F.dropout(F.relu(self.l1(x)), train=train)
    y = self.l2(h1)
    return F.softmax_cross_entropy(y, t), F.accuracy(y, t)

# Instanciation
model = MLP()
# Adam est adopté comme algorithme d'optimisation
optimizer = optimizers.Adam()
optimizer.setup(model)

 N = 900 # Nombre de données d'entraînement
 N_test = 100 # Nombre de données d'évaluation
 n_epoch = 100 # nombre d'itérations
 batchsize = 5 # mini lot
# Omis ci-dessous

résultat

La fonction d'erreur et le taux de précision ont été tracés par le nombre d'époques. loss_acc.png

C'était un peu moins de 80% de performances. subtil?

Nous avons également examiné le type de sortie des données d'évaluation après l'apprentissage.

 Taille Poids Système de circonférence thoracique Indicateur d'obésité estimé Indicateur d'obésité correct
[ 179.30055237   69.73477936   84.73832703] 0 0
[ 176.89619446   84.05502319   85.10128021] 1 1
[ 172.04129028   77.36618805   87.89541626] 1 1
[ 168.48660278   73.91072845   84.5171814 ] 1 1
[ 166.53656006   71.42696381   83.17546844] 0 1
[ 163.44270325   77.11021423   90.57539368] 1 1
[ 180.63993835   77.33372498   85.33548737] 0 0
[ 165.73175049   71.87976837   80.57328033] 0 1

Les deuxième et quatrième à partir du bas, qui étaient à l'origine obèses, ont été jugés normaux. Tous sont faibles en ne regardant que le poids. N'avez-vous pas saisi la relation avec votre taille?

Où rester coincé

à partir de maintenant

Les performances de cette tâche sont inférieures à 80%. Je souhaite effectuer divers ajustements tels que le taux d'apprentissage, la taille du mini-lot, le taux d'abandon et la normalisation des données pour en avoir une idée.

Recommended Posts

J'ai essayé la séparation linéaire super facile avec Chainer
J'ai essayé d'entraîner la fonction péché avec chainer
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai essayé Learning-to-Rank avec Elasticsearch!
J'ai essayé le clustering avec PyCaret
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai essayé la gestion du suivi avec l'API Twitter et Python (facile)
J'ai essayé d'implémenter ListNet d'apprentissage de rang avec Chainer
J'ai essayé de résumer des phrases avec summpy
J'ai essayé l'apprentissage automatique avec liblinear
J'ai essayé webScraping avec python.
J'ai essayé d'implémenter DeepPose avec PyTorch
J'ai essayé la détection de visage avec MTCNN
J'ai essayé d'exécuter prolog avec python 3.8.2.
J'ai essayé la communication SMTP avec Python
J'ai essayé la génération de phrases avec GPT-2
J'ai essayé d'apprendre LightGBM avec Yellowbrick
J'ai essayé la reconnaissance faciale avec OpenCV
J'ai essayé d'exécuter la partie DNN d'OpenPose avec le processeur Chainer
J'ai essayé l'analyse de régression multiple avec régression polypoly
J'ai essayé d'envoyer un SMS avec Twilio
J'ai essayé d'utiliser Amazon SQS avec django-celery
[Python] Test super facile avec instruction assert
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé linebot avec flacon (anaconda) + heroku
J'ai essayé de visualiser AutoEncoder avec TensorFlow
Rendez les applications GUI super faciles avec tkinter
J'ai essayé d'utiliser du sélénium avec du chrome sans tête
J'ai essayé l'analyse factorielle avec des données Titanic!
J'ai essayé d'apprendre avec le Titanic de Kaggle (kaggle②)
765 J'ai essayé d'identifier les trois familles professionnelles par CNN (avec Chainer 2.0.0)
[AWS] [GCP] J'ai essayé de rendre les services cloud faciles à utiliser avec Python
J'ai essayé un langage fonctionnel avec Python
J'ai essayé d'apprendre l'angle du péché et du cos avec le chainer
(Apprentissage automatique) J'ai essayé de comprendre attentivement la régression linéaire bayésienne avec l'implémentation
J'ai essayé la récurrence avec Python ② (séquence de nombres Fibonatch)
J'ai essayé d'implémenter DeepPose avec PyTorch PartⅡ
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai essayé de jouer avec l'image avec Pillow
J'ai essayé de résoudre TSP avec QAOA
J'ai essayé la reconnaissance d'image simple avec Jupyter
J'ai essayé le réglage fin de CNN avec Resnet
J'ai essayé le traitement du langage naturel avec des transformateurs.
[Zaif] J'ai essayé de faciliter le commerce de devises virtuelles avec Python
# J'ai essayé quelque chose comme Vlookup avec Python # 2
J'ai essayé de rendre mon propre code source compatible avec Chainer v2 alpha
J'ai essayé la reconnaissance manuscrite des caractères des runes avec scikit-learn
J'ai essayé de prédire l'année prochaine avec l'IA
J'ai essayé des centaines de millions de SQLite avec python
J'ai essayé d'implémenter la lecture de Dataset avec PyTorch
J'ai essayé d'utiliser lightGBM, xg boost avec Boruta
J'ai essayé la reconnaissance d'image de CIFAR-10 avec Keras-Learning-
J'ai essayé d'apprendre le fonctionnement logique avec TF Learn
J'ai essayé de déplacer GAN (mnist) avec keras