Tengo una tabla de base de datos de transferencias de datos entre diferentes nodos. Esta es una gran base de datos (con casi 40 millones de transferencias). Uno de los atributos es el número de transferencias de bytes (nbytes) que varían de 0 bytes a 2 tera bytes. Me gustaría agrupar los nbytes de modo que, dado k grupos, algunas transferencias x1 pertenezcan al grupo k1, x2 a k2, etc.
Por la terminología que usé, es posible que hayas adivinado a qué me refería: K-means. Estos son datos 1d ya que nbytes es la única característica que me importa. Cuando estaba buscando diferentes métodos para esto, vi que el EM fue mencionado un par de veces junto con un enfoque de no agrupamiento. Me gustaría saber acerca de sus puntos de vista sobre cómo abordar este problema (específicamente si se debe agrupar o no).
¡Gracias!
fuente
Respuestas:
En datos unidimensionales, no use análisis de conglomerados.
El análisis de conglomerados suele ser una técnica multivariante. O permítanme decirlo al revés: para los datos unidimensionales, que están completamente ordenados, existen técnicas mucho mejores. El uso de k-means y técnicas similares aquí es un desperdicio total, a menos que haga un esfuerzo suficiente para optimizarlas realmente para el caso 1-d.
Solo para darle un ejemplo: para k significa que es común usar k objetos aleatorios como semillas iniciales. Para los datos unidimensionales, es bastante fácil hacerlo mejor simplemente usando los cuantiles apropiados (1 / 2k, 3 / 2k, 5 / 2k, etc.), después de ordenar los datos una vez , y luego optimizar desde este punto de partida. Sin embargo, los datos 2D no se pueden ordenar por completo. Y en una cuadrícula, probablemente habrá celdas vacías.
Tampoco lo llamaría clúster. Yo lo llamaría intervalo . Lo que realmente quiere hacer es optimizar los bordes del intervalo. Si hace k-means, probará para cada objeto si debe moverse a otro clúster. Eso no tiene sentido en 1D: solo se deben verificar los objetos en los bordes del intervalo. Obviamente, es mucho más rápido, ya que solo hay ~ 2k objetos allí. Si aún no prefieren otros intervalos, los objetos más centrales tampoco lo harán.
Es posible que desee analizar técnicas como la optimización de Jenks Natural Breaks , por ejemplo.
O puede hacer una estimación de densidad del núcleo y buscar mínimos locales de la densidad para dividir allí. ¡Lo bueno es que no necesita especificar k para esto!
PD: utilice la función de búsqueda. Aquí hay algunas preguntas sobre la agrupación de datos 1-d que se perdió:
fuente
¿Es su pregunta si debe agrupar o qué método debe utilizar para agrupar?
En cuanto a si debe agrupar, depende si desea particionar automáticamente sus datos (por ejemplo, si desea repetir esta partición varias veces). Si hace esto solo una vez, puede mirar el histograma de la distribución de sus valores y dividirlo a simple vista, como se propone en los comentarios. De todos modos, recomendaría mirar los datos a simple vista, ya que podría ayudarlo a determinar cuántos clústeres desea y también si el clúster "funcionó".
Con respecto al tipo de agrupación, k-means debería estar bien si hay agrupaciones "reales" en los datos. Si no ve ningún clúster en el histograma, no tiene mucho sentido agruparlo de todos modos, ya que cualquier partición de su rango de datos dará clústeres válidos (o en el caso de iniciación aleatoria de kmeans, obtendrá clústeres diferentes cada carrera).
fuente
Puedes probar:
KMeans, GMM u otros métodos especificando n_clusters = no. de picos en el diagrama de densidad del grano.
KMeans, GMM u otros métodos determinando el no. de grupos basados en algunas métricas. Más información: [aquí] https://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set
fuente