| Lautsprecher |
Transkript |
| Lucas |
Okay, vielen Dank an alle, die gekommen sind. Hören Sie sich meinen Vortrag an. Mein Name ist Lucas Beverlin. Ich bin Statistiker bei Intel. |
| |
Und heute werde ich über die Verwendung von JMP zum Vergleichen von Modellen aus verschiedenen Umgebungen sprechen. |
| |
Okay, also JMP 15 Pro ist derzeit das Neueste und Beste, was JMP auf dem Markt hat, und wenn Sie das Modell anpassen möchten, stehen Ihnen dafür mehrere verschiedene Tools zur Verfügung. |
| |
Es gibt die Fit-Modell-Plattform. Es gibt die neuronale Plattform für die Partitionierung neuronaler Netzwerke. Wenn Sie Klassifikations- und Regressionsbäume benötigen. Die nichtlineare Plattform für nichtlineare Modellierung und vieles mehr. |
| |
Und so kam es innerhalb von JMP 15, ich glaube, es kam in 12 oder 13 heraus, aber diese Modellvergleichsplattform ist ein sehr praktisches Werkzeug, mit dem Sie vergleichen können |
| |
Modellanpassungen von verschiedenen Plattformen innerhalb von JMP. Wenn Sie also einen Baum und ein neuronales Netzwerk haben und sich nicht sicher sind, welches besser ist, können Sie zwischen beiden hin- und herwechseln. Aber jetzt mit diesem |
| |
Sie haben alles auf demselben Bildschirm. So lässt sich schnell und einfach feststellen, ob dies besser ist als das usw. |
| |
JMP bietet zwar viele Funktionen, aber leider nicht alle. Hier sind ein paar Beispiele für Funktionen, die nicht passen. Zum Beispiel: |
| |
Diejenigen, die viel maschinelles Lernen und KI betreiben, könnten etwas wie einen Auto-Encoder oder ein Convolutional Neural Network verwenden, das im Allgemeinen viele Aktivierungsfunktionen oder ja, viele Knoten mit versteckten Schichten erfordert. |
| |
andere Aktivierungsfunktionen als die von JMP angebotenen, sodass JMP nicht in der Lage sein wird, einen Großteil dieser Funktionen innerhalb von JMP auszuführen. |
| |
Eine weitere Methode ist die sogenannte Projektionsverfolgungsregression. Eine weitere nennt sich multivariate adaptive Regressionssplines. Es gibt also einige Dinge, die JMP leider nicht kann. |
| |
R, Python und MATLAB. |
| |
Es gibt noch mehrere da draußen, |
| |
Ich werde mich aber auf diese drei konzentrieren. Die Ideen, die ich hier bespreche, lassen sich in C++, Java, Rust oder einer anderen Sprache umsetzen. |
| |
mir einfällt, sollten Sie viele davon verwenden können. |
| |
Wir können die Modellvergleichsplattform, wie bereits erwähnt, auch für Vergleiche mit anderer Software nutzen. Was benötigen Sie dafür? |
| |
Die beiden wichtigsten Dinge, die Sie benötigen, sind die Modellvorhersagen der Software, die Sie zur Anpassung des Modells verwenden. |
| |
Und im Allgemeinen können Sie bei der Modellanpassung, insbesondere bei größeren Modellen, die Daten in Trainingsvalidierungs- und/oder Testsätze aufteilen. |
| |
Sie benötigen etwas, das der gesamten Software mitteilt, was Training, was Validierung und was Test ist, denn Sie möchten, dass diese beim Vergleichen der Anpassungen konsistent sind. |
| |
OK, der wichtigste Grund, warum ich mich in diesem Vortrag auf R, Python und MATLAB konzentriert habe, ist, dass sich herausgestellt hat, dass JMP und die Skriptsprache tatsächlich eigene R-Sitzungen erstellen und daraus Code ausführen können. |
| |
Dieses Bild hier zeigt also sehr schnell, wenn ich ein lineares Regressionsmodell an eine Ausgabe anpassen wollte |
| |
Zum Bostoner Wohnungsdatensatz. Ich werde später noch viel mehr mit diesem Datensatz arbeiten. |
| |
Wenn Sie jedoch schnell ein lineares Regressionsmodell in R anpassen und die Vorhersagewerte ausgeben möchten, ist das möglich. Natürlich können Sie das auch mit JMP tun. Aber nur um eine einfache Idee zu vermitteln. |
| |
Also, |
| |
Eine Sache ist zu beachten: Ich verwende R 3.6.3, aber JMP kann alles verarbeiten, solange es größer als 2.9 ist. |
| |
Und ähnlich wie bei Python können Sie Ihre eigene Python-Sitzung aufrufen. Hier im Bild sehen Sie, wie ich die lineare Regression mit Python anpasse. Ich werde hier nicht alle Codezeilen durchgehen, aber Sie verstehen die Grundidee. |
| |
Bei Python ist natürlich Vorsicht geboten, da die neueste Version von Python 3.8.5 verfügbar ist. Wenn Sie jedoch Anaconda zur Installation verwenden, hat JMP Probleme mit der Kommunikation, wenn die Version höher als 3.6 ist. |
| |
da ich für diese Demonstration 3.6.5 verwende. |
| |
Und schließlich können wir auch unsere eigene MATLAB-Sitzung erstellen. |
| |
Hier verwende ich MATLAB 2019b. Grundsätzlich sollte es aber problemlos funktionieren, solange Ihre MATLAB-Version nicht älter als sieben oder acht Jahre ist. |
| |
Okay, wie verknüpfen wir alles miteinander? Wir werden uns hier einen vierstufigen Prozess ansehen. Zunächst wollen wir jedes Modell anpassen. Dazu senden wir jeder Software die Daten und geben an, zu welchem Datensatz jede Beobachtung gehört. |
| |
Sobald die Modelle angepasst sind, möchten wir diese Anpassungen und ihre Vorhersagen ausgeben und sie einer Datentabelle hinzufügen, die JMP anzeigen kann. |
| |
Meine Warnung lautet daher: Benennen Sie unbedingt Dinge, die verdeutlichen, wo und wie Sie das Modell angepasst haben. Ich werde gleich Beispiele für beides geben. |
| |
Schritt drei hängt also vom Modell ab. Vielleicht möchten Sie sich auch einige Modelldiagnosen ansehen. Nur weil ein Modell passt... aufgrund der Zahlen gut zu passen scheint, kann ein Blick auf das Residuendiagramm beispielsweise sehr schnell zeigen, dass |
| |
Der Bereich von größtem Interesse passt nicht sehr gut. |
| |
Oder es stimmt etwas nicht mit den Residuen usw. Wir zeigen Ihnen auch, wie Sie derartige Dinge ausgeben. |
| |
Und schließlich verwenden wir die Modellvergleichsplattform, um alles in einer großen Tabelle zusammenzufassen und die Zahlen viel einfacher zu vergleichen, als wenn wir hin und her und her und her blättern müssten. |
| |
Okay, wir werden die Schritte jetzt etwas detaillierter aufschlüsseln. Für den ersten Schritt, die Modellanpassung, haben wir grundsätzlich zwei Möglichkeiten. Zunächst können wir JMP über JSL anweisen, die Software Ihrer Wahl aufzurufen. |
| |
Senden Sie ihm die Daten und den passenden Code. Und genau das werde ich jetzt für einen Moment tun. |
| |
Sie sehen hier also, dass ich Code zum tatsächlichen Aufrufen von R habe. |
| |
Sobald es fertig ist, rufe ich Python auf, und sobald es fertig ist, rufe ich MATLAB auf und verbinde alles miteinander. Ich werde gleich mehr zum Code sagen, aber die Ausführung dauert wahrscheinlich drei bis vier Minuten. Also mache ich das jetzt. |
| |
Und wir werden zu ihm zurückkommen, wenn wir bereit sind. |
| |
Unsere andere Möglichkeit ist, einen Datensatz mit der Validierung zu erstellen. Wir erstellen einen Datensatz mit der Validierungsspalte und/oder einer Testspalte, je nachdem, wie viele |
| |
Unsere Daten wurden in Sets aufgeteilt. Wir sind so geplant, dass wir die Software verwenden, die wir benötigen, und natürlich auch die Ausgabe, die wir benötigen. |
| |
Daher natürlich ein paar Warnungen. Stellen Sie sicher, dass die von Ihnen verwendete Software tatsächlich über das verfügt, was Sie zum Anpassen des Modells benötigen. |
| |
Stellen Sie sicher, dass die Anpassung des Modells abgeschlossen ist, bevor Sie versuchen, es mit anderen Dingen zu vergleichen. |
| |
Stellen Sie sicher, dass das Ausgabeformat von JMP gelesen werden kann. Glücklicherweise kann JMP einiges lesen, sodass dies nicht die größte der vier Warnungen ist. |
| |
Aber wie ich Sie bereits gewarnt habe, stellen Sie sicher, dass die Vorhersagen jedes Modells den richtigen Beobachtungen aus dem ursprünglichen Datensatz entsprechen. |
| |
Und damit kommen wir zurück zu der Frage, ob es sich um Training handelt, ob es sich um eine Trainingsbeobachtung handelt und ob Sie sie in JMP einpassen, |
| |
Es ist besser, eine Übungsbeobachtung zu machen, wenn Sie sie in die verwendete Software integrieren. Wenn es sich um eine Validierung in JMP handelt, wird es auch anderswo validiert. Wenn es sich um einen Test in JMP handelt, wird es auch anderswo getestet. |
| |
Stellen Sie also sicher, dass alles korrekt übereinstimmt, denn das Letzte, was wir herausfinden wollen, ist, Testdaten zu betrachten und zu sagen: „Oh, das hier passt viel besser.“ Nun, das liegt daran, dass die Beobachtungen anders gewichtet waren und keine echten Ausreißer aufwiesen. Das verzerrt letztendlich Ihr Denken. Also |
| |
ein Wort der Vorsicht, entschuldigen Sie, ein Wort der Vorsicht hier. |
| |
Okay. Wie bereits erwähnt, läuft derzeit ein Beispiel im Hintergrund. Daher möchte ich ein paar Details dazu geben. |
| |
Ich werde neuronale Netzwerke in R, Python und MATLAB integrieren. Dazu muss ich in R zwei Pakete zusätzlich zu meiner Basisinstallation installieren: das Keras-Paket und das Tensorflow-Paket. |
| |
Numpy, Pandas und Matplotlib. |
| |
Mit Numpy lassen sich einige Berechnungen ganz einfach durchführen; Pandas, Pandas, um Daten zu manipulieren; und mit Matplotlib lassen sich Diagramme recht einfach erstellen. In MATLAB nutze ich die Deep-Learning-Toolbox, unabhängig davon, ob Sie Zugriff darauf haben oder nicht. |
| |
Okay. Im zweiten Schritt fügen wir der JMP-Datentabelle Vorhersagen hinzu. Wenn Sie die Software über JMP aufrufen, können Sie diese Vorhersagen mit JSL-Code abrufen und in eine Datentabelle einfügen, um sie später vergleichen zu können. |
| |
Sie können es auch auf eine andere Weise tun, nämlich, dass die Software selbstständig ausgeführt wird und die Ausgabe speichert. Sie können JMP schnell sagen, dass es die Ausgabedatei abrufen und dann einige Manipulationen vornehmen soll, um die Vorhersagen in die Datentabelle zu übertragen, in der Sie Ihre Ergebnisse speichern. |
| |
Jetzt können wir auch die Diagnosediagramme lesen. In diesem Fall speichere ich die Diagnosediagramme normalerweise als Grafikdateien. Ich verwende PNG-Dateien. Aber natürlich |
| |
Grafiken, die Sie verwenden können. Nun kann JMP nicht alle möglichen Grafiken abbilden, aber ich glaube, PNG kann JPGs und einige andere abbilden und die … die decken die üblichen ab. |
| |
Zweitens: Ich verwende dies für die Modellvergleichsplattform, aber um zu ermitteln, welches Modell zu Ihnen passt und wo es passt. |
| |
Ich empfehle grundsätzlich, für jede hinzugefügte Vorhersagespalte die folgende Eigenschaft hinzuzufügen. Hier sehen wir, dass wir die betreffende Datentabelle senden, und zwar die Eigenschaft „Vorhersage“. |
| |
Und hier haben wir nun das, was auch immer Sie verwenden, um Dinge vorherzusagen (hier ist der Wert wahrscheinlich nicht die beste Wahl), aber |
| |
Mit diesem Creator erfahre ich, welche Software ich für die Erstellung dieses Modells verwendet habe. Hier habe ich R verwendet. R wird angezeigt, sodass es auf den Bildschirm passt. Python und MATLAB waren etwas zu lang, aber wir können hier jeden beliebigen String einfügen. |
| |
Sie werden diese sehen, wenn ich den Code hier in Kürze etwas ausführlicher durchgehe. |
| |
Das ist praktisch, weil ich später auch mehrere Modelle in R integrieren werde. Wenn ich die Spaltennamen richtig wähle und dort, wo R sie erstellt hat, mehrere habe, weiß ich immer noch, welches Modell ich mir gerade ansehe. |
| |
Okay, so sieht also das typische Dialogfeld zum Modellvergleich aus. |
| |
Ich möchte Folgendes anmerken: So würde es ungefähr aussehen, wenn ich am Ende der Modellanpassung per Point-and-Click-Methode vorgehen würde. Sie sehen also, dass ich mehrere Prädiktoren habe. Ich verwende neuronale Netze für MATLAB, Python und R. |
| |
Verschiedene Vorhersageformen; ich habe JMP verwendet, um ein paar Dinge anzupassen. |
| |
Häufig wird diese Validierungsspalte als Gruppe zusammengefasst, |
| |
Damit werden Training, Validierung und Test gruppiert. Mir gefällt die Ausgabe tatsächlich besser, wenn ich sie hier in die By-Anweisung einfüge. Ich werde das später hier zeigen. Sie können es aber entweder oder |
| |
aber kurz gesagt gefällt mir das Ergebnis auf diese Weise besser. |
| |
Das ist der Hauptgrund, warum ich jetzt klar erkennen kann, dass es sich um das gesamte Training handelt, |
| |
das sind alles Validierungen (sollte man an den Headern nicht erkennen) und das sind alles Tests. |
| |
Wenn Sie die Validierung als Gruppenvariable verwenden, erhalten Sie eine große Tabelle mit 21 Einträgen. Es gibt eine zusätzliche Spalte. Dort steht „Trainingsvalidierungstest“ oder in meinem Fall „012“. |
| |
So muss ich mit den Wörtern nicht so lange nachdenken. Ich muss niemandem erklären, was 012 bedeutet und so weiter. Deshalb habe ich diese Entscheidung getroffen. |
| |
Okay, in meinem Beispiel verwende ich den klassischen Bostoner Wohnungsdatensatz. Dieser ist in JMP enthalten. Deshalb habe ich ihn nicht als Datei in meine Präsentation aufgenommen, denn wer JMP hat, hat ihn bereits. |
| |
Harrison und Rubinfeld hatten also mehrere Prädiktoren für den Medianwert des Hauses, wie etwa die Kriminalitätsrate pro Kopf, den Anteil der nicht für den Einzelhandel genutzten Gewerbeflächen pro Stadt, |
| |
durchschnittliche Anzahl der Zimmer in dem, was Sie kaufen möchten, Schüler-Lehrer-Verhältnis nach Stadt (wenn es also viele Lehrer und nicht ganz so viele Studenten gibt, bedeutet das im Allgemeinen eine bessere Ausbildung, was viele Leute |
| |
gefunden) und einige andere. Ich werde hier nicht versuchen, alle 13 durchzugehen. |
| |
Okay, lassen Sie mich kurz die Hintergründe zu den Modellen erläutern, die ich hier betrachtet habe. Anschließend gehe ich näher auf den JSL-Code ein und erkläre, wie ich alles angepasst habe. |
| |
Einige der Modelle, die ich mir angesehen habe. Zunächst das typische lineare Regressionsmodell. Hier sehen Sie eine einfache lineare Regression. Ich habe den Medianwert, wie es scheint, an den Steuersatz angepasst. |
| |
Aber natürlich werde ich eine multiple lineare Regression verwenden und sie alle nutzen. |
| |
Also, |
| |
Da ich jedoch 13 verschiedene Prädiktoren hatte und wusste, dass einige von ihnen möglicherweise miteinander korrelieren, kam ich zu dem Schluss, dass es sich vielleicht lohnen würde, ein paar andere Regressionsarten näher zu betrachten. |
| |
Eine davon ist die sogenannte Brückenregression. Im Grunde handelt es sich dabei um eine lineare Regression mit einer zusätzlichen Einschränkung: |
| |
die quadrierten Werte meiner Parameter können nicht größer als eine Konstante sein. |
| |
Ich kann … es stellt sich heraus, dass ich dies tatsächlich als Optimierungsproblem umschreiben kann, bei dem ein bestimmter Lambda-Wert einem bestimmten C-Wert entspricht. |
| |
Und deshalb versuche ich, dies mit diesem zusätzlichen Strafterm zu minimieren, im Gegensatz zu den typischen kleinsten Quadraten, die Sie gewohnt sind. |
| |
Dies nennt man Schrumpfungsmethode, denn je kleiner ich es mache, desto näher kommen alle Werte gegen Null. Daher muss man sich überlegen, wie restriktiv ich es gestalten möchte. |
| |
Durch die Schrumpfung werden alle Terme langsam gegen Null gedrückt. Mit einer anderen Art von Strafterm kann ich einige Terme sogar ganz eliminieren. |
| |
Und ich kann etwas namens Lasso verwenden. Die Einschränkung hier ist, okay, statt der quadrierten Parameterschätzungen nehme ich einfach die Summe der Absolutwerte dieser Parameterschätzungen. |
| |
Und so stellt sich heraus, dass, was tatsächlich passieren wird, ist, dass die Parameterschätzungen derjenigen, die sehr schwach sind, auf Null gesetzt werden, was sozusagen als |
| |
Eliminierung, wenn Sie so wollen, unwichtiger Begriffe. |
| |
Um ein wenig zu veranschaulichen, was Lasso- und Ridge-Regression bewirken: Bei der Ridge-Regression stellt der Kreis hier den Strafterm dar. |
| |
Und hier betrachten wir den Parameterraum. Die wahren Kleinstquadrate-Schätzungen lägen hier. Wir kommen also nicht ganz dorthin, weil wir diese zusätzliche Einschränkung haben. |
| |
Am Ende finden wir heraus, wo...wo wir den Mindestwert erhalten, der den Kreis berührt. Und das wären unsere Schätzungen der Ridge-Regressionsparameter. |
| |
Für Lasso, ähnliche Zeichnung, aber Sie können jetzt mit dem absoluten Wert sehen, dass es eher eine Raute als ein Kreis ist. Beachten Sie, dass es sich hier um zwei Dimensionen handelt. Wir werden uns natürlich mit Hyperkugeln und all diesen Formen befassen. |
| |
Aber Sie können hier sehen, dass es genau die Spitze des Diamanten berührt. In diesem Fall ist Beta 1 also tatsächlich Null. So werden Terme eliminiert. |
| |
Okay, wir werden uns auch einen sogenannten Regressionsbaum ansehen. JMP nutzt hierfür die Partitionsplattformen. Um eine kurze Demonstration zu geben: Ich habe alle meine Daten. |
| |
Meine erste Frage ist also: Wie viele Zimmer hat die Wohnung? Ich weiß, dass ich nicht 0,943 Zimmer haben kann. Also im Grunde: |
| |
Ich habe sechs Zimmer oder weniger. Gehen wir also diesen Teil des Baums herunter, lassen wir diesen Teil des Baums weg. Wenn ich nun sieben Zimmer oder mehr habe, weiß ich sofort, dass ich meinen Median vorhersagen werde. |
| |
Der Wert beträgt 37. Bedenken Sie, dass es sich um Zehntausende von Dollar handelt, also machen Sie daraus 370.000 Dollar. |
| |
Wenn es weniger als sieben ist, dann lautet meine nächste Frage: Wie groß ist lstat? |
| |
Wenn es also größer oder gleich 14,43 ist, schaue ich mir diesen Knoten an und plötzlich beträgt meine mittlere Wohnkostenschätzung etwa 150.000, und wenn ich hierher komme, werden es etwa 233.000 sein. |
| |
Was Regressionsbäume also tatsächlich tun, ist, Ihren Eingaberaum in verschiedene Bereiche aufzuteilen. Und wir geben für jeden Wert innerhalb dieses Bereichs die gleiche Vorhersage. |
| |
Sie können hier also sehen, dass ich aufgeteilt habe. In diesem Fall nehme ich jetzt eine zweidimensionale Darstellung, weil sie einfacher zu zeichnen ist … |
| |
und so können Sie diesen Baum hier sehen, in dem ich zuerst x1 betrachte. Betrachten Sie nun x2 hier und stellen Sie eine weitere Frage zu x1 und eine weitere Frage zu x2, und so partitioniere ich schließlich den Eingaberaum. |
| |
Jeder dieser fünf Punkte hat einen Vorhersagewert. Und so sieht das Ganze im Wesentlichen aus. Ich betrachte das von oben. Ich werde genau das bekommen. Aber Sie können hier sehen, dass die |
| |
Die Vorhersage ist etwas anders, je nachdem, welcher der fünf Bereiche richtig ist. |
| |
Ich werde jetzt nicht zu sehr ins Detail gehen, wie man so etwas genau anbringt, aber |
| |
James, Witten, Tibshirani und Friedman geben ein wenig dazu; Leo ??? hat das grundlegende Buch darüber geschrieben, also können Sie dort einen Blick darauf werfen. |
| |
Als nächstes komme ich zu neuronalen Netzwerken, die heutzutage häufig im maschinellen Lernen und anderen Bereichen eingesetzt werden. Dies gibt eine visuelle Darstellung eines neuronalen Netzwerks. Hier werden nur fünf und die 13 Eingaben verwendet, um sie zu übergeben. |
| |
zu diesen ... dieser verborgenen Schicht. Und jede davon wird über eine Aktivierungsfunktion transformiert. |
| |
Und für jede dieser Aktivierungsfunktionen erhalten Sie eine Ausgabe und wir verwenden ... |
| |
Oftmals verwenden wir einfach eine lineare Regression dieser Ausgaben, um den Medianwert vorherzusagen. |
| |
Okay, also |
| |
Tatsächlich handelt es sich bei neuronalen Netzwerken letzten Endes um nichtlineare Modelle. Und sie werden deshalb neuronale Netzwerke genannt, weil die Darstellung im Allgemeinen unserer Vorstellung von der Funktionsweise von Neuronen im menschlichen Gehirn entspricht. |
| |
Jeder Input kann also an Knoten in einer verborgenen Schicht weitergeleitet werden. Dort werden Ihre Inputs durch eine Aktivierungsfunktion geleitet und ein Output berechnet. Jeder Output kann an einen Knoten in einer anderen verborgenen Schicht weitergeleitet oder als Output des Netzwerks verwendet werden. |
| |
Derzeit sind in JMP nur zwei ausgeblendete Ebenen zulässig. |
| |
Ehrlich gesagt, was die Erstellung eines neuronalen Netzwerks betrifft, gibt es nichts, was dagegen spricht, 20 für all das zu haben |
| |
Wir sind jetzt besorgt. Ehrlich gesagt gibt es eine statistische Theorie, die besagt, dass wir jede kontinuierliche Funktion approximieren können, |
| |
unter bestimmten Randbedingungen und mit zwei verborgenen Ebenen. Das ist wahrscheinlich der Grund, warum JMP diese Entscheidung getroffen hat. |
| |
lineare, hyperbolische Tangente und Gaußsche Radialbasis. Tatsächlich |
| |
Beachten Sie hier an diesen Knoten die kleine Kurve. Ich glaube, das ist für die hyperbolische Tangensfunktion; linear ist eine gerade Linie nach oben; und die Gaußsche Radialbasis sieht meiner Meinung nach eher wie eine Normalkurve aus. |
| |
Das ist die Plattform für neuronale Netzwerke. Als letztes betrachten wir die sogenannte Projektionsverfolgungsregression. Ich wollte etwas zeigen, was JMP einfach nicht kann, und hier nur ein Beispiel geben. |
| |
Ähm, die Projektionsverfolgungsregression war ein Modell, das ursprünglich von Jerome Friedman und Steutzle in Stanford vorgeschlagen wurde. Ihr Modell verwendet Vorhersagen der Form y gleich der Summe von Beta i, f sub i und einer linearen Transformation Ihrer Eingaben. |
| |
Das ist also in gewisser Weise analog zu einem neuronalen Netzwerk. Sie haben hier eine versteckte Schicht mit k Knoten und jeweils einer Aktivierungsfunktion fi |
| |
L. Es stellt sich heraus, dass wir mit der Projektionsverfolgungsregression diese f sub i tatsächlich auch schätzen werden. |
| |
Im Allgemeinen handelt es sich um eine Art Glättung oder eine Spline-Anpassung. Typischerweise werden die f-Sub-i als Ridge-Funktionen bezeichnet. Wir haben Alphas, Betas und Fs, die wir optimieren müssen. Daher erfolgt im Allgemeinen eine stufenweise Anpassung. Ich werde an dieser Stelle nicht zu sehr ins Detail gehen. |
| |
Okay, ich habe also alle meine Modelle durchgesehen. |
| |
Ich zeige Ihnen jetzt die Ergebnisse und hoffe, dass alles gut aussieht. Bevor ich mich mit JMP befasse, möchte ich Folgendes anmerken: |
| |
Es ist wirklich schwierig, Seeds für neuronale Netzwerke in R und Python für Keras zu setzen. Beachten Sie daher, dass Sie, wenn Sie meinen Code ausführen, wahrscheinlich nicht genau das erhalten, was ich erhalten habe, aber es sollte ziemlich nah dran sein. Vor diesem Hintergrund: |
| |
Mal sehen, was wir hier bekommen haben. Das war also die Ausgabe, die ich erhalten habe. Leider scheint es nicht perfekt gelaufen zu sein. |
| |
Also, |
| Lucas |
Was habe ich hier? Ich habe also mein Training, meine Validierung und meinen Test. Und so sehen wir sehr schnell, dass eines dieser Modelle nicht besonders gut passte. Mit dem neuronalen Netz in R ist leider etwas Schreckliches passiert. |
| |
Es muss eine ungünstige Stelle im Eingabebereich erwischt haben und so weiter. Und deshalb hat es einfach nicht zu einem sehr guten Modell gepasst. |
| |
Daher sind die Ausgangsparameter bei nichtlinearen Modellen leider wichtig; in manchen Fällen werden wir von ihnen enttäuscht. |
| |
Aber wenn wir uns alles andere ansehen, scheint alles andere recht gut zu passen. Was recht gut ist, darüber können wir streiten, aber ich sehe R-Quadrate, eins über 0,5. Ich sehe Wurzelmittelwert |
| |
Die quadrierten Fehler liegen hier bei etwa fünf, und selbst unsere durchschnittlichen absoluten Fehler liegen im Bereich von drei. Was das Training angeht, scheinen Projektionsverfolgungsregressionen am besten abgeschnitten zu haben. |
| |
Wenn ich zum Validierungsdatensatz komme, sieht es immer noch so aus wie R |
| |
Die Projektionsverfolgung schnitt am besten ab. Betrachtet man jedoch den Testdatensatz, stellt man plötzlich fest: Nein, die Projektionsverfolgungsregression war die zweitschlechteste Methode, vorausgesetzt, wir ignorieren das neuronale Netz von R. |
| |
In einem solchen Rahmen schauen wir uns häufig den Testdatensatz am genauesten an, da dieser in keiner Weise zur Bestimmung der Modellanpassung verwendet wurde. |
| |
Und wir sehen, dass es auf dieser Grundlage so aussieht, |
| |
die Ridge-Regression von JMP passt am besten. |
| |
Wir können hier oben sehen, dass das R-Quadrat hier 0,71 war, vorher war es etwa 0,73 und hier etwa 0,73, also können wir sehen, dass es konsistent passt |
| |
Dasselbe gilt für alle drei Datensätze. Wenn ich also gezwungen wäre, eine Entscheidung zu treffen, nur basierend auf dem, was ich im Moment sehe, würde ich wahrscheinlich wählen: |
| |
die Ridge-Regression. Wir haben hier also eine ganze Reihe von Diagnosefunktionen und so weiter. Wenn ich mir also anschauen möchte, was mit dem neuronalen Netzwerk von R passiert ist, |
| |
Ich sehe sofort, dass schon nach wenigen Schritten etwas passiert ist. Wie Sie sehen, passt es überhaupt nicht, da die Vorhersagen für fast alles bei 220 oder einigen Tausend liegen. |
| |
Wir wissen also, dass bei der Montage etwas schief gelaufen ist. |
| |
Wir haben also gesehen, dass die Ridge-Regression die beste Lösung ist. Schauen wir uns also an, was sie ausgibt. Ich zeige gleich meinen JSL-Code, der |
| |
zeigt, wie ich das alles gemacht habe. Hier sehen wir die Parameterschätzungen aus der Ridge-Regression. Wir können die Ridge-Diagnosediagramme sehen, also sind die Werte im Vergleich zu den ursprünglichen Schätzungen nicht allzu sehr geschrumpft. |
| |
Sie können dies anhand von Validierungstests mit Protokollen wie „hat nicht funktioniert“ und so weiter erkennen. |
| |
Und hier rechts haben wir unsere im Wesentlichen residuellen Diagramme. Diese sind tatsächliche und vorhergesagte. |
| |
Wie Sie aus dem Training erkennen können, gab es einige recht teure, nicht gut vorhergesagte Ergebnisse. Wir sehen hier weniger als im Testset, es sieht nicht so aus, als hätten wir allzu große Probleme gehabt. Wir haben hier ein paar Punkte, die etwas ungewöhnlich sind, aber wir sehen im Allgemeinen |
| |
Wenn wir uns mit günstigeren Häusern befassen, passt es ziemlich gut zu allen drei Datensätzen. Auch hier sollten wir uns fragen, was hier passiert ist, aber |
| |
im Moment scheint dies das Beste von allen zu sein. So können wir es von anderen abschauen. |
| |
Siehe hier. Wir werden uns also kurz MATLAB ansehen. |
| |
Sie können hier auch die Validierung des Trainingstests sehen. Hier geben wir also etwas aus ... MATLAB gibt eine Diagnose aus, und Sie können sehen, dass es einige Epochen gedauert hat, bis es fertig war. |
| |
Aber glücklicherweise läuft MATLAB, wie wir feststellen können, ziemlich schnell. |
| |
Und dann das tatsächliche, hier vorhergesagte. |
| |
Wir können das alles sehen. |
| |
Okay, ich werde mir jetzt ein paar Minuten Zeit nehmen, um mir den Code anzusehen. |
| |
Daher hier ein paar Hinweise: Stellen Sie sicher, dass alles installiert ist, damit Sie das alles tatsächlich ausführen können, denn wenn nicht, wird JMP einfach kläglich scheitern, keine Vorhersagen ausspucken und dann wird es fehlschlagen, weil es die Vorhersagen nicht finden kann. |
| |
JMP bietet die Möglichkeit, eine Validierungsspalte mit Code zu erstellen. Ich habe das gemacht und 60 20 20 gewählt. Ich habe diesen Zufallswert gewählt, damit Sie dieselben Trainings- und Validierungstestsätze verwenden können wie ich. |
| |
Im Moment speichere ich also Training, Validierung und Test. Ich werde diese Spalte jetzt für eine Weile löschen. |
| |
Der Grund, warum ich das hier mache, ist, dass ich den Datensatz an R, Python und MATLAB sende und das Codieren einfacher ist, wenn alles darin entweder die Ausgabe oder alle Eingaben sind. |
| |
Ich wollte keine Validierungsspalte, die nicht dasselbe ist, und das wird dann etwas schwieriger. Letztendlich habe ich den Datensatz gesendet. |
| |
Ich schicke ihm die Zeilen für Training, Validierung und Test und rufe dann den R-Code auf, um ihn auszuführen. Jetzt können Sie tatsächlich |
| |
Füge den eigentlichen R-Code hier ein. Ich habe mich für eine Zeile entschieden, damit ich nicht ewig scrollen muss. Aber nichts hindert dich daran. Wenn es nur ein paar Zeilen Code sind, wie du sie zuvor in der Präsentation gesehen hast, würde ich ihn einfach hier einfügen. |
| |
Wenn es also einmal fertig ist, stellt sich heraus, dass dieser Code ausspuckt |
| |
ein Bild der Diagnose. Wir haben gesehen, dass es nach sechs oder sieben Iterationen gestoppt wurde. Sagen wir mal, das ist raus. |
| |
Und auch die Ridge-Regression in diesem Skript passt dazu, sodass wir zwei Bilder erhalten. Also spucke ich auch dieses aus und speichere es und zeichne den Rahmen. Nun werden diese am Ende des Codes zusammengefügt. |
| |
Und dann erhalte ich die Ausgabe und werde sie in Kürze hier zur Datentabelle hinzufügen. |
| |
Okay, ich gebe hier ein bisschen Code ein. Angenommen, Sie haben 6 Millionen Beobachtungen und es dauert 24 Stunden, bis das Modell tatsächlich angepasst ist. Dann werden Sie es wahrscheinlich nicht in JMP ausführen wollen. |
| |
Als kleinen Code, den Sie von hier aus ausführen könnten, können Sie sagen: „Hey, ich bin |
| |
Okay, ich öffne einfach die Datentabelle, die mich interessiert. Ich sage R, dass es die Tabelle in der Zwischenzeit woanders ausführen soll. Sobald mein System grünes Licht gibt, dass es fertig ist, kann ich sagen: „Okay, dann öffne die Ausgabe und füge sie in …“ |
| |
meine Datentabelle. So könntest du einiges davon umsetzen. Natürlich möchtest du die Bilddateien irgendwo speichern und diesen Code verwenden. Aber das hier ist genau derselbe Code. |
| |
Okay, für Python wird es sehr ähnlich sein. Ich werde ihm diese Dinge übergeben. Führe etwas Python-Code aus, gib das Diagnosediagramm und die Vorhersagen aus. |
| |
Und ich gebe etwas Python-Code. Wie Sie sehen, ist er dem von JMP sehr ähnlich. Ich öffne in diesem Fall einfach eine CSV-Datei. Kopiere die Spalte hinein und schließe sie, da ich sie nicht mehr benötige. |
| |
Und dann MATLAB, wieder genau das gleiche Spiel. Asset-Dinge, führe das MATLAB-Skript aus. Ich erhalte die PNG-Datei, die ich hier ausgegeben habe. Speichere sie dort, wo ich sie brauche, speichere die Vorhersagen. Und falls du sie brauchst, |
| |
anstatt es von hier aus auszuführen, erledigt dies ein kleiner Beispielcode. |
| |
OK, nachdem ich nun mit dem Aufrufen von R, Python und Matlab fertig bin, rufe ich meine Validierungsspalten zurück, damit JMP sie verwenden kann. Da ich mich also erinnere, welche welche ist. |
| |
JMP prüft standardmäßig die Werte in der Validierungsspalte, die wir verwenden. Der kleinste Wert steht für Training, der nächstgrößere für Validierung und der größte für Test. Wenn Sie nun eine K-fach-Kreuzvalidierung durchführen, wird angezeigt, um welche Faltung es sich handelt. Gehen Sie also durch 012345678 und so weiter. |
| |
Erstellen Sie dann Folgendes. Ich habe dann auch Folgendes hier erstellt, sodass in meiner Ausgabe anstelle von 012 Training, Validierung und Test angezeigt wird. Das macht es etwas übersichtlicher. |
| |
Ich verstehe. Wenn ich also jemandem zeige, der noch nie JMP verwendet hat, weiß er nicht, was 012 bedeutet. Er sollte aber wissen, was Training, Validierung und Test bedeuten. |
| |
OK, jetzt beginne ich mit dem Hinzufügen der Vorhersagen zu meiner Datentabelle. Ähm, hier ist also die Set-Eigenschaft, auf die ich zuvor in meinem Vortrag angespielt habe. |
| |
Mein Ersteller ist MATLAB. Ich habe den Spaltennamen angegeben, also weiß ich, dass es sich um die neuronale Netzvorhersage für MATLAB handelt. Ich brauche den Ersteller vielleicht nicht unbedingt, aber falls ich bei der Benennung etwas schlampig bin, |
| |
Das tut mir leid. |
| |
So können wir die gesamte Projektionsverfolgungsregression, neuronale Netze und so weiter erhalten. |
| |
Dann habe ich auch bemerkt, dass ich Ridge-Regression, Lasso und lineare Regression in JMP anpasse. |
| |
Also habe ich das alles hier gemacht. Hier erstelle ich also mein Anpassungsmodell, meine generalisierte Regression. Das alles habe ich rausgehauen. |
| |
Speichern Sie meine Vorhersageformeln. |
| |
Zeichnen Sie meine tatsächlichen Werte im Vergleich zu den Prognosen für meine vollständige Ausgabe am Ende auf. |
| |
Und ich passe mein neuronales Netzwerk an. Darf ich die Validierungsspalte nennen? Ich übertrage meine Kovariaten. Im Allgemeinen passen neuronale Netzwerke etwas besser, wenn wir die Werte um Null skalieren, anstatt auf den üblichen Ausgabewert. |
| |
Meine erste verborgene Schicht hat also drei Knoten. Meine zweite verborgene Schicht hat zwei Knoten. Hier sind beides lineare Aktivierungsfunktionen. Für die drei oben verwende ich die Aktivierungsfunktion für eingeschränkte lineare Einheiten, also etwas anders. |
| |
aber ich habe festgestellt, dass sie trotzdem ungefähr gleich gut zu passen scheinen. |
| |
5. Das bedeutet: Hey, ich werde fünf verschiedene Sätze von Startwerten ausprobieren und den behalten, der am besten funktioniert. |
| |
Wie Sie meinem Code entnehmen können, hätte ich das wahrscheinlich mit dem R machen sollen. Es hat eine Art Viererschleife durchlaufen, mehrere davon ausgeführt und diejenige ausgegeben, die am besten funktioniert. Für zukünftige Arbeiten wäre das also eine Möglichkeit, die ich nutzen würde. |
| |
Dann speichere ich das Zeug und bin jetzt bereit für den Modellvergleich. Jetzt bringe ich alle diese neuen Spalten in den Modellvergleich ein. |
| |
Scrollen Sie ein wenig weiter. Hier führe ich die Validierung durch, wie ich bereits angedeutet habe. |
| |
Und zum Schluss mache ich noch ein bisschen Code, damit es im Wesentlichen so aussieht, wie ich es haben möchte. |
| |
Ich erhalte also diese Gliederungsfelder, in denen nur Trainingsdiagnose, Validierungsdiagnose und Testdiagnose stehen, statt der üblichen Angaben von JMPs. |
| |
Ich werde diese Diagnosediagramme besorgen. |
| |
Jetzt sage ich hier nur, dass ich nur einen Teil der Ausgaben haben möchte, um einen Griff dazu zu bekommen. |
| |
Ich werde ganz schnell einige Residuendiagramme erstellen, da diese nicht von allen sofort ausgegeben werden, insbesondere nicht von denen aus MATLAB, Python und R. |
| |
Legen Sie diese Titel fest und dann erstelle ich hier einfach die große alte Tabelle oder den großen alten Dialog. |
| |
Und dann schreibe ich alles in mein Tagebuch. |
| |
Damit es schön sauber ist. Ich habe einiges erledigt, damit ich mir keine Sorgen mehr machen muss. Und was ich hier am Ende gemacht habe, ist, was ich wollte: Wenn ich eines davon öffne, |
| |
alles andere darunter ist sofort geöffnet und |
| |
auf sechs oder sieben verschiedene Dinge klicken zu müssen. Sie sehen, ich muss hier und hier klicken und |
| |
Hier sind noch drei. Ich schätze, noch eins. Entschuldigung. Aber so muss ich nichts anklicken, sie öffnen sich automatisch. |
| |
Das ist also die Funktion dieses letzten Code-Stücks. |
| |
Okay. |
| Lucas |
Es handelt sich also lediglich um eine andere Ausgabe und Live-Ausführung. Aber so könnte es auch aussehen. |
| |
Wie ich also erwähnt habe, haben Sie im Code dort etwas anderes gesehen, das ist, was wir gesehen haben. |
| |
Richard |
| Lucas |
Nein. Zusammenfassend lässt sich sagen, dass die Modellvergleichsplattform ein wirklich nützliches Tool ist, um die Vorhersagekraft mehrerer Modelle an einem Ort zu vergleichen. Sie müssen nicht zwischen verschiedenen Dingen hin- und herwechseln. Sie können alles direkt vor sich betrachten. |
| |
Die Flexibilität kann sogar genutzt werden, um Modelle anzupassen, die in JMP nicht angepasst wurden, oder um Modelle zu vergleichen, die in JMP nicht angepasst wurden. Und so |
| |
Wenn wir sehr große Modelle anpassen müssen, deren Anpassung viel Zeit in Anspruch nimmt, können wir ihnen damit den Befehl „Anpassen“ geben. Ziehen Sie alles in JMP und sehen Sie sich ganz einfach alle Ergebnisse an, um die nächsten Schritte zu bestimmen. |
| |
Und damit danke ich Ihnen für Ihre Zeit. |