Meu conjunto de dados contém vários atributos numéricos e um categórico.
Dizer, NumericAttr1, NumericAttr2, ..., NumericAttrN, CategoricalAttr
,
onde CategoricalAttr
leva um dos três valores possíveis: CategoricalAttrValue1
, CategoricalAttrValue2
ou CategoricalAttrValue3
.
Estou usando a implementação padrão do algoritmo de agrupamento k-means para o Octave https://blog.west.uni-koblenz.de/2012-07-14/a-working-k-means-code-for-octave/ . Funciona apenas com dados numéricos.
Então, minha pergunta: é correto dividir o atributo categórico CategoricalAttr
em três variáveis numéricas (binárias), como IsCategoricalAttrValue1, IsCategoricalAttrValue2, IsCategoricalAttrValue3
?
Respostas:
O algoritmo k-means padrão não é diretamente aplicável aos dados categóricos, por vários motivos. O espaço de amostra para dados categóricos é discreto e não tem uma origem natural. Uma função de distância euclidiana em tal espaço não é realmente significativa. Como alguém disse: "O fato de uma cobra não possuir rodas nem pernas nos permite dizer nada sobre o valor relativo das rodas e pernas". ( daqui )
Há uma variação dos meios k conhecidos como modos k, introduzidos neste artigo por Zhexue Huang, que é adequado para dados categóricos. Observe que as soluções obtidas são sensíveis às condições iniciais, conforme discutido aqui (PDF), por exemplo.
O artigo de Huang (link acima) também possui uma seção sobre "protótipos-k", que se aplica a dados com uma mistura de recursos categóricos e numéricos. Ele usa uma medida de distância que combina a distância de Hamming para recursos categóricos e a distância euclidiana para recursos numéricos.
Uma pesquisa no Google por "combinação de dados categóricos por meio de k" mostra alguns artigos mais recentes sobre vários algoritmos para agrupamentos semelhantes a meios com k com uma mistura de dados categóricos e numéricos. (Ainda não os li, não posso comentar seus méritos.)
Na verdade, o que você sugere (converter atributos categóricos em valores binários e, em seguida, executar k-means como se fossem valores numéricos) é outra abordagem já tentada anteriormente (anteriores aos modos k). (Ver Ralambondrainy, H. 1995. Uma versão conceitual do algoritmo k-means. Pattern Recognition Letters, 16: 1147-1157.) Mas acredito que a abordagem dos modos k é preferida pelas razões indicadas acima.
fonte
Na minha opinião, existem soluções para lidar com dados categóricos em cluster. R vem com uma distância específica para dados categóricos. Essa distância é chamada Gower ( http://www.rdocumentation.org/packages/StatMatch/versions/1.2.0/topics/gower.dist ) e funciona muito bem.
fonte
(Além da excelente resposta de Tim Goodman)
A escolha dos modos k é definitivamente o caminho a seguir para a estabilidade do algoritmo de agrupamento usado.
O algoritmo de agrupamento é livre para escolher qualquer pontuação de métrica / similaridade à distância. Euclidiano é o mais popular. Mas qualquer outra métrica pode ser usada de acordo com a distribuição de dados em cada dimensão / atributo, por exemplo, a métrica de Mahalanobis.
Com relação ao agrupamento misto (numérico e categórico), um bom artigo que pode ajudar é: INCONCO: agrupamento interpretável de objetos numéricos e categóricos
Além do k-means: como o k-means simples da baunilha já foi descartado como uma abordagem apropriada para esse problema, vou me aventurar além da idéia de pensar em agrupar como um problema de ajuste de modelo. Medidas diferentes, como a métrica teórica da informação: a divergência Kullback-Liebler funciona bem ao tentar convergir um modelo paramétrico para a distribuição de dados. (É claro que técnicas paramétricas de agrupamento como o GMM são mais lentas que o Kmeans, portanto, há desvantagens a serem consideradas)
O agrupamento de modos k difusos também parece atraente, pois foram desenvolvidas técnicas de lógica difusa para lidar com algo como dados categóricos. Consulte Cluster difuso de dados categóricos usando centróides difusos para obter mais informações.
Confira também: ROCK: Um algoritmo de cluster robusto para atributos categóricos
fonte
Essa pergunta parece realmente sobre representação, e não tanto sobre agrupamento.
Os dados categóricos são um problema para a maioria dos algoritmos no aprendizado de máquina. Suponha, por exemplo, que você tenha alguma variável categórica chamada "cor" que possa assumir os valores vermelho, azul ou amarelo. Se simplesmente os codificarmos numericamente como 1,2 e 3, respectivamente, nosso algoritmo pensará que vermelho (1) está mais próximo do azul (2) do que amarelo (3). Precisamos usar uma representação que permita ao computador entender que essas coisas são todas igualmente diferentes.
Uma maneira simples é usar o que é chamado de representação quente , e é exatamente o que você pensou que deveria fazer. Em vez de ter uma variável como "cor" que pode assumir três valores, separamos-a em três variáveis. Eles seriam "cor vermelha", "cor azul" e "cor amarela", que só podem assumir o valor 1 ou 0.
Isso aumenta a dimensionalidade do espaço, mas agora você pode usar qualquer algoritmo de cluster que desejar. Às vezes, faz sentido zscore ou embranquecer os dados depois de executar esse processo, mas a sua ideia é definitivamente razoável.
fonte
Você também pode experimentar o algoritmo de cluster de Expectation Maximization. Ele pode trabalhar com dados categóricos e fornecerá uma probabilidade estatística de qual valor categórico (ou valores) um cluster tem maior probabilidade de assumir.
fonte
Depende da sua variável categórica sendo usada. Para variáveis ordinais, como ruim, média e boa, faz sentido usar apenas uma variável e ter valores 0,1,2 e as distâncias fazem sentido aqui (o Avarage está mais próximo do ruim e do bom). No entanto, se não houver ordem, use idealmente uma codificação quente, conforme mencionado acima.
fonte
Você não deve usar o cluster de k-means em um conjunto de dados contendo tipos de dados mistos. Em vez disso, existem vários algoritmos de cluster que podem lidar adequadamente com tipos de dados mistos. Algumas possibilidades incluem o seguinte:
1) Algoritmos baseados em particionamento: protótipos k, Squeezer
2) Algoritmos hierárquicos: ROCK, ligação única, média e completa aglomerativa
3) Algoritmos baseados em densidade: HIERDENC, MULIC, CLIQUE
4) Algoritmos baseados em modelo: SVM clustering, Self mapas de organização
Se você quiser saber mais sobre esses algoritmos, o manuscrito 'Survey of Clustering Algorithms', escrito por Rui Xu, oferece uma introdução abrangente à análise de cluster.
fonte
O objetivo da K-Means é reduzir a variação dentro do cluster e, como calcula os centróides como o ponto médio de um cluster, é necessário usar a distância euclidiana para convergir adequadamente. Portanto, se você quiser usar absolutamente o K-Means, precisará garantir que seus dados funcionem bem com eles.
Representação
O K-Means e o clustering em geral tentam particionar os dados em grupos significativos, garantindo que as instâncias nos mesmos clusters sejam semelhantes entre si. Portanto, você precisa de uma boa maneira de representar seus dados para poder calcular facilmente uma medida de similaridade significativa.
Usar a codificação one-hot em variáveis categóricas é uma boa idéia quando as categorias são equidistantes uma da outra. Por exemplo, se você tiver a cor azul claro, azul escuro e amarelo, o uso da codificação de um ponto quente poderá não fornecer os melhores resultados, pois o azul escuro e o azul claro provavelmente estarão "mais próximos" do que o amarelo.
Caso o valor categórico não seja "equidistante" e possa ser ordenado, você também poderá atribuir às categorias um valor numérico. Por exemplo, criança, adolescente, adulto, poderia ser representada como 0, 1 e 2. Isso faria sentido porque um adolescente está "mais próximo" de ser criança do que um adulto.
K-Medoids
Uma abordagem mais genérica para o K-Means é o K-Medoids. O K-Medoids funciona da mesma forma que o K-Means, mas a principal diferença é que o centróide de cada cluster é definido como o ponto que reduz a soma das distâncias dentro do cluster. A imposição disso permite que você use qualquer medida de distância desejada e, portanto, você pode criar sua própria medida personalizada que levará em conta quais categorias devem ser próximas ou não.
fonte
Se considerarmos um cenário em que a variável categórica não pode ser codificada a quente, a variável categórica tem mais de 200 categorias.
Nesses casos, você pode usar um pacote clustMixType
Ele pode manipular dados mistos (numéricos e categóricos), basta alimentar os dados, segregar automaticamente dados categóricos e numéricos.
Se você encontrar algum problema, como um número numérico, está em categórico, pode-se como.factor () / vice-versa como.numeric (), nesse campo respectivo, convertê-lo em um fator e alimentar esses novos dados no algoritmo.
Calcule lambda, para que você possa alimentar como entrada no momento do armazenamento em cluster.
podemos até obter um WSS (dentro da soma dos quadrados), plotagem (gráfico de cotovelo) para encontrar o número ideal de Clusters.
Espero que esta resposta ajude você a obter resultados mais significativos.
fonte
Muitos dos itens acima apontaram que os meios k podem ser implementados em variáveis que são categóricas e contínuas, o que está errado e os resultados precisam ser tomados com uma pitada de sal.
Como mencionado acima por @Tim acima, não faz sentido calcular a distância euclidiana entre os pontos que não têm escala nem ordem. Quando você codifica as variáveis categóricas diretamente, você gera uma matriz esparsa de 0 e 1. Como o intervalo dos valores é fixo e entre 0 e 1, eles precisam ser normalizados da mesma maneira que as variáveis contínuas. Os escores Z são usados para encontrar a distância entre os pontos. O que ainda não está perfeitamente certo. Vou explicar isso com um exemplo. Como as categorias são mutuamente exclusivas, a distância entre dois pontos em relação às variáveis categóricas assume um dos dois valores, alto ou baixo, ou seja, os dois pontos pertencem à mesma categoria ou não. Devido a esses valores extremos, o algoritmo acaba dando mais peso às variáveis contínuas, influenciando a formação do cluster. Isso pode ser verificado por uma verificação simples, ver quais variáveis estão influenciando e você ficará surpreso ao ver que a maioria delas será variável categórica. (Maneiras de encontrar as variáveis mais influentes [1])
Um exemplo: considere um país variável categórico. Agora, como sabemos, a distância (dissimilaridade) entre observações de diferentes países é igual (assumindo que não há outras semelhanças como países vizinhos ou países do mesmo continente). Mas, ao contrário disso, se você calcular as distâncias entre as observações após normalizar os valores codificados a quente, elas serão inconsistentes (embora a diferença seja menor), juntamente com o fato de que elas assumem valores altos ou baixos.
Por fim, a melhor opção disponível para python são os protótipos-k que podem lidar com variáveis categóricas e contínuas.
[1]: Encontrando variáveis mais influentes na formação de cluster: https://stackoverflow.com/a/53081779/8224401
fonte
Modelos de mistura podem ser usados para agrupar um conjunto de dados composto por variáveis contínuas e categóricas.
Você pode usar o pacote R VarSelLCM (disponível no CRAN) que modela, dentro de cada cluster, as variáveis contínuas pelas distribuições gaussianas e as variáveis ordinais / binárias. Tome cuidado para armazenar seus dados em um data.frame em que variáveis contínuas são "numéricas" e variáveis categóricas são "fator".
Um tutorial está disponível em: http://varsellcm.r-forge.r-project.org/
Além disso, os valores ausentes podem ser gerenciados pelo modelo em questão.
fonte
Me deparei com o mesmo problema e tentei trabalhar com ele (sem saber que existiam protótipos-k) a rica literatura com a qual me encontrei se originou da ideia de não medir as variáveis com a mesma métrica de distância. Além disso, podem existir várias fontes de informação, que podem implicar estruturas diferentes ou "visualizações" dos dados. Esse é um problema natural, sempre que você se deparar com relações sociais como as do twitter / sites etc.
Uma das soluções possíveis é abordar cada subconjunto de variáveis (ou seja, numérico e categórico) separadamente. É facilmente compreensível o que uma medida de distância faz em uma escala numérica. Os dados categóricos por si só podem ser facilmente compreendidos: considere ter vetores de observação binários: A tabela de contingência em 0/1 entre dois vetores de observação contém muitas informações sobre a semelhança entre essas duas observações. Existe uma rica literatura sobre as várias medidas personalizadas de similaridade em vetores binários - a maioria começando na tabela de contingência.
Dadas as matrizes de distância / semelhança, ambas descrevendo as mesmas observações, é possível extrair um gráfico em cada uma delas (Multi-View-Graph-Clustering) ou extrair um único gráfico com várias arestas - cada nó (observação) com tantas arestas para outro nó, pois existem matrizes de informações (clustering multi-borda). Cada aresta recebe o peso da medida de semelhança / distância correspondente. Começa aqui: Listagem de algoritmos de agrupamento de grafos no Github e seus papéis. Como existem vários conjuntos de informações disponíveis em uma única observação, eles devem ser entrelaçados usando, por exemplo, descendentes de análises espectrais ou fatoração matricial ligada. A análise espectral é o método padrão para encontrar partes altamente conectadas ou fortemente ponderadas de gráficos únicos. Tendo uma incorporação espectral dos dados entrelaçados, qualquer algoritmo de agrupamento em dados numéricos pode funcionar facilmente. O padrão da literatura é kmeans por questão de simplicidade, mas muito mais avançado - e não como algoritmos restritivos, que podem ser usados de forma intercambiável nesse contexto.
Gostei da beleza e da generalidade dessa abordagem, pois ela é facilmente extensível a vários conjuntos de informações em vez de meros tipos e aumenta ainda mais o respeito pela "medida" específica em cada subconjunto de dados. Isso não o isenta de ajustar o modelo com várias métricas de distância e semelhança ou de dimensionar suas variáveis (eu me encontrei dimensionando as variáveis numéricas para dimensionar as proporções no contexto da minha análise)
De uma perspectiva de escalabilidade, há principalmente dois problemas:
Divirta-se com isso!
fonte
Você pode querer consultar a engenharia automática de recursos: http://www.orges-leka.de/automatic_feature_engineering.html . O método é baseado na incorporação da Bourgain e pode ser usado para derivar recursos numéricos de quadros de dados categóricos e numéricos mistos ou para qualquer conjunto de dados que suporte distâncias entre dois pontos de dados. Depois de transformar os dados em apenas recursos numéricos, é possível usar o cluster K-means diretamente
fonte