Lautsprecher | Transkript |
| Lucas | Okay, vielen Dank an alle, die gekommen sind und sich meinen Vortrag angehört haben. Mein Name ist Lucas Beverlin. Ich bin Statistiker bei Intel. |
| Und heute werde ich über die Verwendung von JMP sprechen, um Modelle aus verschiedenen Umgebungen zu vergleichen. |
| Okay, derzeit ist JMP 15 Pro das Neueste und Beste, was JMP auf dem Markt hat. Wenn Sie das Modell anpassen möchten, stehen Ihnen dafür mehrere verschiedene Tools zur Verfügung. |
| Es gibt die Fit-Model-Plattform. Es gibt die neuronale Plattform auf der Partitionsplattform für neuronale Netze. Wenn Sie Klassifizierungs- und Regressionsbäume wünschen. Die nichtlineare Plattform für nichtlineare Modellierung und noch mehr. |
| Und so kam JMP 15, glaube ich, in 12 oder 13 heraus, aber diese Modellvergleichsplattform ist ein sehr praktisches Tool, das Sie zum Vergleichen verwenden können |
| Modell passt von verschiedenen Plattformen innerhalb von JMP. Wenn Sie also einen Baum und ein neuronales Netzwerk haben und nicht wirklich sicher sind, welches besser ist. Okay, Sie könnten zwischen den beiden hin und her wechseln. Aber jetzt mit diesem, |
| Sie haben alles auf dem gleichen Bildschirm. Es ist sehr schnell und einfach zu sagen, ob das besser ist als das usw. |
| Abgesehen davon passt JMP zu vielen Dingen, aber leider nicht zu allem. Geben Sie also einfach ein paar Ideen zu einigen Dingen, die nicht passen. Also zum Beispiel |
| Diejenigen, die viel maschinelles Lernen und KI betreiben, passen möglicherweise zu so etwas wie einem Auto-Encoder oder einem Faltungs-Neuronalen Netzwerk, das im Allgemeinen viele Aktivierungsfunktionen oder, ja, viele Knoten mit versteckten Schichten erfordert. |
| andere Aktivierungsfunktionen als die von JMP angebotenen, so dass JMP nicht in der Lage sein wird, einen Großteil davon innerhalb von JMP zu tun. |
| Eine andere Möglichkeit ist die so genannte Projektionsverfolgungsregression. Eine andere Methode heißt multivariate adaptive Regressionssplines. Es gibt also ein paar Dinge, die JMP leider nicht kann. |
| R, Python und MATLAB. |
| Es gibt noch einige mehr da draußen, |
| aber ich werde mich auf diese drei konzentrieren. Nachdem die Ideen, die ich hier besprechen werde, nun gesagt sind, möchten Sie sie in C++, Java, Rust oder eine andere Sprache integrieren |
| Mir fällt ein, Sie sollten in der Lage sein, viele davon zu verwenden. |
| Daher können wir die Modellvergleichsplattform, wie gesagt, auch für Vergleiche mit anderer Software nutzen. Was brauchen Sie also? |
| 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, Validierung und Test ist, denn Sie möchten, dass diese konsistent sind, wenn Sie die Anpassungen vergleichen. |
| OK, der Hauptgrund, warum ich mich für R, Python und MATLAB entschieden habe, um mich in diesem Vortrag zu konzentrieren, ist, dass sich herausstellt, dass JMP und die Skriptsprache tatsächlich ihre eigenen R-Sitzungen erstellen und Code daraus ausführen können. |
| Dieses Bild hier zeigt also sehr schnell, ob ich ein lineares Regressionsmodell an eine Ausgabe anpassen möchte |
| Zum Bostoner Wohnungsdatensatz. Ich werde später noch viel mehr mit diesem Datensatz arbeiten. |
| Wenn Sie jedoch ganz schnell ein lineares Regressionsmodell in R anpassen und die Vorhersagewerte ausspucken möchten, können Sie das tun. Natürlich können Sie das mit JMP machen. Aber nur um eine ganz einfache Idee zu vermitteln. |
| Also, |
| Eines ist zu beachten: Ich verwende R 3.6.3, aber JMP kann alles verarbeiten, solange es größer als 2.9 ist. |
| Und dann können Sie, ähnlich wie Python, Ihre eigene Python-Sitzung aufrufen. Das Bild hier zeigt also, dass ich die lineare Regression mit Python anpasse. Ich werde hier nicht alle Codezeilen durchgehen, aber Sie verstehen die Grundidee. |
| Nun muss man bei Python natürlich etwas vorsichtig sein, da die neueste Version von Python 3.8.5 ist. Wenn Sie jedoch Anaconda zum Installieren von Dingen verwenden, hat JMP Probleme, mit Anaconda zu kommunizieren, wenn es größer 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 also MATLAB 2019b. Aber grundsätzlich sollte Ihre MATLAB-Version einwandfrei funktionieren, solange sie in den letzten sieben oder acht Jahren herausgekommen ist. |
| Okay, wie verbinden wir also alles? Es handelt sich also eigentlich um eine Art vierstufigen Prozess, den wir uns hier ansehen werden. Zunächst möchten wir also jedes Modell anpassen. Deshalb senden wir jeder Software die Daten und den Satz, in dem sich jede Beobachtung befindet. |
| Sobald wir die Modelle angepasst haben, möchten wir diese Anpassungen und ihre Vorhersagen ausgeben und sie einer Datentabelle hinzufügen, die JMP anzeigen kann. |
| Deshalb ist meine Warnung natürlich: Stellen Sie sicher, dass Sie Dinge benennen, aus denen Sie erkennen können, wo oder wie Sie das Modell eingebaut haben. Ich habe Beispiele für beides. |
| Also Schritt drei, je nach Modell möchten Sie vielleicht einen Blick auf einige Modelldiagnosen werfen. Nur weil ein Modell passt ... aufgrund der Zahlen gut zu passen scheint, werfen Sie zum Beispiel einen Blick auf Ihr Residualdiagramm, und Sie werden es vielleicht ganz schnell herausfinden |
| Der Bereich von größtem Interesse passt nicht sehr gut. |
| Oder es stimmt etwas mit den Residuen usw. nicht. Wir zeigen also, wie man solche Dinge auch ausgibt. |
| Und schließlich nutzen wir die Modellvergleichsplattform, um alles in einer großen Tabelle zusammenzuführen und die Zahlen zu vergleichen, was viel einfacher ist, als hin und her und vor und zurück zu blättern. |
| Okay, wir werden die Schritte jetzt etwas detaillierter aufschlüsseln. Für den ersten Schritt, bei dem wir die Modellanpassung durchführen, haben wir also im Wesentlichen 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 so werde ich tatsächlich für einen Moment davon absehen und genau das tun. |
| Wie Sie sehen, habe ich hier einen Code, um R tatsächlich aufzurufen. |
| Und wenn es fertig ist, rufe ich Python auf, und sobald es fertig ist, rufe ich MATLAB auf und verknüpfe dann alles miteinander. Jetzt werde ich hier gleich mehr über den Code sagen, aber die Ausführung wird wahrscheinlich drei oder vier Minuten dauern. Also werde ich das jetzt tun. |
| Und wir werden zu ihm zurückkommen, wenn wir dazu bereit sind. |
| Unsere andere Möglichkeit besteht also darin, einen Datensatz mit der Validierung zu erstellen. Nun, wir erstellen einen Datensatz mit der Validierungsspalte und/oder einer Testspalte, je nachdem, wie viele |
| Sätze teilten unsere Daten auf. Es ist geplant, dass wir auf jeder Software laufen, auf der wir laufen müssen, und natürlich die Ausgabe davon, was auch immer wir brauchen. |
| Daher natürlich ein paar Warnungen. Stellen Sie sicher, dass die von Ihnen verwendete Software tatsächlich über das verfügt, was Sie für die Anpassung an das Modell benötigen. |
| Stellen Sie sicher, dass das Modell vollständig angepasst ist, bevor Sie versuchen, es mit anderen Dingen zu vergleichen. |
| Stellen Sie sicher, dass das Ausgabeformat etwas ist, das JMP tatsächlich lesen kann. Zum Glück kann JMP einiges lesen, das ist also nicht die größte der vier Warnungen. |
| Aber wie ich Sie bereits zuvor gewarnt habe, stellen Sie sicher, dass die Vorhersagen jedes Modells mit den korrekten Beobachtungen aus dem Originaldatensatz übereinstimmen. |
| Und das kommt darauf zurück, ob es sich um Training handelt, ob es sich um eine Trainingsbeobachtung handelt, wenn Sie es in JMP einpassen, |
| Es ist besser, eine Trainingsbeobachtung zu sein, wenn Sie sie in die verwendete Software integrieren. Wenn es sich um eine Validierung in JMP handelt, handelt es sich um eine Validierung an anderer Stelle. Es wird in JMP getestet, es wird anderswo getestet. |
| Stellen Sie also sicher, dass die Dinge richtig zusammenpassen, denn das Letzte, was wir herausfinden wollen, ist, sich die Testsätze anzusehen und zu sagen: „Oh, das passt viel besser.“ Das liegt daran, dass die hineinpassenden Beobachtungen unterschiedlich gewichtet waren und keine wirklichen Ausreißer aufwiesen. Das führt letztendlich dazu, dass Ihr Denken verzerrt wird. Also |
| Ein Wort der Vorsicht, entschuldigen Sie, ein Wort der Vorsicht. |
| Okay. Wie ich bereits angedeutet habe, habe ich ein Beispiel, das ich gerade im Hintergrund ausführe. Deshalb möchte ich ein wenig näher auf das eingehen, was ich tue. Also |
| Es stellt sich heraus, dass ich neuronale Netze in R, Python und MATLAB integrieren werde. Wenn ich das also tun möchte, muss ich in R zwei Pakete zusätzlich zu den Basisinstallationen in R installieren, und zwar das Keras-Paket und das Tensorflow-Paket. |
| Numpy, Pandas und Matplotlib. |
| So numpy, dass man einige Berechnungen ziemlich einfach durchführen kann; Pandas, Pandas, um Daten zu machen ... einige Datenmanipulationen; und matplotlib sollte ziemlich einfach sein, einige Plots zu erstellen. Und dann verwende ich in MATLAB die Deep-Learning-Toolbox, ob Sie darauf Zugriff haben, nicht. |
| Okay. Im zweiten Schritt möchten wir der JMP-Datentabelle Vorhersagen hinzufügen. Wenn Sie also JMP verwenden, um die Software aufzurufen, können Sie JSL-Code verwenden, um diese Vorhersagen abzurufen und sie einer Datentabelle hinzuzufügen, damit Sie sie später vergleichen können. |
| Die andere Möglichkeit besteht also darin, dass die Software selbstständig läuft und die Ausgabe speichert. Sie können JMP dann schnell mitteilen, dass die Ausgabedatei abgerufen werden soll, und dann einige Manipulationen vornehmen, um die Vorhersagen in die Datentabelle zu übertragen, die Sie haben Speicherung Ihrer Ergebnisse. |
| Jetzt können wir auch die Diagnosediagramme lesen. In diesem Fall werde ich im Allgemeinen diese Diagnosediagramme als Grafikdateien speichern. Bei mir handelt es sich also um PNG-Dateien. Aber natürlich, was auch immer |
| Grafiken, die Sie verwenden können. Jetzt kann JMP nicht jeden einzelnen unter der Sonne erreichen, aber ich glaube, dass PNG JPGs und einige abbildet und sie ... sie decken Ihre üblichen ab. |
| Die zweite Anmerkung: Ich verwende sie für die Modellvergleichsplattform, aber um herauszufinden, welches Modell Ihnen passt und wo Sie es anbringen, |
| Generell empfehle ich, für jede hinzugefügte Vorhersagespalte die folgende Eigenschaft hinzuzufügen. Und so sehen wir hier, dass wir die Datentabelle von Interesse senden, diese Eigenschaft, die als Vorhersage bezeichnet wird. |
| Und hier haben wir also das, was auch immer Sie verwenden, um Dinge vorherzusagen (der Wert ist hier wahrscheinlich nicht die beste Wahl), aber |
| Aber bei diesem Ersteller weiß ich, welche Software ich verwendet habe, um dieses Modell tatsächlich zu erstellen. Und hier habe ich R verwendet. Es zeigt R, also würde es tatsächlich auf den Bildschirm passen. Python und MATLAB waren etwas zu lang, aber wir können hier jede gewünschte Zeichenfolge einfügen. |
| Sie werden diese sehen, wenn ich den Code hier in Kürze etwas detaillierter durchgehe. |
| Das ist praktisch, da ich später auch mehrere Modelle in R integrieren werde. Wenn ich also die Spaltennamen richtig wähle und mehrere habe, in denen R sie erstellt hat, weiß ich immer noch, welches Modell ich tatsächlich betrachte. |
| Okay, so sieht das typische Modellvergleichsdialogfeld aus. |
| Eine Sache, die ich anmerken möchte, ist, dass es ungefähr so aussehen würde, wenn ich am Ende der gesamten Modellanpassung ein Point-and-Click-Verfahren durchführen würde. Sie sehen also, dass ich mehrere Prädiktoren habe. Ich habe also neuronale Netze für MATLAB, Python und R. |
| Verschiedene Vorhersageformen; Früher habe ich JMP verwendet, um ein paar Dinge unterzubringen. |
| Nun, oft tun die Leute diese Validierungsspalte als Gruppe, |
| sodass die Trainingsvalidierung und der Test gruppiert werden. Eigentlich gefällt mir die Ausgabe etwas besser, wenn ich sie hier in die By-Anweisung einfüge. Deshalb werde ich das etwas später hier zeigen. Aber man kann es entweder oder sagen |
| Aber mir gefällt die Ausgabe auf diese Weise besser, je länger und kürzer sie ist. |
| Das ist also der Hauptgrund, warum ich jetzt klar erkennen kann, dass es sich hier um alles Training handelt. |
| Dies ist alles die Validierung (sollte nicht an den Kopfzeilen zu sehen sein) und das ist alles der Test. |
| Wenn Sie die Validierung als Gruppenvariable verwenden, erhalten Sie eine große Tabelle mit 21 Einträgen darin. Jetzt wird es eine zusätzliche Spalte geben. Da steht „Training Validation Test“ oder in meinem Fall „012“. |
| Auf diese Weise muss ich bei den Worten nicht so lange nachdenken. Ich muss niemandem erklären, was 012 bedeutet usw. Deshalb habe ich die Entscheidung getroffen, die ich getroffen habe. |
| Okay, in dem Beispiel, das ich hier aufschlüsseln werde, werde ich den klassischen Bostoner Wohnungsdatensatz verwenden. Dies ist nun in JMP enthalten. Deshalb habe ich es nicht als Datei in meine Präsentation eingefügt, denn wenn Sie JMP haben, haben Sie es bereits. |
| Daher verfügten Harrison und Rubinfeld über mehrere Prädiktoren für den Durchschnittswert des Hauses, beispielsweise die Pro-Kopf-Kriminalitätsrate, den Anteil der Nicht-Einzelhandelsflächen pro Stadt, |
| durchschnittliche Anzahl von Zimmern in dem, was Sie kaufen möchten, Schüler-Lehrer-Verhältnis nach Stadt (wenn es also viele Lehrer und nicht ganz so viele Schüler gibt, bedeutet das im Allgemeinen, dass viele Menschen eine bessere Bildung wünschen). |
| gefunden) und mehrere andere. Ich werde hier nicht wirklich versuchen, alle 13 durchzugehen. |
| Okay, lassen Sie mich ein wenig Hintergrundinformationen zu den Modellen geben, die ich mir hier angesehen habe. Und dann werde ich mich mit dem JSL-Code befassen und wie ich alles passe. |
| Also einige der Modelle, die ich mir angeschaut habe. Zunächst einmal das typische lineare Regressionsmodell. Hier sehen Sie also nur eine einfache lineare Regression. Ich habe einfach den Medianwert an den Steuersatz angepasst. |
| Aber natürlich verwende ich eine multiple lineare Regression und verwende sie alle. |
| Also, |
| Aber mit 13 verschiedenen Prädiktoren und dem Wissen, dass einige davon möglicherweise miteinander korrelieren, kam ich zu dem Schluss, dass es vielleicht einen Blick wert wäre, ein paar andere Arten der Regression in Betracht zu ziehen. |
| Eine davon ist die sogenannte Brückenregression. Es handelt sich also eigentlich nur um eine lineare Regression mit im Wesentlichen einer zusätzlichen Einschränkung |
| Die quadrierten Werte meiner Parameter dürfen 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 Lambda-Wert einem C-Wert entspricht. |
| Und dann versuche ich, dies mit diesem zusätzlichen Strafterm zu minimieren, im Gegensatz zu den typischen kleinsten Quadraten, die Sie gewohnt sind. |
| Dies nennt man nun eine Schrumpfungsmethode, denn je kleiner ich das mache, desto mehr schiebt es alles immer näher an den Nullpunkt. Daher muss natürlich darüber nachgedacht werden, wie restriktiv ich es haben möchte. |
| Jetzt wird die Schrumpfung alle langsam in Richtung Null drücken. Aber mit einer anderen Art von Strafbegriff kann ich tatsächlich einige Begriffe ganz eliminieren. |
| Und ich kann etwas namens Lasso verwenden. Die Einschränkung hier ist also, dass ich anstelle der quadrierten Parameterschätzungen einfach die Summe der absoluten Werte dieser Parameterschätzungen nehmen werde. |
| Daraus ergibt sich, dass diejenigen, die sehr schwach sind, ihre Parameterschätzungen tatsächlich auf Null setzen, was gewissermaßen als Funktion dient |
| Eliminierung, wenn Sie so wollen, unwichtiger Begriffe. |
| Um einen kleinen Eindruck davon zu vermitteln, was Lasso- und Ridge-Regression bewirken. Für die Ridge-Regression stellt der Kreis hier also den Strafterm dar. |
| Und hier betrachten wir den Parameterraum. Die wahren Schätzungen der kleinsten Quadrate wären also hier. Wir kommen also noch nicht ganz ans Ziel, weil wir diese zusätzliche Einschränkung haben. |
| Am Ende finden wir also heraus, wo...woher wir im Grunde den minimalen Wert bekommen, der den Kreis berührt. Das wären also unsere Schätzungen der Ridge-Regressionsparameter. |
| Für Lasso, ähnliche Zeichnung, aber Sie können jetzt anhand des Absolutwerts erkennen, dass es sich hierbei eher um eine Raute als um einen Kreis handelt. Beachten Sie, dass dies zwei Dimensionen sind. Wir werden uns natürlich mit Hypersphären und all diesen Formen befassen. |
| Aber Sie können hier sehen, dass es genau die Spitze des Diamanten berührt. Und in diesem Fall ist Beta eins tatsächlich Null. Auf diese Weise werden Begriffe eliminiert. |
| Okay, eine weitere Sache, die wir uns ansehen werden, ist ein sogenannter Regressionsbaum. Jetzt verwendet JMP hierfür die Partitionsplattformen. Also nur um eine kurze Demonstration dessen zu geben, was das zeigt. Okay, ich habe alle meine Daten. |
| Meine erste Frage, die ich mir stellen werde, ist also, wie viele Zimmer es in der Wohnung gibt, und ich weiß, dass ich kein 0,943-Zoll-Zimmer haben kann, also im Grunde: |
| Ich habe sechs Zimmer oder weniger. Kommt also von diesem Teil des Baumes herunter, lasst uns nicht von diesem Teil des Baumes herunterkommen. Wenn ich nun sieben oder mehr Zimmer habe, sagt mir das sofort, dass ich meinen Median vorhersagen werde |
| Wert auf 37. Denken Sie daran, dass es sich um Zehntausende Dollar handelt, also machen Sie 370.000 Dollar. |
| Wenn es weniger als sieben ist, lautet die nächste Frage, die ich gestellt habe: 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 mein mittlerer Wohnwert etwa 150 Riesen, und wenn ich hierher komme, werden es etwa 233 Riesen sein. |
| Was Regressionsbäume also wirklich bewirken, ist, dass sie Ihren Eingaberaum in verschiedene Bereiche unterteilen. Und wir geben für jeden Wert in diesem Bereich die gleiche Vorhersage. |
| Wie Sie hier sehen können, habe ich eine Partitionierung vorgenommen ... In diesem Fall nehme ich eine zweidimensionale, weil sie einfacher zu zeichnen ist ... |
| und so können Sie diesen Baum hier sehen, wo ich x1 zum ersten Mal betrachte. Schauen Sie sich jetzt x2 an und stellen Sie eine weitere Frage zu x1 und stellen Sie eine weitere Frage zu x2. Auf diese Weise partitioniere ich am Ende den Eingaberaum. |
| Nun wird jeder dieser fünf einen Vorhersagewert haben. Und so sieht es im Wesentlichen aus. Ich schaue mir das von oben an. Ich werde genau das bekommen. Aber Sie können hier sehen, dass die |
| Die Vorhersage ist etwas unterschiedlich, je nachdem, welcher der fünf Bereiche richtig ist. |
| Jetzt werde ich nicht zu sehr auf die Details eingehen, wie genau eines davon angebracht wird, aber |
| James, Witten, Tibshirani und Friedman geben ein wenig nach; Löwe??? Ich habe das bahnbrechende Buch darüber geschrieben, sodass Sie dort einen Blick darauf werfen können. |
| Als nächstes komme ich zu neuronalen Netzen, die heutzutage häufig beim maschinellen Lernen und so weiter verwendet werden. Auf diese Weise erhalten Sie einen visuellen Eindruck davon, wie ein neuronales Netzwerk aussieht. Hier verwendet dieses Bild also nur fünf und die 13 Eingaben, wenn sie übergeben werden |
| zu diesen ... dieser verborgenen Schicht. Und jedes davon wird über eine Aktivierungsfunktion transformiert. |
| Und für jede dieser Aktivierungsfunktionen erhalten Sie eine Ausgabe und wir verwenden ... |
| Oft verwenden wir einfach eine lineare Regression dieser Ausgaben, um den Medianwert vorherzusagen. |
| Okay, also |
| Tatsächlich handelt es sich bei neuronalen Netzwerken letztendlich um nichtlineare Modelle, und tatsächlich werden sie neuronale Netzwerke genannt, weil die Darstellung im Allgemeinen so ist, wie wir Neuronen als im menschlichen Gehirn arbeitend betrachtet haben. |
| Somit kann jede Eingabe an Knoten in einer verborgenen Ebene weitergeleitet werden. Auf der verborgenen Schicht werden Ihre Eingaben durch eine Aktivierungsfunktion weitergeleitet und einige Ausgaben werden berechnet. Jede Ausgabe kann an einen Knoten in einer anderen verborgenen Schicht weitergeleitet werden oder eine Ausgabe des Netzwerks sein. |
| In JMP sind jetzt nur noch zwei ausgeblendete Ebenen zulässig. |
| Um ehrlich zu sein, was die Schaffung eines neuronalen Netzwerks angeht, gibt es nichts, was besagt, dass man dafür nicht 20 haben kann |
| wir machen uns jetzt Sorgen. Um ehrlich zu sein, gibt es eine statistische Theorie, die darauf hindeutet, dass wir jede kontinuierliche Funktion approximieren können. |
| unter Berücksichtigung einiger Randbedingungen mit zwei verborgenen Schichten. Das ist wahrscheinlich der Grund, warum JMP diese Entscheidung getroffen hat. |
| lineare, hyperbolische Tangente und Gaußsche Radialbasis. Also in der Tat, |
| Beachten Sie an diesen Knoten hier die kleine Kurve. Ich glaube, das gilt für die hyperbolische Tangensfunktion; linear ist eine gerade Linie, die nach oben führt; Ich glaube, dass die Gaußsche Radialbasis eher wie eine normale Kurve aussehen wird. |
| Das ist die neuronale Netzwerkplattform. Der letzte Aspekt, den wir uns ansehen werden, ist die so genannte Projektionsverfolgungsregression. Ich wollte etwas herausholen, was JMP einfach nicht kann, und hier einfach ein Beispiel geben. |
| Ähm, die Projektionsverfolgungsregression war also ein Modell, das ursprünglich von Jerome Friedman und Steutzle in Stanford vorgeschlagen wurde. Ihr Modell erfordert Vorhersagen ... macht Vorhersagen in der Form, dass y gleich der Summe von Beta i, f sub i und einer linearen Transformation Ihrer Eingaben ist. |
| Das ist also wirklich etwas Analoges zu einem neuronalen Netzwerk. Sie haben hier eine verborgene Ebene mit k Knoten und jeweils mit der Aktivierungsfunktion fi |
| L. Es stellt sich heraus, dass wir mit der Projektionsverfolgungsregression tatsächlich auch diese f sub i schätzen werden. |
| Im Allgemeinen werden sie etwas glatter sein oder eine Spline-Passform aufweisen. Typischerweise werden die f sub i als Ridge-Funktionen bezeichnet. Jetzt haben wir Alphas, wir haben Betas und wir haben Fs, die wir optimieren müssen. Im Allgemeinen erfolgt also eine stufenweise Anpassung. Ich werde an dieser Stelle nicht zu sehr auf die Details eingehen. |
| Okay, ich habe sozusagen alle meine Modelle durchgesehen. |
| Jetzt zeige ich einige Ergebnisse und hoffe, dass alles gut aussieht. Bevor ich mich mit JMP befasse, möchte ich Folgendes anmerken: |
| Es ist wirklich schwierig, den Grundstein für die neuronalen Netze in R, Python für Keras zu legen. Beachten Sie also, dass Sie, wenn Sie meinen Code nehmen und ihn ausführen, wahrscheinlich nicht genau das bekommen, was ich bekommen habe, aber es sollte ziemlich nah dran sein. Nachdem dies gesagt ist, |
| Mal sehen, was wir hier haben. Das war also die Ausgabe, die ich erhalten habe. Nun scheint leider nicht alles 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 so gut gepasst hat. Leider ist dem neuronalen Netz in R etwas Schreckliches passiert. |
| Es muss sich eine fehlerhafte Stelle im Eingabebereich als Ausgangspunkt erwischt haben und so weiter. Und so passte es einfach nicht zu einem sehr guten Modell. |
| Daher sind Startparameter bei nichtlinearen Modellen leider wichtig; in manchen Fällen werden wir von ihnen gebissen. |
| Aber wenn wir uns alles andere ansehen, scheint alles andere recht gut zu passen. Nun, das ist einigermaßen gut, darüber können wir streiten, aber ich sehe R-Quadrate, eins über 0,5. Ich sehe den Wurzeldurchschnitt |
| Die quadratischen Fehler liegen hier bei etwa fünf, und sogar unsere durchschnittlichen absoluten Fehler liegen im Bereich von drei. Was nun das Training betrifft, sieht es so aus, als ob Regressionen mit Projektionsverfolgung am besten abgeschnitten hätten. |
| Wenn ich zum Validierungsdatensatz komme, sieht er immer noch wie R aus |
| Die Projektionsverfolgung schnitt am besten ab. Aber wenn wir uns den Testdatensatz ansehen, war plötzlich die Projektionsverfolgungsregression an zweiter Stelle, vorausgesetzt, wir ignorieren das neuronale Netz von R, die zweitschlechteste. |
| In einem Framework wie diesem schauen wir uns oft den Testdatensatz am nächsten an, da er in keiner Weise, Form oder Gestalt zur Bestimmung der Modellanpassung verwendet wurde. |
| Und wir sehen auf dieser Grundlage: Es sieht so aus |
| Die Ridge-Regression von JMP passt am besten. |
| Wir können hier oben sehen, dass das R-Quadrat hier 0,71 betrug, bevor es etwa 0,73 war, und hier etwa 0,73, also können wir sehen, dass es durchweg passt |
| das Gleiche in allen drei Datensätzen. Wenn ich also gezwungen wäre, eine Entscheidung zu treffen, nur basierend auf dem, was ich im Moment sehe, würde ich wahrscheinlich mitmachen |
| die Ridge-Regression. Abgesehen davon haben wir hier unten eine ganze Reihe von Diagnosen und so weiter. Wenn ich mir also ansehen möchte, was mit diesem neuronalen Netzwerk von R passiert ist, |
| Ich kann sehr schnell erkennen, dass nur wenige Schritte dort etwas passiert ist. Wie Sie sehen können, ist die Anpassung sehr schlecht, da so ziemlich alles auf 220 bis 1000 prognostiziert wird. |
| Wir wissen also, dass bei der Montage etwas schief gelaufen ist. |
| Wir sahen also, dass die Kammregression die beste war. Werfen wir also einen Blick darauf, was es ausspuckt. Also werde ich gleich meinen JSL-Code ganz schnell zeigen |
| zeigt, wie ich das alles gemacht habe, aber wir können hier die Parameterschätzungen aus der Ridge-Regression sehen. Wir können die Diagnosediagramme des Bergkamms sehen, sodass die Werte gegenüber den ursprünglichen Schätzungen nicht allzu sehr geschrumpft sind. |
| Sie können anhand der Validierungstests mit dem Protokoll erkennen, dass dies nicht der Fall war. |
| Und hier rechts haben wir unsere im Wesentlichen verbleibenden Parzellen. Diese sind tatsächlich und vorhergesagt. |
| Wie Sie dem Training entnehmen können, schien es einige zu geben, die ziemlich teuer waren und nicht sehr gut vorhergesagt wurden. 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 seltsam sind, aber wir können es im Großen und Ganzen sehen |
| Wenn wir in preisgünstigeren Häusern wohnen, passt es ziemlich gut zu allen drei Datensätzen. Auch hier möchten wir uns vielleicht fragen, was dabei passiert ist, aber |
| Im Moment scheint dies das Beste von allen zu sein. So können wir von anderen sehen. |
| Siehe hier. Deshalb werfen wir einen kurzen Blick auf MATLAB. |
| Daher können Sie hier auch die Validierung von Trainingstests sehen. Hier spucken wir also etwas aus ... MATLAB spuckt etwas Diagnose aus, und Sie sehen, dass es ein paar Epochen gedauert hat, bis es so weit war. |
| Aber zum Glück läuft MATLAB ziemlich schnell, wie wir sehen können. |
| Und dann das hier vorhergesagte tatsächliche Ergebnis. |
| Wir können das alles sehen. |
| Okay, ich werde mir jetzt ein paar Minuten Zeit nehmen, um mir den Code anzusehen. |
| Also natürlich ein paar Anmerkungen: Stellen Sie sicher, dass die Dinge installiert sind, 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 scheitern, weil es die Vorhersagen nicht finden kann. |
| JMP hat also die Möglichkeit, eine Validierungsspalte mit Code zu erstellen. Also habe ich 60 20 20 gewählt. Ich habe diesen zufälligen Startwert hier ausgewählt, damit Sie dieselben Trainingsvalidierungstestsätze verwenden können wie ich. |
| Was ich also im Moment tatsächlich mache, ist, dass ich speichere, was Training, Validierung und Test sind. Ich werde diese Spalte tatsächlich 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 es einfacher ist zu programmieren, wenn alles darin entweder die Ausgabe oder alle Eingaben ist. |
| Ich wollte also keine Validierungsspalte, die das auch nicht ist, und dann wird es etwas schwieriger, das zu tun. Am Ende schickte ich ihm also den Datensatz, |
| Ich habe ihm die Trainings-, Validierungs- und Testzeilen gesendet und dann den R-Code aufgerufen, um ihn auszuführen. Jetzt können Sie es tatsächlich |
| Fügen Sie hier den eigentlichen R-Code selbst ein. Ich habe mich entschieden, hier nur eine Zeile zu schreiben, damit ich nicht ewig scrollen muss. Aber nichts hält dich davon ab. Wenn es sich nur um ein paar Zeilen Code handelt, wie Sie es zuvor in der Präsentation gesehen haben, würde ich ihn einfach hier einfügen. |
| Sobald es fertig ist, stellt sich heraus, dass dieser Code ausgespuckt wird |
| ein Bild der Diagnose. Wir haben gesehen, dass es nach sechs oder sieben Iterationen aufgehört hat. Lassen Sie uns sagen, ob das raus ist. |
| Und passt auch die Ridge-Regression in dieses Skript, sodass wir zwei Bilder erhalten. Also spucke ich das auch aus und speichere es und gliedere es in die Box. Diese werden nun alle am Ende des gesamten Codes zusammengestellt. |
| Und dann erhalte ich die Ausgabe und füge sie in Kürze hier zur Datentabelle hinzu. |
| Okay, also gebe ich hier ein wenig Code ein. Nehmen wir an, Sie haben 6 Millionen Beobachtungen und es wird 24 Stunden dauern, bis das Modell tatsächlich angepasst ist. Sie werden es wahrscheinlich nicht in JMP ausführen wollen. |
| Als kleinen Code, den Sie von hier aus erstellen könnten, können Sie sagen: „Hey, das bin ich.“ |
| Okay, ich öffne einfach die Datentabelle, die mir wichtig ist. Ich werde R sagen, dass er es in der Zwischenzeit woanders ausführen soll, und sobald mein System grünes Licht gibt, dass es fertig ist, kann ich sagen: „Okay, dann öffnen Sie die Ausgabe davon und bringen Sie es mit.“ es hinein |
| meine Datentabelle. Das wäre also eine Möglichkeit, einiges davon zu tun. Und natürlich möchten Sie diese Bilddatei irgendwo speichern und diesen Code auch verwenden. Aber das wird genau derselbe Code sein. |
| Okay, für Python wird es sehr ähnlich sein. Ich werde ihm diese Dinge weitergeben. Führen Sie etwas Python-Code aus, spucken Sie den Diagnoseplot und die Vorhersagen aus. |
| Und ich gebe etwas Python-Code, Sie sehen, er ist dem, was wir aus JMP gemacht haben, sehr, sehr ähnlich. In diesem Fall werde ich einfach eine CSV-Datei öffnen. Kopieren Sie die Spalte und schließen Sie sie, da ich sie nicht mehr benötige. |
| Und dann MATLAB noch einmal genau das gleiche Spiel. Asset-Dinge, führen Sie das MATLAB-Skript aus. Ich bekomme die PNG-Datei, die ich ausgespuckt habe, hier raus. Speichern Sie es, wo ich es brauche, speichern Sie die Vorhersagen. Und wenn Sie es brauchen |
| Anstatt es von hier aus auszuführen, genügt ein kleiner Beispielcode. |
| OK, jetzt, da ich mit dem Aufrufen von R, Python und Matlab fertig bin, bringe ich meine Validierungsspalten zurück, damit JMP sie verwenden kann. Da ich mich also daran erinnere, welches welches ist. |
| Daher prüft JMP standardmäßig die Werte in der Validierungsspalte, die wir verwenden werden. Der kleinste Wert ist Training, der nächstgrößere ist Validierung, der größte ist Test. Wenn Sie nun eine K-Fold-Kreuzvalidierung durchführen, wird angezeigt, um welche Falte es sich handelt. Also durch 012345678 gehen und so weiter. |
| Dann erstellen Sie dies. Ich habe dies dann auch hier erstellt, sodass in meiner Ausgabe anstelle von 012 tatsächlich Training, Validierung und Test steht, sodass es etwas klarer ist |
| verstehen. Wenn ich also jemand anderem zeige, der JMP noch nie zuvor ausgeführt hat, weiß er nicht, was 012 bedeutet, aber er sollte wissen, dass es sich um Schulung, Validierung und Test handelt. |
| OK, jetzt fange ich an, die Vorhersagen zu meiner Datentabelle hinzuzufügen. Ähm, hier ist also die Mengeneigenschaft, auf die ich vorhin in meinem Vortrag angespielt habe. |
| Also MATLAB meines Erstellers, ich habe den Spaltennamen angegeben, also weiß ich, dass es sich um die neuronale Netzvorhersage für MATLAB handelt. Ich brauche also nicht unbedingt den Ersteller, aber für den Fall, dass ich bei der Benennung der Dinge etwas schlampig bin |
| Das tut mir leid. |
| So können wir die gesamte Projektionsverfolgung, Regression, neuronale Netze und so weiter erhalten. |
| Dann habe ich auch bemerkt, dass ich Ridge-Regression, Lasso und lineare Regression in JMP einpasse. |
| Also habe ich das alles hier gemacht. Hier mache ich also mein Anpassungsmodell, meine generalisierte Regression. Spucken Sie das alles aus. |
| Speichern Sie meine Vorhersageformeln. |
| Zeichnen Sie meine tatsächliche Leistung durch die Prognose für meine volle Leistung am Ende auf. |
| Und ich werde mein neuronales Netzwerk anpassen. Darf ich die Validierungsspalte sagen? Ich übertrage meine Kovariaten, im Allgemeinen passen neuronale Netze etwas besser, wenn wir die Dinge um Null herum skalieren, im Gegensatz zu dem, was die Ausgabe normalerweise ist. |
| Meine erste verborgene Ebene hat also drei Knoten. Meine zweite verborgene Ebene hat zwei Knoten. Hier sind es beide lineare Aktivierungsfunktionen. Es stellte sich heraus, dass ich für die drei oben genannten die eingeschränkte Aktivierungsfunktion für lineare Einheiten verwende, die also etwas anders ist. |
| Aber ich fand, dass sie trotzdem ungefähr gleich zu passen scheinen. |
| 5. Das bedeutet, hey, ich werde fünf verschiedene Sätze von Startwerten ausprobieren, und ich werde denjenigen behalten, der am besten funktioniert. |
| Wie Sie meinem Code entnehmen können, hätte ich das wahrscheinlich mit dem R machen sollen. Es ist eine Art Vier-Loop-Durchlauf, mehrere davon, derjenige, der am besten funktioniert, wird ausgespuckt. Für zukünftige Arbeiten wäre das also eine Stelle, an die ich gehen würde. |
| Dann speichere ich das Zeug und bin jetzt bereit für den Modellvergleich. Jetzt bringe ich all diese neuen Spalten in den Modellvergleich. |
| Scrollen Sie ein wenig rüber. Hier mache ich also die By-Validierung, wie ich bereits erwähnt habe. |
| Und zum Schluss mache ich noch ein bisschen Codierung, damit es im Wesentlichen so aussieht, wie ich es möchte. |
| Also bekomme ich diese Übersichtskästen, um nur zu sagen, Trainingsdiagnose, Validierungsdiagnose, Testdiagnose, anstelle des üblichen Zeugs, das JMPs sagt. |
| Ich werde mir diese Diagnosediagramme besorgen. |
| Hier möchte ich nur sagen, dass ich nur einen Teil der Ausgaben möchte, wenn ich einen Griff dazu ergreife. |
| Ich werde ganz schnell ein paar Restplots erstellen, da diese nicht alle sofort ausspucken, insbesondere solche 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 auf. |
| Damit es schön sauber ist. Schließen Sie eine Menge Dinge ab, damit ich mir keine Sorgen machen muss. Und was ich hier am Ende getan habe, ist das, was ich wollte: Wenn ich eines davon aufmache, |
| alles andere darunter ist sofort offen statt |
| auf sechs oder sieben verschiedene Dinge klicken zu müssen. Sie sehen, ich muss hier und hier und klicken |
| Hier drüben sind noch drei weitere. Ich schätze, noch einer. Entschuldigung. Auf diese Weise muss ich jedoch nicht darauf klicken, sie werden automatisch geöffnet. |
| Genau das macht dieser letzte Code. |
| Okay. |
| Lucas | Das ist also nur eine andere Ausgabe und Live-Ausführung. Aber so kann es auch aussehen. |
| Wie ich bereits erwähnt habe, haben Sie im Code etwas anderes gesehen, das wir gesehen haben. |
| Richard |
| Lucas | Nein. Um alles zusammenzufassen: Die Modellvergleichsplattform ist wirklich ein sehr gutes Tool, um die Vorhersagefähigkeit mehrerer Modelle an einem Ort zu vergleichen. Sie müssen nicht zwischen verschiedenen Dingen hin- und herpendeln. Sie können einfach alles direkt vor sich betrachten. |
| Die Flexibilität kann sogar genutzt werden, um Modelle anzupassen, die nicht in JMP gefittet wurden, oder Modelle zu vergleichen, die nicht einmal in JMP gefittet wurden. Und so |
| Wenn wir sehr große Modelle anpassen müssen, deren Anpassung lange dauert, können wir ihnen damit sagen, dass sie angepasst werden sollen. Rufen Sie alles in JMP ab und sehen Sie sich ganz einfach alle Ergebnisse an, um zu versuchen, die nächsten Schritte festzulegen. |
| Und damit vielen Dank für Ihre Zeit. |