Comme je l'ai montré dans de précédents articles de blog, l'avantage d'utiliser l'intégration Python avec JMP est que vous pouvez utiliser des packages Python pour accéder à des fonctionnalités et des méthodes d'analyse qui ne sont pas incluses dans JMP .
Cette fois-ci, nous allons aborder, à titre d'exemple, la mise en œuvre de la méthode de clustering basée sur la densité HDBSCAN à l'aide de Python intégré à JMP. Bien que JMP propose des méthodes d'analyse de clusters telles que k-means, HDBSCAN n'est pas intégré.
De plus, il peut être combiné avec la boîte de dialogue présentée précédemment. Cette dernière permet également de spécifier des variables (colonnes). Autrement dit, vous pouvez sélectionner directement les variables à utiliser pour le clustering, définir les valeurs des paramètres, puis exécuter le processus. L'utilisation de HDBSCAN est quasiment identique à celle de la plateforme d'analyse JMP.
ダイアログによるHDBSCANの実行Exécution de HDBSCAN via une boîte de dialogue
Qu'est-ce que HDBSCAN ?
HDBSCAN est une méthode de détection de clusters basée sur la « densité » des données . Elle considère les zones de forte densité de points de données comme un seul cluster et divise les données en utilisant les zones de faible densité comme frontières.
HDBSCAN ne nécessite pas de spécifier le nombre de clusters à l'avance, car celui-ci est déterminé automatiquement à partir des données. Autre atout majeur : sa capacité à isoler les valeurs aberrantes. Contrairement aux méthodes de clustering comme le k-means, qui classent systématiquement les valeurs aberrantes dans l'un des clusters prédéfinis, HDBSCAN considère comme du bruit les points n'appartenant à aucun cluster.
Au lieu de spécifier le nombre de clusters, deux paramètres déterminent « la densité de population que doit avoir une zone pour être considérée comme un cluster ».
taille_min_cluster : Le nombre minimum de points de données à reconnaître comme un cluster.
Les groupes plus petits que cette valeur ne sont pas considérés comme des clusters. Augmenter cette valeur tend à réduire le nombre de clusters, car les plus petits ne sont plus pris en compte.
échantillons_min : Le nombre de points voisins à prendre en compte lors du calcul de la densité.
Plus la valeur est élevée, plus la détermination de la densité est conservatrice et plus le bruit (-1) est inclus . On peut la considérer comme une spécification du niveau de rigueur de la détection des valeurs aberrantes.
Code basé sur Python (.py)
Avant de créer le dialogue, écrivons d'abord la partie HDBSCAN en utilisant une approche basée sur Python (.py).
Avec les données d'exemple « HDBSCAN_sample.jmp » (1 000 lignes, 6 colonnes de données continues, jointes à ce blog), créées à l'aide de nombres aléatoires, ouvrez et exécutez le fichier .py (Example2_HDBSCAN.py) pour exécuter HDBSCAN en utilisant « X1 » à « X6 ».
Voici la partie principale du code. Elle convertit les colonnes JMP « X1 » à « X6 » en un DataFrame pandas (une structure de données tabulaire), normalise les données, puis exécute HDBSCAN.
Pythonを起点としたコードCode basé sur Python
*Ce code nécessite l'installation préalable de scikit-learn et hdbscan dans l'environnement Python de JMP.
Lorsque vous l'exécuterez, trois colonnes seront ajoutées au tableau de données.
- Grappe : Indique le numéro du cluster auquel il appartient (échelle nominale). -1 indique un bruit (valeur aberrante) qui n’appartient à aucun cluster.
- Cluster_Prob : Ce paramètre représente la force d’appartenance au cluster (0-1). Bien qu’il soit souvent traduit par « probabilité d’appartenance », plus précisément, une valeur proche de 1 indique une appartenance au cœur du cluster, tandis qu’une valeur proche de 0 indique une appartenance à la périphérie.
- Score d'anomalie : Score (0-1) indiquant le degré d'isolement d'un objet par rapport à la densité environnante. Plus le score est élevé, plus la probabilité d'une valeur aberrante est forte.
データテーブルにクラスタリングの結果を追加Ajouter les résultats du clustering au tableau de données.
Analyse exploratoire à l'aide de JMP
À partir de maintenant, nous utiliserons les fonctionnalités de JMP. Tout d'abord, en attribuant une couleur aux marqueurs par cluster dans le tableau de données ([Lignes] > [Couleur/Coloration des marqueurs par valeur de colonne]), vous pourrez visualiser d'un coup d'œil les différences entre les groupes, même dans d'autres analyses.
Lorsque nous effectuons une analyse en composantes principales et que nous regardons le graphique des scores, nous pouvons voir que les trois groupes sont clairement séparés et que les points rouges (-1) sont dispersés loin de chaque groupe.
主成分分析とクラスタリングの結果Résultats de l'analyse en composantes principales et du regroupement
L'analyse multivariée des valeurs aberrantes effectuée via [Multivarié] > [Corrélation multivariée] révèle que ces données constituent une pseudo-simulation. La nette séparation des couleurs sur le graphique de distance de Mahalanobis, selon le numéro de ligne, s'explique par le fait que les données ont été générées par groupes.
Mahalanobisの距離Distance de Mahalanobis
Utilisez une boîte de dialogue pour créer un outil à usage général (.jsl).
Jusqu'à présent, le code utilise des variables fixes « X1 » à « X6 », et les valeurs des paramètres sont directement intégrées au code. Pour l'utiliser avec des données différentes, il faut le réécrire à chaque fois.
Par conséquent, nous utiliserons une boîte de dialogue pour permettre la sélection des colonnes et la spécification de `taille_min_cluster` / `échantillon_min` . Les boîtes de dialogue ne pouvant être créées qu'en JSL, le code suivant (Example2_HDBSCAN.jsl) sera basé sur JSL. Deux points principaux sont à retenir.
1. Section de dialogue
- Boîte de liste Col( Tout, … ) : Affiche toutes les colonnes du tableau de données dans une boîte de dialogue (liste à gauche).
- Liste déroulante Col (Numérique, …) : Cette liste reçoit la colonne sélectionnée (la liste de droite). Spécifier « Numérique » signifie que seules les colonnes numériques seront acceptées.
- Bouton Box(" > ") : Ajoute la colonne actuellement sélectionnée dans la liste de gauche à la liste de droite.
// ダイアログの起動
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. Récupérez le résultat Python et ajoutez-le comme colonne.
ダイアログで選択した列やパラメータの情報を、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 ) ) );
Lorsque vous exécutez ce code JSL sur « HDBSCAN_sample.jmp », une boîte de dialogue apparaîtra vous permettant de regrouper seulement quatre variables, par exemple « X2 », « X3 », « X4 » et « X5 ».
En ajoutant une boîte de dialogue, le même script peut être appliqué à d'autres données. À partir des cinq variables consécutives « P1 » à « P5 » des données d'exemple JMP « Powder Metallurgy.jmp », nous modifierons taille_min_cluster à 300 et échantillons_min à 30 en fonction du nombre de lignes.
HDBSCANのオプション設定Paramètres d'option HDBSCAN
Cliquer sur le bouton [OK] affichera le rapport d'analyse en composantes principales et d'autres informations connexes.
別のデータにおけるレポートRapports dans d'autres données
Comme dans cet exemple, le traitement informatique des méthodes non disponibles dans JMP est assuré par des packages Python, tandis que l'interprétation et l'exploration des résultats sont réalisées dans JMP. Ces opérations sont ensuite regroupées dans une boîte de dialogue, permettant aux utilisateurs de sélectionner librement les variables. De cette manière, un outil polyvalent peut être créé et utilisable par les utilisateurs de JMP.
Résumé des 4 parties
Au fil de ces quatre articles, nous avons expliqué « ce que vous pouvez réellement faire » avec les fonctionnalités d'intégration Python de JMP, en utilisant deux exemples concrets : l'acquisition de données de la Banque mondiale et le clustering à l'aide de HDBSCAN.
Ces exemples ont en commun le fait que les fonctionnalités et les méthodes analytiques non incluses dans JMP sont laissées aux packages Python, et que les résultats sont explorés et visualisés à l'aide des tableaux de données et des rapports de JMP.
De plus, en regroupant les spécifications des conditions et des variables dans une boîte de dialogue JSL, il devient un outil polyvalent que n'importe qui peut utiliser à plusieurs reprises sans avoir à réécrire le code.Le principal avantage de l'intégration Python de JMP est qu'elle permet d'élargir le champ d'application de votre analyse en combinant les atouts de Python et de JMP.
Aujourd'hui, il suffit d'indiquer à une IA de génération de code ce que vous souhaitez faire, et elle écrira du code Python pour vous. Nous espérons que cette série vous sera utile comme guide pour utiliser ce code généré dans le framework JMP.
Enfin, j'aimerais partager une vidéo (en japonais) qui résume le contenu de cette série d'articles (les 4 parties) en environ 12 minutes.
par Naohiro Masukawa (JMP Japon)
Naohiro Masukawa - Communauté d'utilisateurs JMP