In meinem letzten Blogbeitrag habe ich gezeigt, wie man mit Microsoft Azure Machine Learning Studio ein Experiment anlegen kann und dieses als Web Service bereitstellt. Heute möchte ich zeigen wie einfach es ist dieses WebService z.B. in einer eigenen Konsolenanwendung zu nutzen.
Das Machine Learning Experiment
Zur Erinnerung, wir haben zuletzt ein Experiment zur Vorhersage, ob eine Person mehr als US$ 50.000 pro Jahr verdienen kann, angelegt. Wir haben uns dazu, der Azure AI Gallery bedient und uns das fix fertige Experiment, natürlich inklusive der Daten in unser Machine Learning Studio geholt. Wer nochmal wissen will, wie das genau funktioniert hat, kann ganz einfach meinen letzten Blogbeitrag nochmal lesen.
Die Konsolenanwendung
Mit Hilfe von MS Visual Studio 2017 legen wir einfach eine simples Konsolenanwendungs-Projekt mit dem Namen „MLSampleWSCall“ an. Ein kleiner Tipp an dieser Stelle. Abgesehen davon, dass man nun die Konsolenanwendung natürlich selbst erfinden kann, gibt es zum selbst erstellten WebService auch eine Hilfe. Klickt man auf „Request/Response“ in der Spalte „API HELP PAGE“ erscheint zum WebService ein sehr gute Hilfe-Seite.
Nicht nur, dass man hier die Beschreibung zu den Parametern erhält, nein man bekommt auch einen fix fertige Demo-Source-Code in den Sprachen C#, R oder Python zur Verfügung gestellt. Nachdem man den Code selektiert und in sein eigenes Konsolenanwendungs-Projekt reinholt, braucht man nur mehr den API key ändern. Man beachte, dass die Service-URI bereits korrekt im Sample-Code enthalten ist. Wichtig ist auch, dass man den Instruktionen des 1. Kommentars folge leistet. Denn hier steht, dass man auch das Nuget Package Microsoft.AspNet.WebApi.Client für das Projekt benötigt. Das installiert man in Visual Studio mit Hilfe des Nuget Package Managers und somit sollten alle Assemblies und damit verbundenen Referenzen passen.
Jetzt starten wir ganz einfach mal die Anwendung und warten auf das Ergebnis.
Wow! Die Verbindung funktioniert, d.h. der Aufruf war erfolgreich. Das Ergebnis selbst ist nicht berauschend, bedenkt man, dass wir uns um die Eingabewerte kaum gekümmert haben. Die Wahrscheinlichkeit weniger als US$ 50.000 zu verdienen liegt defacto bei 0 % (0,00322…). Das ist auch klar, der Demo-Source-Code beinhaltet ja auch keinen sinnvollen Eingabewerte. Die Zumindest hat der 1. Aufruf aber gezeigt, dass alles funktionell vorhanden und erreichbar ist. 🙂
Also starten wir noch einen Versuch und geben jetzt ein paar andere Eingabewerte mit. Damit wir auch wissen, welche Werte von den Parametern akzeptiert werden, ist es hilfreich nochmals einen Blick auf die Hilfe des WebServices zu werfen. Im Abschnitt „Output Parameters“ sind die möglichen Werte für die einzelnen Parameter aufgeschlüsselt.
Machen wir also einen Aufruf für einen männlichen weißen verheirateten 40-jährigen Amerikaner, der ein Master-Studium abgeschlossen hat. Nehmen wir zusätzlich an er ist Privatangestellter.
- sex = Male
- age = 40
- workclass = Private
- education = Masters
- marital-status = Married-civ-spouse
- occupation = Prof-specialty
- native-country = United-States
Der Parameter im Source Code sieht dann z.B. wie folgt aus:
Values = new string[,] { { „40“, „Private“, „0“, „Masters“, „“, „Married-civ-spouse“, „Prof-specialty“, „Husband“, „White“, „Male“, „0“, „0“, „40“, „United-States“, „value“ } }
Zur Info, man könnte hier natürlich mehrere Daten übergeben und diese „vorhersagen“ lassen, darauf verzichten wir aber in diesem Schritt. D.h. wir übergeben ein JSON-Array mit nur einem Datensatz. Lassen wir uns also jetzt die Ausgabe für unsere „Machine Learning Dummy“ berechnen.
Wow, und jetzt erhalten wir eine echte Vorhersage, die auch noch dazu plausibel klingt. Diese Person verdient mit einer Wahrscheinlichkeit von ~ 86 % mehr als US$ 50.000 pro Jahr.
Fazit
Ergänzend zu meinem letzten Beitrag wollte ich hier zeigen, wie schnell es geht mit Hilfe des MS Azure Machine Learning Studios eine eigene Anwendung zu programmieren, die ein WebService basierend auf Machine Learning nutzt. Die Infrastruktur und das Service selbst, das hier Microsoft zur Verfügung stellt, erleichtert die Arbeit ungemein. Der Schritt zu einer eigenen echten Anwendung, Webapplikation, mobilen Applikation oder als Teil einer SharePoint Lösung mit einem „fancy“ Benutzerinterface ist nur mehr sehr klein. Natürlich gibt es hier noch die eine oder andere technische Hürde, wie z.B. das hinlänglich bekannte CORS Problem bei Webapplikationen. Diesbezüglich gibt es natürlich auch Workarounds. Eine Möglichkeit wäre beispielweise hier zu finden.
Aber es muss nicht immer eine eigene/neue Applikation sein. Ganz im Gegenteil denn das Ganze kann man natürlich auch mit Hilfe von Excel nutzen und das möchte ich dann beim nächsten Mal herzeigen.
🙂