Como he demostrado en entradas anteriores del blog, la ventaja de usar la integración de Python con JMP es que se pueden usar paquetes de Python para acceder a características y métodos de análisis que no están incluidos en JMP .
En esta ocasión, a modo de ejemplo, veremos cómo implementar el método de agrupamiento basado en densidad HDBSCAN mediante la integración de Python con JMP. Si bien JMP cuenta con métodos de análisis de clústeres como k-means, no incluye HDBSCAN de forma integrada.
Además, se puede combinar con el cuadro de diálogo que presentamos anteriormente. Este cuadro de diálogo también permite especificar variables (columnas). En otras palabras, puede seleccionar las variables que se utilizarán para la agrupación en tiempo real, especificar los valores de los parámetros y, a continuación, ejecutar el proceso. HDBSCAN ofrece una experiencia de usuario prácticamente idéntica a la de la plataforma de análisis JMP.
ダイアログによるHDBSCANの実行Ejecutar HDBSCAN a través del cuadro de diálogo
¿Qué es HDBSCAN?
HDBSCAN es un método para encontrar clústeres que se centra en la "densidad" de los datos . Considera las áreas donde los puntos de datos están densamente agrupados como un solo clúster y divide los datos utilizando áreas de baja densidad como límites.
HDBSCAN no requiere que especifique el número de clústeres de antemano, ya que lo determina automáticamente a partir de los datos. Otra característica importante es su capacidad para separar los valores atípicos como ruido. En métodos de agrupamiento como k-means, los valores atípicos siempre se clasifican en uno de los clústeres especificados. En cambio, HDBSCAN trata los puntos que no pertenecen a ningún clúster como ruido.
En lugar de especificar el número de clústeres, existen dos parámetros que determinan "cuán densamente poblada debe estar un área para ser considerada un clúster".
tamaño_mínimo_de_clúster : El número mínimo de puntos de datos que se deben reconocer como un clúster.
Los grupos más pequeños que este valor no se consideran clústeres. Aumentar el valor tiende a resultar en menos clústeres, ya que los clústeres más pequeños dejan de ser reconocidos.
muestras_mínimas : El número de puntos vecinos a los que se hace referencia al medir la densidad.
Cuanto mayor sea el valor, más conservadora será la determinación de la densidad y mayor será el ruido (-1) incluido . Piénselo como una especificación del rigor de la detección de valores atípicos.
Código basado en Python (.py)
Antes de crear el diálogo, escribamos primero la parte HDBSCAN utilizando un enfoque basado en Python (.py).
Con los datos de muestra "HDBSCAN_sample.jmp" (1000 filas, 6 columnas de datos de escala continua, adjuntos a este blog), que se crearon usando números aleatorios, abra el archivo .py (Example2_HDBSCAN.py) que ejecutará HDBSCAN usando "X1" a "X6".
A continuación se muestra la parte principal del código. Convierte las columnas "X1" a "X6" de JMP en un DataFrame de pandas (una estructura de datos tabular), estandariza los datos y luego ejecuta HDBSCAN.
Pythonを起点としたコードCódigo basado en Python
*Este código requiere que scikit-learn y hdbscan estén instalados previamente en el entorno Python de JMP.
Al ejecutarlo, se añadirán tres columnas a la tabla de datos.
- Clúster : Almacena el número de clúster al que pertenece (escala nominal). -1 indica ruido (valor atípico) que no pertenece a ningún clúster.
- Probabilidad de clúster : Representa la fuerza de pertenencia al clúster (0-1). Si bien a menudo se traduce como "probabilidad de pertenencia", un valor más cercano a 1 indica estar en el núcleo del clúster, mientras que un valor más cercano a 0 indica estar cerca del límite.
- Puntuación de valores atípicos : Una puntuación (0-1) que indica el grado de aislamiento de un objeto en relación con la densidad de su entorno. Una puntuación más alta indica una mayor probabilidad de que se trate de un valor atípico.
データテーブルにクラスタリングの結果を追加Agregue los resultados de la agrupación a la tabla de datos.
Análisis exploratorio mediante JMP
A partir de ahora, utilizaremos las funciones de JMP. En primer lugar, al codificar por colores los marcadores según el clúster en la tabla de datos ([Filas] > [Color/Coloración de marcadores por valor de columna]), podrá ver las diferencias entre grupos de un vistazo también en otros análisis.
Cuando realizamos un análisis de componentes principales y observamos el gráfico de puntuaciones, podemos ver que los tres clústeres están claramente separados y los puntos rojos (-1) están dispersos lejos de cada grupo.
主成分分析とクラスタリングの結果Resultados del análisis de componentes principales y la agrupación
Al realizar un análisis multivariado de valores atípicos mediante [Multivariado] > [Correlación multivariada], se observa que estos datos constituyen una pseudosimulación. La clara separación de colores en el gráfico de distancia de Mahalanobis, según el número de fila, se debe a que los datos se generaron en grupos.
Mahalanobisの距離Distancia de Mahalanobis
Utilice un cuadro de diálogo para crear una herramienta de propósito general (.jsl).
Hasta este punto, el código tiene variables fijas "X1" a "X6", y los valores de los parámetros se escriben directamente en el código. Para usarlo con datos diferentes, es necesario reescribirlo cada vez.
Por lo tanto, utilizaremos un diálogo para permitir la selección de columnas y la especificación de tamaño_mínimo_de_clúster / muestras_mínimas . Dado que los diálogos solo se pueden crear utilizando JSL, el siguiente código (Example2_HDBSCAN.jsl) estará basado en JSL. Hay dos puntos principales.
1. Sección de diálogo
- Cuadro de lista de columnas (Todas, …) : Muestra todas las columnas de la tabla de datos en un cuadro de diálogo (lista a la izquierda).
- Lista de columnas (Numérico, …) : Esta es la lista que recibirá la columna seleccionada (la lista de la derecha). Al especificar Numérico, solo se aceptarán columnas numéricas.
- Cuadro de botones (" > ") : Agrega la columna seleccionada actualmente de la lista izquierda a la lista derecha.
// ダイアログの起動
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. Reciba el resultado de Python y agréguelo como una columna.
ダイアログで選択した列やパラメータの情報を、Python Send() を使ってPythonに送付します。Python側では、この変数を使ってhdbscanパッケージによるクラスタリングを実行します。
Python Send( selCols );
Python Send( mcsV );
Python Send( msV );
この後の <EM>Python Obtener()</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 ) ) );
Cuando ejecute este código JSL en "HDBSCAN_sample.jmp", aparecerá un cuadro de diálogo que le permitirá agrupar solo cuatro variables, por ejemplo, "X2", "X3", "X4" y "X5".
Al agregar un cuadro de diálogo, el mismo script se puede aplicar a datos distintos de este. Usando las cinco variables consecutivas "P1" a "P5" de los datos de muestra JMP "Powder Metallurgy.jmp", cambiemos tamaño_mínimo_de_clúster a 300 y muestras_mínimas a 30 según el número de filas.
HDBSCANのオプション設定Configuración de opciones de HDBSCAN
Al hacer clic en el botón [Aceptar] se mostrará el informe de análisis de componentes principales y otra información relacionada.
別のデータにおけるレポートInformes en otros datos
Como en este ejemplo, el procesamiento computacional para métodos no disponibles en JMP se realiza mediante paquetes de Python, mientras que la interpretación y exploración de los resultados se llevan a cabo en JMP. Estas operaciones se agrupan en un cuadro de diálogo, lo que permite a los usuarios seleccionar variables libremente. De esta forma, se puede crear una herramienta de propósito general que puedan usar los usuarios de JMP.
Resumen de las 4 partes
A lo largo de cuatro artículos, hemos explicado "qué se puede hacer realmente" con las funciones de integración de Python de JMP, utilizando dos ejemplos concretos: la adquisición de datos del Banco Mundial y la agrupación de datos mediante HDBSCAN.
Lo que estos ejemplos tienen en común es que las características y los métodos analíticos no incluidos en JMP se dejan a los paquetes de Python, y los resultados se exploran y visualizan utilizando las tablas de datos y los informes de JMP.
Además, al agrupar las condiciones y las especificaciones de las variables en un cuadro de diálogo JSL, se convierte en una herramienta versátil que cualquiera puede usar repetidamente sin tener que reescribir el código.La mayor ventaja de la integración de JMP con Python es que permite ampliar el alcance del análisis combinando las ventajas de Python y JMP.
Hoy en día, basta con indicarle a una IA de última generación qué quieres hacer, y esta escribirá código Python por ti. Esperamos que esta serie te sirva de guía para utilizar ese código generado dentro del entorno JMP.
Por último, me gustaría compartir un vídeo (en japonés) que resume el contenido de esta serie de artículos del blog (las 4 partes) en unos 12 minutos.
por Naohiro Masukawa (JMP Japón)
Naohiro Masukawa - Comunidad de usuarios de JMP