Me las arreglé para usar el "Método L" para determinar el número de clústeres en una aplicación geográfica (es decir, esencialmente un problema 2d, aunque técnicamente no es euclidiano).
El método L se describe aquí:
Determinación del número de agrupaciones / segmentos en algoritmos jerárquicos de agrupación / segmentación Stan Salvador y Philip Chan
Esencialmente, esto evalúa el ajuste para varios valores de k. Se ve un gráfico en forma de "L" con el valor k óptimo representado por la rodilla en el gráfico. Se usa un cálculo simple de ajuste de mínimos cuadrados de doble línea para encontrar el punto de inflexión.
Encontré el método muy lento porque la k-medias iterativa debe calcularse para cada valor de k. También encontré que k-means funcionó mejor con múltiples carreras y eligiendo la mejor al final. Aunque cada punto de datos tenía solo dos dimensiones, no se podía utilizar una distancia pitagórica simple. Eso es mucho cálculo.
Una idea es omitir cualquier otro valor de k (digamos) a la mitad de los cálculos y / o reducir el número de iteraciones de k-medias, y luego suavizar ligeramente la curva resultante para producir un ajuste más preciso. Pregunté sobre esto en StackOverflow - En mi humilde opinión, la pregunta de suavización sigue siendo una pregunta de investigación abierta.