Eu tenho um grande conjunto de dados e uma semelhança de cosseno entre eles. Eu gostaria de agrupá-los usando a semelhança de cosseno que reúne objetos semelhantes sem precisar especificar antecipadamente o número de clusters que eu espero.
Eu li a documentação do sklearn do DBSCAN e da Affinity Propagation, onde ambos exigem uma matriz de distância (não uma matriz de semelhança de cossenos).
Realmente, estou apenas procurando por um algoritmo que não exija a) uma métrica de distância eb) um número pré-especificado de clusters .
Alguém sabe de um algoritmo que faria isso?
fonte
O DBSCAN pode ser implementado trivialmente com uma medida de similaridade em vez de uma distância. Você só precisa alterar o <= epsilon para>> epsilon.
O HAC também funciona bem com semelhanças (pelo menos link único, link completo, UPGMA, WPGMA - não use Ward), se você trocar "min" e "max" (você deseja mesclar com o máximo de semelhança e não o mínimo) distância).
Se você é preguiçoso, também pode transformar sua semelhança à distância. Se você tem um máximo fixo, dist = max-sim geralmente funciona.
fonte
SimilarityNeighborPredicate
.Eu usaria o cluster hierárquico do sklearn
C
é o seu agrupamento de documentosdocs
.Você pode usar outras métricas em vez de
cosine
e usar um limite diferente de0.1
fonte
docs
são os documentos,Z
é a matriz de co-seno similaridadeAcho que o pacote clustMixType pode fornecer melhores resultados / insights.
Ao usar este pacote, você pode usar a combinação de Dados Categóricos e Numéricos diretamente, não precisa de nenhum tipo de codificação quente.
Você só precisa alimentar os dados e eles segregam automaticamente em Dados Categóricos e Numéricos. Se você encontrar algum problema no momento da segregação, poderá usar funções como
as.factor(to convert to a categorical)
eas.numeric(to convert to a Numeric field)
.Você pode calcular
Lambda(mean Distance value)
antes da mão e alimentá-lo como uma entrada para o algoritmo.Se você não sabe o número ideal de clusters, você pode usar
WSS(within Sum of Squares)
,plot(elbow chart)
para decidir o número ideal de clusters.fonte
Todos os métodos de cluster usam uma métrica de distância de algum tipo. E lembre-se de que a distância é essencialmente uma medida de dissimilaridade. Portanto, se você normalizar sua semelhança entre 0 e 1, sua distância é simplesmente uma semelhança
Quanto aos algoritmos que não exigem que um número de clusters sejam especificados, é claro que existem técnicas hierárquicas de clustering, que essencialmente constroem uma árvore como uma estrutura que você pode "cortar" onde quiser (você pode usar algumas métricas de desempenho para fazer isso automaticamente) )
X-means é uma versão do K-means que tenta um certo número de K e escolhe aquele que maximiza alguma função de avaliação.
O deslocamento médio também "encontra" um número natural de clusters, mas é sensível a outros parâmetros, como a largura de banda, por exemplo.
fonte