Estou usando o algoritmo Birch do pacote Python scipy-learn para agrupar um conjunto de pontos em uma pequena cidade em conjuntos de 10.
Eu uso o seguinte código:
no = len(list_of_points)/10
brc = Birch(branching_factor=50, n_clusters=no, threshold=0.05,compute_labels=True)
Na minha ideia, eu sempre terminava com conjuntos de 10 pontos. No meu caso agora, tenho 650 pontos para agrupar e n_clusters é 65.
Mas, meu problema é que, com um limite muito baixo, eu acabo com 1 endereço por cluster, apenas um limite minúsculo maior - 40 endereços por cluster.
O que estou fazendo de errado aqui?
python
clustering
scipy.spatial
kaboom
fonte
fonte
Respostas:
Eu fiz algumas pesquisas. Eu levei alguns pontos em dois sistemas de coordenadas não métricas (WGS84) e métricas (Polônia 1992).
Eu usei este código:
Então eu ajustei nosso modelo com dados métricos:
E plote os resultados, onde cruzamentos foram meus pontos e círculos foram meus subclusters:
Isto é o que eu tenho:
Você pode ver que esse valor limite era muito pequeno, porque encontrou subcluster em cada ponto.
Definição do limiar:
Portanto, neste caso, precisamos aumentar esse valor.
Para:
foi muito melhor:
E o WGS84 aponta para o limite 0,5:
Apenas um subcluster, não é bom. Mas, neste caso, devemos diminuir o valor limite, portanto, para 0,05:
Temos bons resultados.
Conclusão:
O CRS é importante. Você precisa encontrar um valor limite adequado, depende dos sistemas de coordenadas dos dados e da distância entre os pontos. Se você tiver um CRS não métrico, o limite deverá ser relativamente menor que o do sistema métrico. Você precisa saber a diferença entre metros e graus, se a distância entre dois pontos for igual a 10000m, será menor que 1 grau no WGS84. Verifique o google para obter valores mais precisos.
Também há mais pontos que o valor n_clusters. Tudo bem, não existem centróides de clusters, mas sub-clusters. Se você tentar prever algo ou imprimir etiquetas, ele classificará seu ponto em uma das áreas n_clusters (ou pontos de impressão classificados em 0,1,2, ..., etiqueta n_clusters).
Se você não quiser experimentar parâmetros diferentes, sempre poderá usar outro algoritmo. Um algoritmo muito simples e comum para clustering é o algoritmo K-means.
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
Ele deve encontrar n clusters para seus dados sem se preocupar com limites etc.
fonte