Wie ich bereits in früheren Blogbeiträgen gezeigt habe, besteht der Vorteil der Python-Integration mit JMP darin, dass man Python-Pakete verwenden kann, um auf Funktionen und Analysemethoden zuzugreifen, die nicht in JMP enthalten sind .
Dieses Mal zeigen wir beispielhaft, wie man die dichteabhängige Clustering-Methode HDBSCAN mithilfe der Python-Integration in JMP implementiert. JMP bietet zwar Clusteranalyse-Methoden wie k-Means, HDBSCAN ist jedoch nicht nativ integriert.
Darüber hinaus lässt es sich mit dem zuletzt eingeführten Dialogfeld kombinieren. Auch in diesem Dialogfeld können Sie Variablen (Spalten) festlegen. Das heißt, Sie können die für das Clustering zu verwendenden Variablen direkt auswählen, die Parameterwerte angeben und anschließend den Prozess ausführen. Die Bedienung von HDBSCAN ist nahezu identisch mit der JMP-Analyseplattform.
ダイアログによるHDBSCANの実行HDBSCAN über Dialogfeld ausführen
Was ist HDBSCAN?
HDBSCAN ist eine Methode zur Clusterfindung, die sich auf die „Dichte“ der Daten konzentriert . Sie betrachtet Bereiche mit hoher Datendichte als einen einzigen Cluster und teilt die Daten anhand von Bereichen geringer Dichte als Grenzen auf.
HDBSCAN erfordert keine vorherige Angabe der Clusteranzahl, da diese automatisch aus den Daten ermittelt wird. Ein weiteres wichtiges Merkmal ist die Fähigkeit, Ausreißer als Rauschen zu erkennen. Bei Clustering-Methoden wie k-Means werden Ausreißer stets einem der festgelegten Cluster zugeordnet. HDBSCAN hingegen behandelt Punkte, die keinem Cluster angehören, als Rauschen.
Anstatt die Anzahl der Cluster anzugeben, gibt es zwei Parameter, die bestimmen, „wie dicht ein Gebiet besiedelt sein muss, um als Cluster zu gelten“.
minimale Clustergröße : Die Mindestanzahl an Datenpunkten, die als Cluster erkannt werden sollen.
Kleinere Gruppen als dieser Wert werden nicht als Cluster betrachtet. Eine Erhöhung des Wertes führt tendenziell zu einer Verringerung der Clusteranzahl, da kleinere Cluster nicht mehr erkannt werden.
min_samples : Die Anzahl der benachbarten Punkte, auf die bei der Dichtemessung Bezug genommen wird.
Je größer der Wert, desto konservativer wird die Dichtebestimmung und desto mehr Rauschen (-1) wird einbezogen . Man kann sich das als Festlegung der Strenge der Ausreißererkennung vorstellen.
Python-basierter Code (.py)
Bevor wir den Dialog erstellen, schreiben wir zunächst den HDBSCAN-Teil mit einem Python-basierten Ansatz (.py).
Mit den Beispieldaten "HDBSCAN_sample.jmp" (1.000 Zeilen, 6 Spalten mit fortlaufenden Daten, diesem Blog beigefügt), die mit Zufallszahlen erstellt wurden, wird durch Öffnen und Ausführen der .py-Datei (Example2_HDBSCAN.py) HDBSCAN mit "X1" bis "X6" ausgeführt.
Nachfolgend der Hauptteil des Codes. Er konvertiert die JMP-Spalten „X1“ bis „X6“ in einen Pandas DataFrame (eine tabellarische Datenstruktur), standardisiert die Daten und führt anschließend HDBSCAN aus.
Pythonを起点としたコードPython-basierter Code
*Dieser Code erfordert, dass scikit-learn und hdbscan zuvor in der JMP Python-Umgebung installiert wurden.
Wenn Sie das Skript ausführen, werden der Datentabelle drei Spalten hinzugefügt.
- Cluster : Speichert die Clusternummer, zu der es gehört (nominale Skala). -1 kennzeichnet Rauschen (Ausreißer), das zu keinem Cluster gehört.
- Cluster_Wahrscheinlichkeit : Dieser Wert repräsentiert die Stärke der Zugehörigkeit zum Cluster (0-1). Obwohl er oft als „Wahrscheinlichkeit der Zugehörigkeit“ übersetzt wird, bedeutet ein Wert nahe 1, dass man sich im Zentrum des Clusters befindet, während ein Wert nahe 0 bedeutet, dass man sich in der Nähe des Randes befindet.
- Ausreißer-Score : Ein Wert (0–1), der angibt, wie isoliert ein Objekt im Verhältnis zu seiner Umgebungsdichte ist. Ein höherer Wert deutet auf einen wahrscheinlicheren Ausreißer hin.
データテーブルにクラスタリングの結果を追加Füge die Clusterergebnisse der Datentabelle hinzu.
Explorative Analyse mit JMP
Ab jetzt nutzen wir die Funktionen von JMP. Indem Sie die Marker in der Datentabelle nach Cluster farblich kennzeichnen ([Zeilen] > [Farbgebung/Markierungsfärbung nach Spaltenwert]), können Sie die Unterschiede zwischen den Gruppen auch in anderen Analysen auf einen Blick erkennen.
Wenn wir eine Hauptkomponentenanalyse durchführen und uns das Score-Plot ansehen, können wir erkennen, dass die drei Cluster klar voneinander getrennt sind und die roten (-1) Punkte weit von jeder Gruppe entfernt liegen.
主成分分析とクラスタリングの結果Ergebnisse der Hauptkomponentenanalyse und des Clusterings
Die Durchführung einer multivariaten Ausreißeranalyse über [Multivariat] > [Multivariate Korrelation] zeigt, dass es sich bei diesen Daten um eine Pseudo-Simulation handelt. Die klare Farbtrennung im Mahalanobis-Distanzdiagramm nach Zeilennummer ist darauf zurückzuführen, dass die Daten in Gruppen generiert wurden.
Mahalanobisの距離Mahalanobis-Distanz
Verwenden Sie ein Dialogfeld, um ein universelles Tool (.jsl) zu erstellen.
Bis hierhin verwendet der Code die festen Variablen „X1“ bis „X6“, und die Parameterwerte werden direkt im Code festgelegt. Um ihn mit anderen Daten zu verwenden, muss er jedes Mal neu geschrieben werden.
Daher verwenden wir einen Dialog, um die Spaltenauswahl und die Angabe der minimalen Clustergröße / min_samples zu ermöglichen. Da Dialoge nur in JSL erstellt werden können, basiert der folgende Code (Example2_HDBSCAN.jsl) auf JSL. Es gibt zwei Hauptpunkte.
1. Dialogabschnitt
- Spaltenliste (Alle, … ) : Zeigt alle Spalten der Datentabelle in einem Dialogfeld an (Liste auf der linken Seite).
- Spaltenliste (Numerisch, …) : Dies ist die Liste, die die ausgewählte Spalte aufnimmt (die Liste rechts). Die Angabe „Numerisch“ bedeutet, dass nur numerische Spalten akzeptiert werden.
- Button Box(" > ") : Fügt die aktuell ausgewählte Spalte aus der linken Liste zur rechten Liste hinzu.
// ダイアログの起動
nw = New Window( "HDBSCAN Settings",
<
<MODAL>
= 2 ), V List Box( H List Box( Panel Box( "Columns", srcList = Col List Box( All, width( 180 ), nlines( 12 ) ) ), V Center Box( Button Box( " > ", xList << Append( srcList << Get Selected ) ) ), Panel Box( "Variables for HDBSCAN", xList = Col List Box( Numeric, Min Items( 2 ), width( 180 ), nlines( 12 ) ) ) ), Panel Box( "Parameters", H List Box( Text Box( "min_cluster_size " ), mcsBox = Number Edit Box( 30, 5 ), Spacer Box( Size( 24, 0 ) ), Text Box( "min_samples " ), msBox = Number Edit Box( 10, 5 ) ) ), Button Box( "OK", selCols = xList << Get Items; mcsV = mcsBox << Get; msV = msBox << Get; ) ) );
</MODAL>
2. Empfange das Python-Ergebnis und füge es als Spalte hinzu.
ダイアログで選択した列やパラメータの情報を、Python Send() を使ってPythonに送付します。Python側では、この変数を使ってhdbscanパッケージによるクラスタリングを実行します。
Python Send( selCols );
Python Send( mcsV );
Python Send( msV );
この後の <EM>Python Get()</EM> は Python Send() の逆で、Python側の変数をJSLに取り込みます。これにより、JMPのデータテーブルに新しい列が作成できます。
// Python結果の受け取り、列の追加
labs = Python Get( labels );
prb = Python Get( probs );
outs = Python Get( outliers );
cCol = dt << New Column( "Cluster", Numeric, Nominal, Set Values( Matrix( labs ) ) );
pCol = dt << New Column( "Cluster_Prob", Numeric, Continuous, Set Values( Matrix( prb ) ) );
oCol = dt << New Column( "Outlier_Score", Numeric, Continuous, Set Values( Matrix( outs ) ) );
Wenn Sie diesen JSL-Code auf "HDBSCAN_sample.jmp" ausführen, erscheint ein Dialogfeld, in dem Sie nur vier Variablen gruppieren können, zum Beispiel "X2", "X3", "X4" und "X5".
Durch Hinzufügen eines Dialogfelds können Sie dasselbe Skript auch auf andere Daten anwenden. Nehmen wir die fünf kontinuierlichen Variablen „P1“ bis „P5“ aus den JMP-Beispieldaten „Powder Metallurgy.jmp“ und ändern die minimale Clustergröße auf 300 und die minimale Anzahl an Stichproben auf 30, um sie an die Anzahl der Zeilen anzupassen.
HDBSCANのオプション設定HDBSCAN-Optionseinstellungen
Durch Klicken auf die Schaltfläche [OK] werden der Hauptkomponentenanalysebericht und weitere zugehörige Informationen angezeigt.
別のデータにおけるレポートBerichte in anderen Daten
Wie in diesem Beispiel werden Berechnungen für in JMP nicht verfügbare Methoden mithilfe von Python-Paketen durchgeführt, während die Interpretation und Auswertung der Ergebnisse in JMP erfolgen. Diese Operationen werden anschließend in einem Dialogfeld zusammengefasst, sodass Benutzer Variablen frei auswählen können. Auf diese Weise lässt sich ein universelles Werkzeug erstellen, das von JMP-Benutzern genutzt werden kann.
Zusammenfassung aller 4 Teile
In vier Artikeln haben wir anhand zweier konkreter Beispiele erklärt, „was man mit den Python-Integrationsfunktionen von JMP tatsächlich machen kann“: Datenerfassung von der Weltbank und Clustering mit HDBSCAN.
Gemeinsam ist diesen Beispielen, dass Funktionen und Analysemethoden, die nicht in JMP enthalten sind, Python-Paketen überlassen werden und die Ergebnisse mithilfe der Datentabellen und Berichte von JMP untersucht und visualisiert werden.
Darüber hinaus wird es durch die Gruppierung der Spezifikationen von Bedingungen und Variablen in einem JSL-Dialog zu einem vielseitigen Werkzeug, das jeder wiederholt verwenden kann, ohne den Code neu schreiben zu müssen.Der größte Vorteil der Python-Integration von JMP besteht darin, dass sie es Ihnen ermöglicht, den Umfang Ihrer Analyse zu erweitern, indem Sie die Stärken von Python und JMP kombinieren.
Heutzutage kann man einer KI einfach sagen, was man tun möchte, und sie schreibt den entsprechenden Python-Code. Wir hoffen, dass diese Reihe hilfreiche Hinweise zur Verwendung des generierten Codes im JMP-Framework liefert.
Zum Schluss möchte ich Ihnen noch ein Video (auf Japanisch) zeigen, das den Inhalt dieser Blogreihe (alle 4 Teile) in etwa 12 Minuten zusammenfasst.
von Naohiro Masukawa (JMP Japan)
Naohiro Masukawa – JMP-Benutzergemeinschaft