[PYTHON] Verwendung der Ergebnisse des MLP-Klassifikators von scikit-learn in anderen Diensten (Sprachen)

Einführung

Vor kurzem war ich ungefähr 3 Monate lang Anfänger, seit ich anfing, maschinelles Lernen anzuwenden.

Ich möchte tensorFlow verwenden, habe aber immer noch das Gefühl, dass der Schwellenwert hoch ist. Daher verwende ich derzeit "scikit-learn", das alles bietet, was für maschinelles Lernen erforderlich ist. (Ich möchte in Zukunft zu TensorFlow wechseln.)

Hier werde ich eine persönliche Notiz darüber hinterlassen, wie mit dem erstellten Modell in anderen Sprachen umgegangen werden soll.

Ich wäre Ihnen dankbar, wenn Sie auf Fehler hinweisen könnten.

Vorbereitete Daten

Als Beispiel wird Folgendes angestrebt.

Welcher Algorithmus zum Erstellen des Klassifikators verwendet werden soll

Anfangs habe ich folgenden Algorithmus gewählt:

Als ich mir die vorbereiteten Daten ansah, hatte ich das Gefühl, dass eine lineare Trennung nicht möglich ist. Deshalb habe ich mit SVM trainiert, das Nichtlinearität unterstützt. Der verwendete Kernel ist der Gaußsche Kernel.

In der Verwirrungsmatrix der Trainingsdaten lag die korrekte Antwortrate bei etwa 99%.

Als ich mir jedoch die Verwirrungsmatrix der Testdaten ansah, erzeugte ich eine Situation, in der alle Nullen oder Einsen vorhergesagt wurden. Es kam zu sogenanntem Overlearning. (Angesichts der Beziehung zwischen der Anzahl der vorbereiteten Proben und der Anzahl der Dimensionen ist eine Überanpassung sinnvoll. Wenn Sie die Hyperparameter anpassen, können Sie möglicherweise bis zu einem gewissen Grad damit umgehen.)

Vor kurzem wurde eine mit einem neuronalen Netzwerk kompatible Klasse in scikit-learn implementiert, also habe ich versucht, sie zu verwenden.

Verwendete Klasse: MLPClassifier Offizielle Seite: http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html

Infolgedessen lernte es richtig und die Generalisierungsleistung war höher als die der nichtlinearen SVM.

Verwenden Sie die Ergebnisse von MLPClassifier in anderen Sprachen.

Wenn Sie das "Gewicht" und die "Voreingenommenheit" kennen, ist dies fast ein Ziel.

Der folgende Code zeigt, wie Sie es von MLPClassifier erhalten.

Gewicht
MLPClassifier#coefs_
vorspannen
MLPClassifier#intercepts_

Da das Verfahren mit einer Pluralform endet, können, wenn es mehrere Schichten des neuronalen Netzwerks gibt, das Gewicht und die Vorspannung für diese Schicht erhalten werden.

Wenn das neuronale Netzwerk Eingangsschicht (100 Dimensionen) → verborgene Schicht 1 (200 Dimensionen) → verborgene Schicht 2 (300 Dimensionen) → Ausgangsschicht ist

Die Matrix, die mit "MLPClassifier # coefs_" erhalten werden kann, sollte eine Matrix mit einer Größe von 100 x 200 sein, wenn es sich um ein Netzwerk aus Eingabeschicht (100 Dimensionen) → versteckter Schicht 1 (200 Dimensionen) handelt.

Mit anderen Worten, wenn Sie diese Matrix in einer anderen Sprache lesen können, ist dies in Ordnung.

Eigentlich möchte ich es in Rails integrieren, also mache ich eine Matrixberechnung mit den Klassen Matrix und Vector.

#Ähnliche Lesevorgänge treten so oft auf wie Ebenen

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)

#Die erste Zeile und die erste Spalte entsprechen der Kopfzeile, lassen Sie also die anderen weg ...
matrix = matrix.first_minor(0, 0).map(&:to_f)

Versuch es

Es war ein Problem, das der derzeit unterstützte Klassifizierer auch dann klassifizieren kann, wenn die Anzahl der Dimensionen nicht so groß und die Ebene nicht tief ist. Wenn jedoch die Anzahl der Dimensionen 10.000 überschreitet und die Anzahl der Schichten in Zukunft enorm ist, bleibt die Frage offen, ob diese Methode verwendet werden kann.

Recommended Posts

Verwendung der Ergebnisse des MLP-Klassifikators von scikit-learn in anderen Diensten (Sprachen)
Verwendung der C-Bibliothek in Python
Melden Sie sich mit SSH bei einem Remote-Server an
Geben Sie die ausführbare Python-Datei an, die mit virtualenv verwendet werden soll
Der einfachste Weg, OpenCV mit Python zu verwenden
Wie man tkinter mit Python in Pyenv benutzt
Loggen Sie sich mit json mit pygogo ein.
Konvertieren Sie das Bild in .zip mit Python in PDF
Verwendung der Exist-Klausel in Django Queryset
Geben Sie MinGW als den in Python verwendeten Compiler an
Verwendung des in Lobe in Python erlernten Modells
Ich möchte R-Datensatz mit Python verwenden
Verwenden Sie mit boto3 etwas anderes als das Standardprofil
Wovon ich süchtig war, als ich mein eigenes neuronales Netzwerk mit den Gewichten und Vorurteilen aufbaute, die ich mit dem MLP-Klassifikator von scikit-learn bekam.
Umfrage zum Einsatz von maschinellem Lernen in realen Diensten
Verwendung der Methode __call__ in der Python-Klasse
So manipulieren Sie das DOM im Iframe mit Selen
[Python] Ich möchte die Option -h mit argparse verwenden
Ich kann mich mit Django 3 nicht auf der Admin-Seite anmelden
Hinweise zur Verwendung von Marshmallow in der Schemabibliothek