[RUBY] Pour utiliser les résultats obtenus par le classificateur MLP de scikit-learn dans d'autres services (langues)

introduction

Récemment, je suis débutant depuis environ 3 mois depuis que j'ai commencé à utiliser l'apprentissage automatique.

Je veux utiliser tensorFlow, mais je pense toujours que le seuil est élevé, donc j'utilise actuellement "scikit-learn" qui a tout le nécessaire pour l'apprentissage automatique. (J'aimerais passer à tensorFlow à l'avenir.)

Ici, je laisserai une note personnelle sur la manière de gérer le modèle créé dans d'autres langues.

Je vous serais reconnaissant de bien vouloir signaler toute erreur.

Données préparées

À titre d'exemple, ce qui suit est ciblé.

Quel algorithme utiliser pour créer le classificateur

Au départ, j'ai choisi l'algorithme suivant:

En regardant les données préparées, j'ai senti que la séparation linéaire n'était pas possible, alors je me suis entraîné avec SVM qui prend en charge la non-linéarité. Le noyau utilisé est le noyau gaussien.

En regardant la matrice de confusion des données de formation, le taux de réponse correcte était d'environ 99%.

Cependant, lorsque j'ai examiné la matrice de confusion des données de test, j'ai créé une situation dans laquelle tous les 0 ou 1 étaient prédits. Un soi-disant surapprentissage se produisait. (Il est logique de sur-ajuster compte tenu de la relation entre le nombre d'échantillons préparés et le nombre de dimensions. Il peut être possible de le traiter dans une certaine mesure en ajustant les hyper paramètres.)

Donc, tout récemment, une classe pour les réseaux de neurones a été implémentée dans scicit-learn, alors j'ai essayé de l'utiliser.

Classe utilisée: MLPClassifier Page officielle: http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html

En conséquence, il a appris correctement et les performances de généralisation étaient supérieures à celles du SVM non linéaire.

Utilisez les résultats de MLPClassifier dans d'autres langues.

Dès la conclusion, si vous connaissez le «poids» et le «biais», c'est presque un objectif.

Le code ci-dessous montre comment l'obtenir à partir de MLPClassifier.

poids
MLPClassifier#coefs_
biais
MLPClassifier#intercepts_

Comme la méthode se termine au pluriel, s'il existe plusieurs couches du réseau neuronal, vous pouvez obtenir le poids et le biais de cette couche.

Lorsque le réseau de neurones est une couche d'entrée (100 dimensions) → couche cachée 1 (200 dimensions) → couche cachée 2 (300 dimensions) → couche de sortie

La matrice qui peut être obtenue avec MLPClassifier # coefs_ doit être une matrice d'une taille de 100x200 s'il s'agit d'un réseau de couche d'entrée (100 dimensions) → couche cachée 1 (200 dimensions).

En d'autres termes, si vous pouvez lire cette matrice dans une autre langue, ce n'est pas grave.

En fait, je veux l'intégrer dans Rails, donc je fais un calcul matriciel en utilisant les classes Matrix et Vector.

#Des lectures similaires se produisent autant de fois que de couches

file_path = File.expand_path('app/models/hogehoge.csv', ENV['RAILS_ROOT'])
csv_data = CSV.read(file_path, headers: false)
matrix = Matrix.rows(csv_data, true)

#La première ligne et la première colonne correspondent à l'en-tête, donc omettez les autres ...
matrix = matrix.first_minor(0, 0).map(&:to_f)

Essayez-le

C'était un problème que le classificateur actuellement pris en charge peut classer même si le nombre de dimensions n'est pas si grand et la couche n'est pas profonde. Cependant, si le nombre de dimensions dépasse 10 000 et que le nombre de couches est énorme, il reste à savoir si cette méthode peut être utilisée.

Recommended Posts

Pour utiliser les résultats obtenus par le classificateur MLP de scikit-learn dans d'autres services (langues)
Comment utiliser la bibliothèque C en Python
Connectez-vous à un serveur distant avec SSH
Spécifiez le fichier exécutable Python à utiliser avec virtualenv
Le moyen le plus simple d'utiliser OpenCV avec python
Comment utiliser tkinter avec python dans pyenv
Connectez-vous avec json en utilisant pygogo.
Convertissez l'image au format .zip en PDF avec Python
Comment utiliser la clause exist dans l'ensemble de requêtes Django
Spécifiez MinGW comme compilateur utilisé dans Python
Comment utiliser le modèle appris dans Lobe en Python
Je veux utiliser le jeu de données R avec python
utiliser autre chose que le profil par défaut avec boto3
Ce à quoi j'étais accro lorsque j'ai construit mon propre réseau de neurones en utilisant les poids et les biais que j'ai obtenus avec le classificateur MLP de scikit-learn.
Enquête sur l'utilisation du machine learning dans les services réels
Comment utiliser la méthode __call__ dans la classe Python
Comment manipuler le DOM dans iframe avec Selenium
[Python] Je souhaite utiliser l'option -h avec argparse
Je n'arrive pas à me connecter à la page d'administration avec Django 3
Remarques sur l'utilisation de la guimauve dans la bibliothèque de schémas