Come ho mostrato in precedenti post del blog, il vantaggio di utilizzare l'integrazione di Python con JMP è che si possono usare pacchetti Python per accedere a funzionalità e metodi di analisi non inclusi in JMP .
Questa volta, a titolo di esempio, illustreremo come implementare il metodo di clustering basato sulla densità HDBSCAN utilizzando l'integrazione di Python con JMP. Sebbene JMP disponga di metodi di analisi dei cluster come k-means, non include HDBSCAN.
Inoltre, può essere combinato con la finestra di dialogo introdotta la volta scorsa. La finestra di dialogo consente anche di specificare le variabili (colonne). In altre parole, è possibile selezionare sul momento le variabili da utilizzare per il clustering, specificare i valori dei parametri e quindi eseguire il processo. È possibile utilizzare HDBSCAN in modo pressoché identico alla piattaforma di analisi JMP.
ダイアログによるHDBSCANの実行Esecuzione di HDBSCAN tramite finestra di dialogo
Cos'è HDBSCAN?
HDBSCAN è un metodo per individuare cluster concentrandosi sulla "densità" dei dati . Considera le aree in cui i punti dati sono densamente raggruppati come un unico cluster e suddivide i dati utilizzando le aree a bassa densità come confini.
HDBSCAN non richiede di specificare in anticipo il numero di cluster, poiché viene determinato automaticamente dai dati. Un'altra caratteristica importante è la sua capacità di separare i valori anomali considerandoli rumore. Nei metodi di clustering come k-means, i valori anomali vengono sempre classificati in uno dei cluster specificati. Al contrario, HDBSCAN tratta i punti che non appartengono ad alcun cluster come rumore.
Anziché specificare il numero di cluster, esistono due parametri che determinano "quanto densamente popolata debba essere un'area per essere considerata un cluster".
dimensione_minima_cluster : Il numero minimo di punti dati da riconoscere come cluster.
I gruppi più piccoli di questo valore non vengono considerati cluster. Aumentando il valore, si tende a ottenere un numero inferiore di cluster, poiché quelli più piccoli non vengono più riconosciuti.
min_campioni : Il numero di punti vicini a cui fare riferimento durante la misurazione della densità.
Più alto è il valore, più conservativa diventa la determinazione della densità e maggiore è la quantità di rumore (-1) inclusa . Si può pensare a questo come alla specifica del livello di rigore del rilevamento degli outlier.
Codice basato su Python (.py)
Prima di creare la finestra di dialogo, scriviamo innanzitutto la parte HDBSCAN utilizzando un metodo basato su Python (.py).
Utilizzando i dati di esempio "HDBSCAN_sample.jmp" (1.000 righe, 6 colonne di dati continui, allegati a questo blog), creati utilizzando numeri casuali, è possibile aprire ed eseguire il file .py (Example2_HDBSCAN.py) per eseguire HDBSCAN utilizzando i valori da "X1" a "X6".
Quella che segue è la parte principale del codice. Converte le colonne JMP da "X1" a "X6" in un DataFrame di pandas (una struttura dati tabellare), standardizza i dati e quindi esegue HDBSCAN.
Pythonを起点としたコードCodice basato su Python
*Questo codice richiede che scikit-learn e hdbscan siano installati preventivamente nell'ambiente Python di JMP.
Quando lo esegui, verranno aggiunte tre colonne alla tabella dati.
- Grappolo : memorizza il numero del cluster a cui appartiene (scala nominale). -1 indica rumore (valore anomalo) che non appartiene ad alcun cluster.
- Cluster_Prob : Rappresenta la forza di appartenenza al cluster (0-1). Sebbene venga spesso tradotto come "probabilità di appartenenza", più precisamente, un valore più vicino a 1 indica di trovarsi al centro del cluster, mentre un valore più vicino a 0 indica di trovarsi vicino al confine.
- Punteggio outlier : un punteggio (0-1) che indica quanto un oggetto sia isolato rispetto alla densità circostante. Un punteggio più alto indica una maggiore probabilità che si tratti di un valore anomalo.
データテーブルにクラスタリングの結果を追加Aggiungi i risultati del clustering alla tabella dei dati.
Analisi esplorativa tramite JMP
Da qui in avanti, utilizzeremo le funzionalità di JMP. Innanzitutto, colorando i marcatori per cluster nella tabella dati ([Righe] > [Colora/Colorazione marcatori per valore di colonna]), sarà possibile visualizzare a colpo d'occhio le differenze tra i gruppi anche in altre analisi.
Quando eseguiamo l'analisi delle componenti principali e osserviamo il grafico dei punteggi, possiamo vedere che i tre cluster sono chiaramente separati e i punti rossi (-1) sono sparsi lontano da ciascun gruppo.
主成分分析とクラスタリングの結果Risultati dell'analisi delle componenti principali e del clustering
L'esecuzione di un'analisi multivariata degli outlier tramite [Multivariate] > [Multivariate Correlation] rivela che questi dati sono una pseudo-simulazione. La netta separazione dei colori nel grafico della distanza di Mahalanobis, in base al numero di riga, è dovuta al fatto che i dati sono stati generati in gruppi.
Mahalanobisの距離Distanza di Mahalanobis
Utilizzare una finestra di dialogo per creare uno strumento generico (.jsl).
Fino a questo punto, il codice ha variabili fisse da "X1" a "X6" e i valori dei parametri sono scritti direttamente nel codice. Per utilizzarlo con dati diversi, è necessario riscriverlo ogni volta.
Pertanto, utilizzeremo una finestra di dialogo per consentire la selezione delle colonne e la specifica di dimensione_minima_cluster / min_campioni . Poiché le finestre di dialogo possono essere create solo con JSL, il codice seguente (Example2_HDBSCAN.jsl) sarà basato su JSL. Ci sono due punti principali.
1. Sezione di dialogo
- Casella di elenco Col (Tutte, …) : Visualizza tutte le colonne della tabella dati in una finestra di dialogo (elenco a sinistra).
- Casella di riepilogo Col (Numerico, …) : Questo è l'elenco che riceve la colonna selezionata (l'elenco a destra). Specificando Numerico, verranno accettate solo colonne numeriche.
- Pulsante Box(" > ") : Aggiunge la colonna attualmente selezionata dall'elenco di sinistra all'elenco di destra.
// ダイアログの起動
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. Ricevi il risultato Python e aggiungilo come colonna.
ダイアログで選択した列やパラメータの情報を、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 ) ) );
Quando esegui questo codice JSL su "HDBSCAN_sample.jmp", apparirà una finestra di dialogo che ti permetterà di raggruppare solo quattro variabili, ad esempio "X2", "X3", "X4" e "X5".
Aggiungendo una finestra di dialogo, lo stesso script può essere applicato anche ad altri dati. Utilizzando le cinque variabili consecutive da "P1" a "P5" del file di dati campione JMP "Powder Metallurgy.jmp", modificheremo dimensione_minima_cluster a 300 e min_campioni a 30 in base al numero di righe.
HDBSCANのオプション設定Impostazioni delle opzioni HDBSCAN
Facendo clic sul pulsante [OK] verranno visualizzati il report dell'analisi delle componenti principali e altre informazioni correlate.
別のデータにおけるレポートRapporti in altri dati
Come in questo esempio, l'elaborazione computazionale che utilizza metodi non disponibili in JMP viene gestita da pacchetti Python, mentre l'interpretazione e l'esplorazione dei risultati vengono eseguite in JMP. Queste operazioni vengono quindi raggruppate in una finestra di dialogo, che consente agli utenti di selezionare liberamente le variabili. In questo modo, è possibile creare uno strumento di uso generale utilizzabile anche dagli utenti di JMP.
Riassunto di tutte e 4 le parti
Nel corso di quattro articoli, abbiamo spiegato "cosa si può effettivamente fare" con le funzionalità di integrazione Python di JMP, utilizzando due esempi concreti: l'acquisizione di dati dalla Banca Mondiale e il clustering tramite HDBSCAN.
Ciò che questi esempi hanno in comune è che le funzionalità e i metodi analitici non inclusi in JMP vengono affidati a pacchetti Python, e i risultati vengono esplorati e visualizzati utilizzando le tabelle dati e i report di JMP.
Inoltre, raggruppando le condizioni e le specifiche delle variabili in una finestra di dialogo JSL, si ottiene uno strumento versatile che chiunque può utilizzare ripetutamente senza dover riscrivere il codice.Il vantaggio principale dell'integrazione di JMP con Python è che permette di ampliare la portata dell'analisi combinando i punti di forza di Python e di JMP.
Oggigiorno, è sufficiente chiedere a un'IA generata automaticamente cosa si desidera fare, e questa scriverà il codice Python necessario. Ci auguriamo che questa serie di articoli possa essere utile come guida per utilizzare il codice generato all'interno del framework JMP.
Infine, vorrei condividere un video (in giapponese) che riassume il contenuto di questa serie di articoli (tutte e 4 le parti) in circa 12 minuti.
di Naohiro Masukawa (JMP Giappone)
Naohiro Masukawa - Comunità degli utenti JMP