[PYTHON] Anwendungsentwicklung mit Azure Machine Learning

Azure Machine Learning ist eine Plattform, mit der Sie auf einfache Weise ein Modell für maschinelles Lernen mit einem Webbrowser erstellen können (Offizielle Version im Februar 2015. ).

Das hier erstellte Modell kann über die Web-API aufgerufen werden. Bisher war es bei der Einbettung von maschinellem Lernen üblich, Bibliotheken wie Python zu verwenden, und es war häufig erforderlich, auf einer Plattform zu entwickeln, die sich von den bekannten Sprachen unterscheidet, aber auch bei dieser Webanforderung Wenn Sie es überspringen können, können Sie eine Anwendung entwickeln, die einen Algorithmus für maschinelles Lernen verwendet.

Dieses Mal werde ich das Verfahren für die Anwendungsentwicklung mit diesem Azure Machine Learning vorstellen. Das folgende ist das endgültige Diagramm des diesmal erstellten Modells. Ich werde entlang dieses Flusses erklären.

flow1.PNG

Auf den Code für dieses Modell und die Anwendungen, die dieses Modell verwenden, kann über das unten stehende Github-Repository zugegriffen werden. Wie später beschrieben wird, ist die Genauigkeit des Modells jedoch enttäuschend. Ich denke, es würde Spaß machen, Ihr eigenes zu optimieren.

pollen_prediction_by_azure

Im Wiki des Repositorys finden Sie Links zu Referenzseiten.

0. Datenaufbereitung und Modelldesign

Entscheiden Sie zunächst, welche Daten Sie trainieren möchten und was Sie tun möchten. Entwerfen Sie insbesondere die Ein- / Ausgänge des endgültigen Modells und treffen Sie die Daten dafür.

Was Sie mit maschinellem Lernen tun können, ist, um es grob auszudrücken, "Vorhersage des Wertes" oder "Beurteilung der Klassifizierung". Dies ist für eine komplexe, lernähnliche Lernmaschine nicht anders.

In vielen Fällen ist es (empirisch) effizienter, zuerst zu entscheiden, was Sie vorhersagen / klassifizieren möchten, und dann nach den erforderlichen Daten zu fischen. Da die öffentlich zugänglichen Daten jedoch nicht so sind, sind sie häufig an die Beschränkungen gebunden ...

Dieses Mal werde ich die Menge des verstreuten Pollens vorhersagen. Es ist eine Dimension, die die Menge des gestreuten Pollens durch Eingabe der aus der Wettervorhersage erhaltenen Parameter vorhersagt und für Pollengegenmaßnahmen nützlich ist.

Die Menge der verstreuten Pollen wird unten veröffentlicht, daher werden wir diese als Trainingsdaten verwenden.

OpenWeatherMap

reader.PNG

Eigentlich gab es keine Wettervorhersage, die kostenlos genutzt werden konnte, aber ich habe eine schöne gefunden, also werde ich sie verwenden. Zusätzlich zur Temperatur gibt es Windgeschwindigkeit und -richtung in den Daten über das Ausmaß der Streuung, aber diese API kann verwendet werden, um sie zu erhalten. 1. Datenerfassung Ab hier verwenden wir Azure Machine Learning. Verwenden Sie es jetzt von hier. Sie können ein neues Modell über die Schaltfläche + unten links erstellen. Beginnen Sie mit dem Laden der Daten. Ich denke, die am häufigsten verwendete Datenquelle ist "Web-URL über HTTP". Dieses Mal habe ich die CSV-Datei in das GitHub-Repository verschoben, die RAW-Adresse angegeben und die Daten geladen. * Ab März 2015 werden JSON / XML-Daten leider nicht unterstützt (OData, die in Azure Marketplace verwendet werden, können verwendet werden), sodass der Feed verwendet werden kann Es ist eine schwierige Situation, die von oder API erhaltenen Daten so zu platzieren, wie sie sind.

Um die Daten abzurufen oder den von Ihnen erstellten Prozess auszuführen, klicken Sie unten auf die Schaltfläche "RUN". Die Daten sollten abgerufen worden sein, als der Lauf abgeschlossen war.

Eine der Eigenschaften von Azure Machine Learning ist, dass die Datenvisualisierungsfunktion einfach zu verwenden ist. Der Speicherort ist schwer zu verstehen. Wenn Sie jedoch nach der Ausführung mit der rechten Maustaste auf den folgenden Speicherort klicken, sollte ein Menü mit dem Namen "Visualisieren" angezeigt werden. Wenn Sie dies tun, können Sie die Informationen der erfassten Daten sehen. Lassen Sie uns prüfen, ob die Daten damit richtig erfasst werden können.

right_click2.PNG

Sie können sich auch auf die Details der statistischen Informationen der Daten beziehen, indem Sie die statischen Funktionen verbinden. Dies wird in Zukunft nützlich sein, um abnormale Werte zu erkennen.

statistics.PNG

Wenn die Daten ordnungsgemäß geladen wurden, speichern Sie die Daten mit "Als Datensatz speichern" aus dem Kontextmenü wie in Visualisieren. Wenn Sie in Zukunft Ihren Datenfluss aufbauen, müssen Sie den Prozess viele Male ausführen. Es ist ineffizient, jedes Mal eine große Datenmenge mit einer HTTP-Anforderung abzurufen, und es belastet auch die Person, die sie abruft. Speichern Sie sie daher als Datensatz und stellen Sie sie jederzeit zur Verfügung.

Ich werde die bisherigen Punkte zusammenfassen.

2. Datenformung

Da die Daten fehlen oder Ausreißer enthalten, werden wir daran arbeiten, sie zu entfernen oder zu füllen. Dies ist ein sehr wichtiger Prozess, da die Genauigkeit erheblich variieren kann, je nachdem, ob Sie dies tun oder nicht.

Das Folgende ist eine Visualisierung der importierten Daten, die mit der beschreibenden Statistik statischer Funktionen verbunden sind.

data_preview.PNG

Von hier aus können wir Folgendes sehen.

Die Anzahl der fehlenden / Ausreißer-Daten beträgt 82 bzw. 4, was im Vergleich zu insgesamt 30.000 recht gering ist. Daher werde ich diesmal alle löschen. Als ich die Menge der verstreuten Pollen überprüfte, schienen es normale Daten zu sein, also behielt ich sie bei ... aber da die Genauigkeit nicht so hoch war, setzte ich schließlich die Obergrenze für diejenigen über 1.500 auf 1.500.

Laut Herrn Hanako, dem Datenanbieter, scheint dieser Wert von 1.500 ein gefährlicher Bereich für mehr als 1.000 Pollen zu sein, deshalb habe ich beschlossen, ihn mit einer etwas größeren Zahl zu schneiden. Nach den statistischen Informationen beträgt das 3. Quartil der Pollendispersion (75% Quadrant, der Punkt, an dem 75% der Daten aus dem kleinen Quasi eingehen) 45, und es ist ersichtlich, dass die meisten Daten im kleinen Bereich liegen. Der Schnitt sollte also keine große Wirkung haben.

An diesem Punkt scheint es besser zu sein, die Pollenmenge in große, mittlere und kleine zu unterteilen, als zurückzukehren. Diesmal besteht der Zweck darin, eine Anwendung mit Azure Machine Learning zu erstellen. Also legte ich es beiseite und ging zum nächsten über.

Sobald Sie sich für eine Richtlinie für fehlende Daten und Ausreißer entschieden haben, können Sie diese implementieren.

Eigentlich habe ich es wie folgt implementiert.

data_manipulation.PNG

Ich bin nicht auf das Bereinigen fehlender Daten beschränkt, sondern öffne manchmal die Spaltenauswahl für die Einstellung von ... für diese Spalte. Sie müssen hier ein wenig vorsichtig mit der Einstellungsmethode sein.

column_selector1.PNG

Grundsätzlich wird es als "xx von allen Spalten ausschließen" oder "Nur Spalten von yy" angegeben. Mit anderen Worten, verwenden Sie im Prinzip Ausschließen, wenn Beginnen mit Alle Spalten ist, und Einschließen, wenn Keine Spalten vorhanden sind. Beachten Sie, dass es nicht sinnvoll ist, mehr in alle Spalten aufzunehmen.

Aus dem Namen heraus dachte ich, dass Filter verwendet werden könnte, um "Daten zu löschen, deren xx-Spalte yy oder mehr ist", aber das ist nicht der Fall. Filter wird verwendet, um die oberen und unteren Grenzen des Werts festzulegen (Schwellenwertfilter, größer als 1.500, setzt 1.500 oder mehr auf 1.500). Filter kann angewendet werden, indem Filter anwenden und Filter kombiniert werden.

Im Gegenteil, es gibt derzeit niemanden, der zum "Löschen von Daten mit einer xx-Spalte von yy oder mehr" verwendet werden kann ... (Clean Missing Data funktioniert nur für fehlende Werte), daher behandelt Python Script dies. Ich werde entscheiden.

Python Script übergibt das empfangene Dataset als Argument und gibt das Dataset als Rückgabewert an nachfolgende Flows zurück. Der Argumenttyp liegt in Form einer Bibliothek vor, die Datenrahmen mit dem Namen pandas verarbeiten kann. Bitte beachten Sie, dass Python3-Benutzer ab März 2015 2.7 schreiben können.

Das diesmal verwendete Skript lautet wie folgt. Die Daten des Werts, der ein abnormaler Wert zu sein scheint, werden abgestoßen.

# The script MUST contain a function named azureml_main
# which is the entry point for this module.
#
# The entry point function can contain up to two input arguments:
#   Param<dataframe1>: a pandas.DataFrame
#   Param<dataframe2>: a pandas.DataFrame
def azureml_main(dataframe1 = None, dataframe2 = None):

    # Execution logic goes here
    # print('Input pandas.DataFrame #1:\r\n\r\n{0}'.format(dataframe1))

    # If a zip file is connected to the third input port is connected,
    # it is unzipped under ".\Script Bundle". This directory is added
    # to sys.path. Therefore, if your zip file contains a Python file
    # mymodule.py you can import it using:
    # import mymodule
    
    erased = dataframe1[dataframe1.Col11 >= 0]
    erased = erased[erased.Col14 > -50]
    erased = erased[erased.Col16 >= 0]
        
    # Return value must be of a sequence of pandas.DataFrame
    return erased,

Führen Sie zu diesem Zeitpunkt Run aus, um festzustellen, ob Visualize die Daten ordnungsgemäß verarbeitet (z. B. wenn fehlende oder Ausreißer verschwunden sind).

3. Definition der Datenelemente

Insbesondere ist die Elementdefinition von Daten wie folgt.

Dieses Mal haben wir die Elemente so benannt, dass sie im nachfolgenden Prozess problemlos verarbeitet werden können. Setzen Sie den Datentyp auf Float, setzen Sie die Pollenstreuungsmenge auf den vorhergesagten Wert und legen Sie die anderen Features als Feature-Menge fest. Verwenden Sie dazu den Metadaten-Editor unter Datentransformation> Manipulation.

Wenn Sie die zu verwendenden Features eingrenzen möchten, schränken Sie die Spalten ein, die unter Projektspalten der Datentransformation> Manipulation verwendet werden sollen. Im Modell reicht es nicht aus, die Feature-Menge einzugeben, aber im Grunde ist es besser, dies mit einer kleinen Anzahl von Elite-Leuten zu tun, die gut für das Vorhersageziel arbeiten. Selbst wenn Sie alle Funktionen verwenden möchten, empfiehlt es sich, diese Projektspalten in den Prozess einzubeziehen, damit Sie die Anzahl der Funktionen anpassen können, die Sie später verwenden werden.

4. Modellbau

Wir werden das lang erwartete Modell des maschinellen Lernens erstellen. Wie Sie an der Tatsache erkennen können, dass dies eine lange Zeit war, besteht der größte Teil des maschinellen Lernprozesses auch aus dem Formen und Verarbeiten von Daten.

Der Abschnitt Maschinelles Lernen ist in vier Abschnitte unterteilt: Bewerten, Modell initialisieren, Punktzahl und Trainieren.

machines.PNG

Der grundlegende Ablauf ist Modell initialisieren> Zug> Punktzahl> Auswerten. Der Ablauf besteht darin, das Modell zu initialisieren, zu trainieren, den Wert mit den Bewertungsdaten vorherzusagen und das Ergebnis zu bewerten.

Bei der Modellkonstruktion wählen wir Modell initialisieren und verwenden dieses Mal die lineare Regression, weil wir den Wert vorhersagen (tatsächlich haben wir dies im neuronalen Netz getan, aber es war nicht so genau, sodass wir schließlich zur linearen Regression zurückgekehrt sind).

Das bereitgestellte neuronale Netz ist übrigens voll kompatibel mit Deep Learning. Insbesondere unter Windows ist es schwierig, Deep-Learning-Bibliotheken zu installieren. Wenn es sich also nicht um einen großen Maßstab handelt oder Sie nur verschiedene Muster ausprobieren möchten, reicht es meiner Meinung nach aus, diese zu verwenden.

Jedes Modell verfügt über Initialisierungsparameter, und Sie müssen noch wissen, welche Werte festgelegt werden müssen. Sie können auch auf das Dokument unten in den Eigenschaften verweisen. Stellen Sie daher die Parameter ein, während Sie sich das auch ansehen.

5. Lernen / Bewertung

Nachdem wir das Modell und die Daten haben, werden wir sie verwenden, um das Lernen und die Genauigkeit zu bewerten.

Verwenden Sie zunächst Datentransformation> Probe und Teilen> Teilen, um sie für Training und Auswertung zu teilen (Bild unten).

train.PNG

Ich denke, dass Sie die Daten vor dem Training normalisieren müssen, aber da viele Trainingsmodelle die Normalisierungsmethode als Teil der Eigenschaft des Initialisierungsmodells angeben, ist es notwendig, die Normalisierung einzeln durchzuführen. es gibt kein. Wenn ein Wert wie dieser vorhergesagt wird und er zum Zeitpunkt des Lernens normalisiert ist, ist der vorhergesagte Wert auch ein normalisierter Wert, daher ist ursprünglich eine Berechnung für die Wiederherstellung erforderlich ... aber das ist auch gut. Es scheint, dass. Im Gegenteil, wenn Sie über Datentransformation> Daten normalisieren usw. normalisieren und im Modell nicht normalisieren, funktioniert diese Wiederherstellung wahrscheinlich nicht.

In dem für das Training verwendeten Zugmodell wird nur ein Element mit vorhergesagtem Wert (Etikettenwert) festgelegt, und die anderen Elemente werden als Merkmalsmengen an das Modell übergeben. Ein trainiertes Modell wird vom Zugmodell übergeben, was zum Ergebnismodell führt. Verwenden Sie nun das trainierte Modell, um den Wert aus den Bewertungsdaten vorherzusagen. Der Unterschied zwischen den vorhergesagten und den tatsächlichen Werten ist im endgültigen Bewertungsmodell ersichtlich. Natürlich können Sie mit Cross Varidation auch alles auf einmal tun.

Nach dem Erstellen des Flusses werden Lernen und Auswertung tatsächlich durchgeführt, indem der Prozess wie zuvor mit RUN ausgeführt wird.

Es ist ein interessantes Ergebnis, aber ...

result.PNG

Der leicht verständliche Root Mean Squared Error von 146 ist keine sehr gute Nachricht. Die Standardabweichung der Pollenmenge, die nach dem Abstoßen des Ausreißers gestreut wird, beträgt 137,4186, und der quadratische Mittelwertfehler ist größer als dieser.

Dies bedeutet, dass die vorhergesagten Werte variabler sind als die Originaldaten, das heißt, sie sind völlig unzuverlässig, sodass die vorhergesagten Werte dieses Modells nahezu unzuverlässig sind.

Wenn Sie Visualisieren mit Score-Modell versuchen, können Sie die Tendenz deutlicher erkennen. Die folgende Abbildung ist eine grafische Darstellung des vorhergesagten Werts der bewerteten Etiketten und des tatsächlichen Werts der Pollendispersion (Pollen). Wenn die Genauigkeit hoch ist, sollten die beiden in perfekter Korrelation stehen. Wenn Sie also eine klare Linie von links nach oben sehen, können Sie gut vorhersagen ... aber in Wirklichkeit.

result2.PNG

Zuerst dachte ich, diese Vorhersage wäre einfach (wenn die Temperatur hoch ist, steigt sie und wenn es regnet, sinkt sie ...), war es aber nicht. Danach habe ich versucht, die Optimierung durchzuführen, aber die Genauigkeit hat sich nicht wie erwartet verbessert. Deshalb habe ich sie in das Regal gestellt, ein anständiges Modell erstellt und mich darauf vorbereitet, dieses Vorhersagemodell als Webdienst zu verwenden.

6. Webdienst

Es gibt die folgenden zwei Arten von Webdiensten.

Da Lernen der Fluss ist, den wir jetzt machen, können wir es in eine API verwandeln, indem wir unten auf die Schaltfläche "Webdienst veröffentlichen" klicken. Bereiten Sie zusätzlich zu den Originaldaten einen Empfangsport von der Web-API und einen Exit für die Antwort vor. Beide werden automatisch hinzugefügt, wenn Sie die Taste drücken.

Tatsächlich können Sie den Flow zwischen normaler Zeit und Web-API-Zugriff umschalten und mit der Schaltfläche unten links die Zeit zum Erstellen des Flows umschalten.

↓ Normalerweise (bis jetzt) war es im linken Zustand, aber wenn Sie dies ändern, wird es beim Zugriff auf die Web-API auf der rechten Seite umgeschaltet switch_space.PNG

Klicken Sie auf die Schaltfläche unten, um eine Vorhersage-API zu erstellen.

create_scoring_model.PNG

Wenn Sie diese Taste drücken, wird ein Vorhersagefluss mit einem eingebauten trainierten Modell gewellt und erstellt. Grundsätzlich wird der Fluss zum Zeitpunkt des Lernens kopiert. Da jedoch einige Dinge zum Zeitpunkt der Vorhersage nicht erforderlich sind, erstellen Sie den Fluss zum Zeitpunkt der Vorhersage, während Sie solche Prozesse löschen.

Dieses Mal habe ich den folgenden Flow erstellt. Der Elementdefinitionsteil folgt dem Ablauf zum Zeitpunkt des Lernens, normalerweise durch manuelles Eingeben von Daten und Testen (über Dateneingabe und -ausgabe> Daten eingeben) und Empfangen von POST-Daten beim Zugriff auf die Web-API Gibt den vorhergesagten Wert zurück.

web_api_model.PNG

Nachdem Sie diesen Ablauf erstellt und den Vorgang mit RUN bestätigt haben, veröffentlichen Sie den Webdienst mit "Webdienst veröffentlichen" sowie die Lern-API.

Sie können die Zugriffs-URL und den API-Schlüssel auf der Web-API-Seite überprüfen.

web_api.PNG

Sie können die API hier testen und sogar Beispielcode für C # / Python / R einfügen. Auf diese Weise kann das Lernen / Vorhersagen über die Web-API durchgeführt werden.

Implementierung

Dieses Mal habe ich, wie ich zu Beginn entschieden habe, die Wettervorhersage von der API erhalten, die Menge der Pollenstreuung unter Verwendung des Eingabewerts vorhergesagt und diese Ergebnisse zusammen angezeigt.

pollen_prediction_by_azure/application.py

Das Format der HTTP-Anforderung ist ziemlich umständlich, aber Sie können das Vorhersagemodell jetzt über die Web-API verwenden.

Mithilfe von Azure Machine Learning können Sie auf einfache Weise ein Modell erstellen und über die Web-API von verschiedenen Plattformen aus lernen und Vorhersagen treffen.

Es kann sofort ohne mühsame Installation verwendet werden, daher denke ich, dass es eine gute Plattform zum Studieren und Entwickeln der ersten Anwendung für maschinelles Lernen ist.

Recommended Posts

Anwendungsentwicklung mit Azure Machine Learning
Versuchen Sie es mit dem Jupyter Notebook von Azure Machine Learning
WEB-Anwendungsentwicklung mit Django-Entwicklung Teil 1-
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
Entwicklung einer WEB-Anwendung mit Django [Django-Start]
Algorithmus für maschinelles Lernen (Unterstützung von Vektor-Maschinenanwendungen)
Maschinelles Lernen
Entwicklung einer WEB-Anwendung mit Django [Modelldefinition]
Aktienkursprognose mit maschinellem Lernen (Scikit-Learn)
Entwicklung der WEB-Anwendung mit Django [Grundeinstellung]
WEB-Anwendungsentwicklung mit Django-Development Environment Construction-
[Maschinelles Lernen] LDA-Themenklassifizierung mit Scikit-Learn
[Maschinelles Lernen] FX-Vorhersage unter Verwendung des Entscheidungsbaums
Hinweise zum lokalen Ausführen von Azure Machine Learning
Entwicklung einer WEB-Anwendung mit Django [Request Processing]
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung
Entwicklung einer WEB-Anwendung mit Django [Zusätzliche Vorlage]
App-Entwicklung mit SQLite mit Django (PTVS)
[Python] Webanwendungsdesign für maschinelles Lernen
Aktienkursprognose mit maschinellem Lernen (Return Edition)
Erstellen einer Entwicklungsumgebung für maschinelles Lernen
[Maschinelles Lernen] Regressionsanalyse mit Scicit Learn
[Memo] Maschinelles Lernen
Klassifikation des maschinellen Lernens
Beispiel für maschinelles Lernen
Eine Geschichte über einfaches maschinelles Lernen mit TensorFlow
Datenversorgungstricks mit deque beim maschinellen Lernen
Entwicklung einer WEB-Anwendung mit Django [Erstellung des Admin-Bildschirms]
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 2
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 3
Über die Entwicklungsinhalte des maschinellen Lernens (Beispiel)
[Maschinelles Lernen] Extrahieren Sie ähnliche Wörter mechanisch mit WordNet
Kausales Denken mit maschinellem Lernen (Organisation von Methoden des kausalen Denkens)
Was ich über KI / maschinelles Lernen mit Python gelernt habe (1)
Zusammenfassung des Lernprogramms für maschinelles Lernen
Wichtige Punkte von "Maschinelles Lernen mit Azure ML Studio"
Maschinelles Lernen Über Overlearning
Maschinelles Lernen ⑤ AdaBoost-Zusammenfassung
Maschinelles Lernen: Betreut --AdaBoost
Tool MALSS (Anwendung), das maschinelles Lernen in Python unterstützt
Logistische Regression beim maschinellen Lernen
Erstellen Sie maschinelle Lernprojekte mit explosiver Geschwindigkeit mithilfe von Vorlagen
Maschinelles Lernen unterstützt Vektormaschine
[Azure] Versuchen Sie, Azure-Funktionen zu verwenden
Maschinelles Lernen studieren ~ matplotlib ~
Lineare Regression des maschinellen Lernens
Memo zum Kurs für maschinelles Lernen
Bibliothek für maschinelles Lernen dlib
Maschinelles Lernen (TensorFlow) + Lotto 6
Maschinelles Lernen mit Bildern der Kategorie Caffe -1 unter Verwendung eines Referenzmodells
Lerne irgendwie maschinelles Lernen
Webanwendung mit Flasche (1)
[Maschinelles Lernen] Versuchen Sie, Objekte mithilfe der selektiven Suche zu erkennen
[Maschinelles Lernen] Textklassifizierung mit dem Transformer-Modell (Aufmerksamkeitsbasierter Klassifikator)
Konstruktionsnotiz für eine maschinelle Lernumgebung von Python
Bibliothek für maschinelles Lernen Shogun
Was ich über KI / maschinelles Lernen mit Python gelernt habe (2)