Ciência de dados: realização de agrupamento hierárquico com python
Você pode usar Python para executar agrupamento hierárquico na ciência de dados. Se o K-means está preocupado com centroides, hierárquica (também conhecidos como aglomeração) de agrupamento tenta ligar cada ponto de dados, por uma medida de distância, para o seu vizinho mais próximo, criando um cluster. Retomando o algoritmo utilizando diferentes métodos de ligação, o algoritmo reúne todos os pontos disponíveis para um número cada vez menor de aglomerados, até que, no final, todos os pontos se reunir num único grupo.
Os resultados, se visualizado, vai se assemelham as classificações biológicas dos seres vivos que você pode ter estudado na escola, uma árvore de cabeça para baixo cujos ramos estão todos convergindo para um tronco.
Tal uma árvore figurativa é uma dendrograma, e você vê-lo usado na pesquisa médica e biológica. Scikit-learn implementação de agrupamento aglomerativo não oferece a possibilidade de representar um dendrograma de seus dados, pois tal técnica de visualização funciona bem com apenas alguns casos, ao passo que você pode esperar para trabalhar em muitos exemplos.
Comparado com K-means, algoritmos aglomerativos são mais pesados e não escala bem em grandes conjuntos de dados. algoritmos de aglomeração são mais adequados para estudos estatísticos. Esses algoritmos oferecem a vantagem de criar uma gama completa de soluções de cluster aninhados.
Para usar agrupamento aglomerativo de forma eficaz, você tem que saber sobre os diferentes métodos de ligação e as métricas de distância. Existem três métodos de ligação:
Enfermaria: Tende a olhar para clusters esféricas, muito coesas dentro e extremamente diferenciados de outros grupos. Outra característica interessante é que o método tende a encontrar aglomerados de tamanho similar. Ele funciona apenas com a distância euclidiana.
Completo: Ligações clusters usando suas observações mais distantes, isto é, os seus pontos de dados mais desiguais. Por conseguinte, os conjuntos criadas utilizando este método tendem a ser composta por observações altamente similares, fazendo com que os grupos resultantes bastante compacto.
Média: Ligações clusters usando seus centróides e ignorando seus limites. O método cria grupos maiores do que o método completo. Além disso, os clusters podem ser diferentes tamanhos e formas, ao contrário soluções da ala. Consequentemente, esta média, multiuso, abordagem vê uso bem sucedido no campo das ciências biológicas.
Há também três métricas de distância:
Euclidiano (euclidiana ou L2): Como se vê na K-means
Manhattan (manhattan ou l1): Semelhante a euclidiana, mas a distância é calculada pela soma do valor absoluto da diferença entre as dimensões. Em um mapa, se a distância euclidiana é o caminho mais curto entre dois pontos, a distância Manhattan implica movendo em linha reta, primeiro ao longo de um eixo e, em seguida, ao longo do outro - como um carro na cidade seria, chegar a um destino dirigindo ao longo blocos da cidade.
Co-seno (co-seno): Uma boa escolha quando há muitas variáveis e você se preocupa que algumas variáveis podem não ser significativo. Cosine distância reduz o ruído, tomando a forma das variáveis, mais do que os seus valores, em conta. Ele tende a associar observações que têm as mesmas variáveis máximas e mínimas, independentemente do seu valor efectivo.
Se o seu conjunto de dados não contém muitas observações, vale a pena tentar agrupamento aglomerativo com todas as combinações de ligação e distância e, em seguida, comparando os resultados com cuidado. No clustering, você raramente já sabe as respostas certas, e agglomerative agrupamento pode fornecê-lo com outra solução potencial útil. Por exemplo, você pode recriar a análise anterior com K-means e dígitos escritos à mão, utilizando a ligação ala e a distância euclidiana como segue:
de sklearn.cluster importação AgglomerativeClustering # Affinity = { “euclidiana”, “L1”, “L2”, “Manhattan”, # “cosseno”} # Linkage = { “ala”, “completo”, “médio”} Hclustering = AgglomerativeClustering (n_clusters = 10, afinidade = `euclidiano`, ligação = `ala`) Hclustering.fit (Cx) MS = np.column_stack ((ground_truth, Hclustering.labels _)) df = pd.DataFrame (ms, colunas = [ `terra verdade`, `Clusters`]) pd.crosstab (DF [ `ground truth`], DF [ `Clusters`], margens = True)
Os resultados, neste caso, são comparáveis a K-meios, embora, você pode ter notado que a conclusão da análise usando essa abordagem leva mais tempo do que usando K-means. Quando se trabalha com um grande número de observações, as computações para uma solução de cluster hierárquica pode levar horas para completar, tornando esta solução menos viável. Você pode obter em torno da questão de tempo usando o agrupamento de duas fases, o que é mais rápido e oferece uma solução hierárquica, mesmo quando você está trabalhando com grandes conjuntos de dados.
Para implementar a solução de agrupamento de duas fases, de processar as observações originais utilizando K-means com um grande número de agregados. Uma boa regra de ouro é para tirar a raiz quadrada do número de observações e usar esse número, mas você sempre tem que manter o número de grupos na faixa de 100-200 para a segunda fase, com base no agrupamento hierárquico, a trabalhar bem. O exemplo que se segue utiliza 100 aglomerados.
de importação sklearn.cluster k-means = kmeans (n_clusters = 100, n_init = 10, random_state = 1) clustering.fit (Cx)
Neste ponto, a parte difícil é manter o controle do que caso tenha sido atribuído a que agrupamento derivado de K-means. Você pode usar um dicionário para tal finalidade.
Kx = clustering.cluster_centers_Kx_mapping = {caso: Conjunto para o caso, em conjunto enumerar (clustering.labels_)}
O novo conjunto de dados é Kx, que é constituído pelo cluster Centróides que o K-means descobriu. Você pode pensar em cada cluster como um resumo bem representado dos dados originais. Se você agrupar o resumo agora, será quase o mesmo que o agrupamento dos dados originais.
de importação sklearn.cluster AgglomerativeClusteringHclustering = AgglomerativeClustering (n_clusters = 10, afinidade = ‘cosseno’, ligação = ‘completo’) Hclustering.fit (Kx)
Agora você mapear os resultados para os centróides que você usou originalmente para que você pode facilmente determinar se um cluster hierárquica é feito de certos centroids K-meios. O resultado consiste nas observações que compõem os aglomerados K-significa ter essas centroides.
H_mapping = {caso: Conjunto para o caso, em conjunto enumerar (Hclustering.labels _)} = {final_mapping caso: H_mapping [Kx_mapping [caso]] para o caso em Kx_mapping}
Agora você pode avaliar a solução que você obtido usando uma matriz de confusão semelhante como você fez antes, tanto para K-means e agrupamento hierárquico.
ms = np.column_stack ((ground_truth, [final_mapping [n] para n na faixa de (max (final_mapping) 1)])) df = pd.DataFrame (ms, colunas = [ `verdade terrestre`, `clusters`]) pd.crosstab (df [ `ground truth`], df [ `Clusters`], as margens = true)
O resultado mostra que esta abordagem é um método viável para o tratamento de grandes volumes de dados ou bases de dados de dados, mesmo grandes, reduzindo-os a um representações mais pequenos e, em seguida, a operar com agrupamento menos escalável, mas as técnicas mais variadas e precisos.