Tengo una matriz que se rellena con elementos discretos, y necesito agruparlos (usando R) en grupos intactos. Entonces, por ejemplo, tome esta matriz:
[A B B C A]
[A A B A A]
[A B B C C]
[A A A A A]
Habría dos grupos separados para A, dos grupos separados para C y un grupo para B.
La salida que estoy buscando idealmente asignaría una ID única a cada clúster, algo como esto:
[1 2 2 3 4]
[1 1 2 4 4]
[1 2 2 5 5]
[1 1 1 1 1]
En este momento, escribí un código que hace esto de forma recursiva al verificar iterativamente el vecino más cercano, pero se desborda rápidamente cuando la matriz se hace grande (es decir, 100x100).
¿Hay una función incorporada en R que pueda hacer esto? Miré en el procesamiento de imágenes y trama, pero no tuve suerte. Estoy convencido de que debe estar ahí afuera.
r
clustering
usuario3037237
fuente
fuente
Respuestas:
¿Cuál crees que es la medida de distancia en tu caso?
Supongo que hay tres dimensiones aquí:
RowN
(numero de fila)ColN
(número de columna)Value
(valor: A, B o C)Eso significa que los datos que obtiene de la
4x5
matriz se ven así:¿Es
value
escalado? En otras palabras, esA < B < C
?Si es así, entonces
{A, B, C}
con{0, 1, 2}
(o puede ser{10, 11, 12}
, si desea que esta diferencia sea menos importante que los atributos RowN y ColN)stats
paquete REn ese caso, la distancia entre dos será:
Si
value
no está escalado (variable categórica regular), use algunas modificaciones de K-Means que funcionen con datos categóricos .Entonces, en el caso de una matriz de 100x100, tiene 10000 observaciones y tres variables, que es un tamaño de muestra bastante trivial.
fuente
No estoy seguro de si su pregunta se clasifica como un problema de agrupamiento. Al agrupar, está tratando de descubrir grupos de ejemplos similares utilizando datos no etiquetados. Aquí, parece que desea enumerar los "grupos" existentes de nodos cercanos.
Para ser honesto, no tengo idea de tal función en R. Pero, en lo que respecta al algoritmo, creo que lo que está buscando es el etiquetado de componentes conectados . Una especie de relleno de cubo, para matrices.
El artículo de wikipedia está vinculado anteriormente. Uno de los algoritmos presentados allí, denominado algoritmo de un solo paso, es el siguiente:
Supongo que sería fácil rodar el tuyo usando lo anterior.
fuente