Estoy tratando de agrupar inteligentemente una colección ordenada. Tengo una colección de piezas de datos. Pero sé que estos datos se ajustan a contenedores de tamaños desiguales. No sé cómo elegir inteligentemente los puntos finales para que se ajusten adecuadamente a los datos. por ejemplo:
Digamos que tengo 12 elementos en mi colección, y sé que los datos encajarán en 3 contenedores:
Index: 1 2 3 4 5 6 7 8 9 10 11 12
Value: 1 1 1 3 3 3 3 3 3 5 5 6
¿Cómo elijo inteligentemente mis puntos de interrupción para los contenedores de ?
La implementación actual que tengo divide los datos en bins de tamaño uniforme y luego toma el promedio de los puntos finales para encontrar los índices para el final de los bins. Entonces funciona así:
Index: 1 2 3 4 5 6 7 8 9 10 11 12
Value: 1 1 1 3 3 3 3 3 3 5 5 6
first break evenly: i = 1-4, 5-8, 9-12
mean endpoints: between 4 and 5: (3+3)/2 = 3
between 8 and 9: (3+3)/2 = 3
Así que ahora cualquier cosa por debajo de 3 cabe en la bandeja 1, cualquier cosa por encima de 3 pero por debajo de 3 cabe en la bandeja 2, y cualquier cosa por encima de 3 cabe en la bandeja 3. Puede ver cuál es mi problema. Si los datos tienen bins desiguales, mi método falla.
Un amigo mencionó el algoritmo vecino k-más cercano pero no estoy seguro.
fuente
Respuestas:
Creo que lo que quieres hacer se llama agrupación. Desea agrupar sus "valores" de tal manera que se recopilen valores similares en el mismo contenedor y el número total de contenedores esté preestablecido.
Puede resolver este problema utilizando el algoritmo de agrupación k-means . En MATLAB, puede hacer esto:
La llamada anterior agrupará los valores en
Values
tres grupos, de modo que la varianza dentro del grupo sea mínima.fuente
k-means es una opción, pero no es muy sensible para datos unidimensionales. En los datos unidimensionales, tiene un enorme beneficio: los datos se pueden ordenar por completo.
Eche un vistazo a la optimización de pausas naturales :
http://en.wikipedia.org/wiki/Jenks_natural_breaks_optimization
fuente