¿Aglomeración basada en la densidad?¿Es posible separar los círculos concéntricos que se muestran en la siguiente tabla de ejemplo utilizando cualquiera de los métodos de agrupación en clústeres de JMP?Ya existe una solicitud de lista de deseos de JMP para DBSCAN, o agrupación espacial basada en densidad de aplicaciones con ruido, que podría hacer esto.¿Me estoy perdiendo alguna funcionalidad existente?
Artículo de la lista de deseos: agrupamiento basado en la densidad

Script para crear una tabla de datos de ejemplo:
Ver más...
New Table( "Cluster Circles",
Add Rows( 500 ),
New Script(
"x by y",
Graph Builder(
Size( 527, 456 ),
Show Control Panel( 0 ),
Variables( X( :x ), Y( :y ), Color( :actual cluster ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
)
),
New Column( "x",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( If( :actual cluster == 1, 2, 1 ) * :random noise * Cos( :random ) )
),
New Column( "y",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( If( :actual cluster == 1, 2, 1 ) * :random noise * Sin( :random ) )
),
New Column( "random",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Random Uniform( 0, 2 * Pi() ) )
),
New Column( "random noise",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Random Normal( 1, 0.05 ) )
),
New Column( "actual cluster",
Numeric,
"Nominal",
Format( "Best", 12 ),
Formula( Floor( Random Uniform( 0, 1.99999 ) ) ),
Set Selected
)
)
Sé que podría entrenar a un modelo para hacer esto si viera la relación visualmente y solo quisiera sumar puntos, pero quiero un método sin supervisión para hacerlo.
Aquí hay otro conjunto de datos de ejemplo:

Ver más...
New Table( "Cluster Circles 2",
Add Rows( 500 ),
New Script(
"x by y",
Graph Builder(
Size( 527, 456 ),
Show Control Panel( 0 ),
Variables( X( :x ), Y( :y ), Color( :actual cluster ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
)
),
New Column( "x",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( :actual cluster == 1,
2 * :random noise * Cos( :random ),
1 * :random noise * Cos( :random / 2 ) + 0.1
)
)
),
New Column( "y",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( :actual cluster == 1,
2 * :random noise * Sin( :random ),
1 * :random noise * Sin( :random / 2 ) + 0.1
)
),
Set Selected
),
New Column( "random",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Random Uniform( 0, 0.8 * Pi() ) )
),
New Column( "random noise",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Random Normal( 1, 0.1 ) )
),
New Column( "actual cluster",
Numeric,
"Nominal",
Format( "Best", 12 ),
Formula( Floor( Random Uniform( 0, 1.99999 ) ) )
)
)
AnalíticaRe: Agrupación basada en densidad?El algoritmo de wikipedia parece funcionar. No estoy seguro de por qué necesita usar una notación extraña como
SeedSet S := N \ {P} pero tal vez esa es la notación de conjunto estándar para eliminar P del conjunto N?
Lo ejecuté un montón de veces con datos aleatorios y obtuve resultados como este para un anillo y 10 grupos colocados al azar
always using the same eps and minpts, one time the ring separated in halfsiempre usando los mismos eps y minpts, una vez el anillo se separó por la mitad
Puede volverse demasiado lento alrededor de 10,000 puntos, dependiendo de los datos y el parámetro eps. No estoy seguro de que califique como sin supervisión; Pasé una buena cantidad de tiempo eligiendo eps y minpts para que estos gráficos funcionaran tan bien.
Re: Agrupación basada en densidad?la wikipedia código y la función KDTable de JMP parece que podrían hacer esto. Podría ser bastante rápido ya que la búsqueda de KDTable estaría haciendo gran parte del trabajo.
@DonMcCormack esto podría ser un buen desafío, especialmente la parte en la que se convierte en un complemento con un cuadro de diálogo de inicio adecuado y un lugar en el sistema de menús.
Re: Agrupación basada en densidad?Hola @Craige_Hales
¡No sabía que existía esta función!Desafortunadamente, parece seleccionar las regiones de alta densidad de todos los grupos que, si bien es útil, no es exactamente lo que estoy buscando.
¡Gracias!
Re: Agrupación basada en densidad?Buen descubrimiento @Craige_Hales ,
Estaba confundido de cómo me perdí esto después de probar todos los métodos, pero ahora veo que hay un error en la plataforma, así que guardé el grupo da una buena separación para los anillos, pero salvando el fórmula de conglomerado muestra un resultado diferente.Como mencionó, aunque encontraré útil, no funciona del todo en mi aplicación real.

¡Gracias!
Re: Agrupación basada en densidad?hola y gracias @Thierry_S ,
Sí, de hecho, la transformación a polar daría una gran separación para ambos conjuntos de datos. El problema es que solo funciona para este conjunto de datos de ejemplo y realmente está más cerca de un método supervisado de lo que esperaba.Usé los anillos porque ilustran mi lucha con los métodos existentes, pero de hecho los datos reales son más confusos, en más dimensiones, y una simple transformación no haría el trabajo.
Como un complemento para lograr que más personas voten por el agrupamiento basado en la densidad artículo de la lista de deseos, vea cómo se compara con diferentes métodos en el enlace a continuación. Puedo dar fe de ver un rendimiento similar en algunas situaciones.
https://towardsdatascience.com/how-dbscan-works-and-why-should-i-use-it-443b4a191c80
Re: Agrupación basada en densidad?Además, el método de enlace único jerárquico funcionó perfectamente en los anillos disjuntos. Sin embargo, no es el segundo ejemplo.
Re: Agrupación basada en densidad?densidad no par bivariada
luego seleccione puntos por densidad

Re: Agrupación basada en densidad?Hola,
¿Ha considerado transformar sus datos en coordenadas polares y luego agruparlos en R y alfa? Al menos con sus datos de ejemplo, hace un trabajo bastante bueno.
Salud,
TS