Tengo un conjunto de datos. Cada elemento de este conjunto consta de variables numéricas y categóricas. Las variables categóricas son nominales y ordinales. Hay una estructura natural en este conjunto de datos. Comúnmente, los expertos agrupan conjuntos de datos como el mío utilizando su "conocimiento experto", pero quiero automatizar este proceso de clúster.Una agrupación comprensible
La mayoría de los algoritmos para la agrupación utilizan la distancia (euclidiana, Mahalanobdis, etc.) entre los objetos para agruparlos en clústeres. Pero es difícil encontrar algunas métricas razonables para los tipos de datos mixtos, es decir, no podemos encontrar una distancia entre 'vidrio' y 'acero'. Así que llegué a la conclusión de que tengo que usar probabilidades condicionalesP(feature = 'something' | Class)
y alguna función de utilidad que dependa de ellas. Es razonable para variables categóricas, y funciona bien con variables numéricas asumiendo que se distribuyan normalmente.
Me di cuenta de que los algoritmos como K-means no producirán buenos resultados.
En este momento trato de trabajar con el algoritmo COBWEB, que coincide completamente con mis ideas sobre el uso de probabilidades condicionales. Pero me enfrenté a otros obsacles: los resultados de la agrupación son realmente difíciles de interpretar, si no imposible. Como resultado, quería obtener algo así como un conjunto de reglas que describan cada grupo (por ejemplo, if feature1 = 'a' and feature2 in [30, 60], it is cluster1
), como árboles de clasificación para la clasificación.
lo tanto, mi pregunta es:
¿Hay algún algoritmo de clusterización existente que funciona con el tipo de datos mixtos y produce una descripción comprensible (y razonable para los humanos) de las agrupaciones.
Otros detalles:
Como entiendo que mi tarea es en el campo de agrupamiento conceptual. No puedo definir una función de similitud como se sugirió (como un objetivo final del proyecto whoal), debido al campo de estudio: es muy complicado y sin misericordia en términos de formalización. Por lo que yo entiendo, el enfoque más razonable es el que se usa en COBWEB, pero no estoy seguro de cómo adaptarlo, por lo que puedo obtener una descripción inmejorable de los clusters.
árbol de decisión
Como se sugirió, he tratado de entrenar a un árbol de decisión en la salida de la agrupación, obteniendo así una descripción de los clusters como un conjunto de reglas. Pero, lamentablemente, la interpretación de estas reglas es casi tan difícil como con la salida de clúster en bruto. El primero de unos pocos primeros niveles de reglas del nodo raíz tiene sentido: más cerca del sentido sin hojas que tenemos. En segundo lugar, estas reglas no coinciden con ningún conocimiento experto.
Por lo tanto, llegué a la conclusión de que la agrupación es una caja negra, y vale la pena no tratar de interpretar sus resultados.
también
tenía una idea interesante para modificar un 'árbol de decisión para la regresión' algoritmo de cierta manera: Istead de calcular una varianza intra-grupo calcualte un category utility function y utilizarlo como criterio dividida.Como resultado, deberíamos tener un árbol de decisiones con racimos de hojas y descripción de clusters listos para usar. Pero no he tratado de hacerlo, y no estoy seguro de la precisión y todo lo demás.
¿Por qué no puedes usar árboles de decisión donde class = cluster? Supongo que ya tiene algunos ejemplos etiquetados que puede usar ... – amit
@amit ese es el punto que no tengo ejemplos etiquetados, y no tengo ninguna clase existente. Lo ideal es lograr lo siguiente: conjunto de datos de entrada -> algoritmo de clúster -> descripción de clusters, y cuando un experto observa la descripción, dice: "Sí, eso es. Lo entiendo, y yo haría lo mismo". –
¿Conoces la cantidad de categorías o miembros de categorías a priori? Sin una métrica de distancia realmente no hay una buena manera de determinar qué tan bueno es su algoritmo. – argentage