Existe um algoritmo semelhante a uma árvore de decisão para cluster não supervisionado?


20

Eu tenho um conjunto de dados composto por 5 recursos: A, B, C, D, E. Eles são todos valores numéricos. Em vez de fazer um cluster baseado em densidade, o que eu quero fazer é agrupar os dados de maneira semelhante a uma árvore de decisão.

A abordagem que quero dizer é algo como isto:

O algoritmo pode dividir os dados em X clusters iniciais com base no recurso C, ou seja, os clusters X podem ter valores C pequenos, médios C, grandes C e C muito grandes etc. Em seguida, em cada um dos nós do cluster X, o algoritmo divide os dados em clusters Y com base no recurso A. O algoritmo continua até que todos os recursos sejam utilizados.

O algoritmo que descrevi acima é como um algoritmo de árvore de decisão. Mas preciso dele para agrupamentos não supervisionados, em vez de classificação supervisionada.

Minhas perguntas são as seguintes:

  1. Esses algoritmos já existem? Qual é o nome correto para esse algoritmo
  2. Existe um pacote / biblioteca R / python que possui uma implementação desse tipo de algoritmo?

3
But I need it for unsupervised clustering, instead of supervised classificationEsta frase-chave por si só é muito breve e não expõe claramente o que você deseja. Acima, você descreveu o que me parece ser uma árvore de decisão. Agora você pode dar uma passagem semelhante sobre o algo que deseja?
ttnphns

1
Oi, como você sabe, a árvore de decisão é um método supervisionado. Você rotula cada vetor de recurso como Class1 ou Class2. O algoritmo determina o limite para cada recurso com base nos rótulos conhecidos. No entanto, estou enfrentando um problema de agrupamento. Não sei os rótulos corretos de cada vetor de recurso. Eu quero encontrar um algoritmo que determine automaticamente o limite para cada recurso, a fim de construir uma árvore. Dessa forma, o agrupamento resultante pode ser facilmente interpretado como, por exemplo, Cluster 1: Alto A-Baixo B - Médio C - Alto D - Baixo E, Cluster 2 como Baixo A - Alto B - Médio C - Médio D - Baixo E.
nan

Não entendo muito bem você. Veja a CHAIDárvore, por exemplo. Você deve escolher a variável dependente. Seja A. O algoritmo seleciona entre B, C, D, E a variável mais correlacionada com A e indica essa variável (digamos, o preditor, D) em duas ou mais categorias "idealmente" - para que a correlação (entre a variável categorizada D e a variável A é maximizada. Digamos, deixaram 3 grupos, D1, D2, D3. Em seguida, o mesmo procedimento é repetido dentro de cada categoria (grupo) de D separadamente e o melhor preditor entre B, C , E. é procurado sob uma lista. Etc. O que exatamente não combina com você aqui?
ttnphns

2
@ttnphns Acabei de encontrar este artigo, acho que eles fizeram o que quero dizer. ftp.cse.buffalo.edu/users/azhang/disc/disc01/cd1/out/papers/…
nan

1
@nan você encontrou alguma implementação dessas árvores? Eles não fornecem nenhum link para código no artigo
Alleo

Respostas:


12

Você pode considerar a seguinte abordagem:

  • Use qualquer algoritmo de cluster adequado para seus dados
  • Suponha que o cluster resultante seja classes
  • Treinar uma árvore de decisão nos clusters

Isso permitirá que você tente algoritmos diferentes de armazenamento em cluster, mas obterá uma aproximação da árvore de decisão para cada um deles.


1
concorda que isso é "apropriado", mas é claro, é preciso sempre ter em mente que criar um rótulo a partir de um algoritmo de agrupamento não é um recurso "real" de uma observação. Dependendo da qualidade e tipo do cluster, o viés introduzido existirá em maior ou menor grau.
NiuBiBang

Você pode me indicar um artigo que discuta essa estratégia?
nCessity 03/07

2

O primeiro artigo que vem à mente é o seguinte: Clustering via Decision Tree Construction https://pdfs.semanticscholar.org/8996/148e8f0b34308e2d22f78ff89bf1f038d1d6.pdf

Como outro mencionado, "hierárquica" (de cima para baixo) e "aglomeração hierárquica" (de baixo para cima) são técnicas bem conhecidas, criadas usando árvores para fazer agrupamentos. Scipy tem isso.

Se você concorda com o código personalizado porque não conheço nenhuma biblioteca, há duas técnicas que posso recomendar. Esteja avisado de que eles não estão tecnicamente agrupados devido à mecânica em que eles confiam. Você pode chamar isso de pseudo clustering.

1) Supervisionado: É um pouco semelhante ao artigo (vale a pena ler). Crie um modelo único de árvore de decisão para aprender algum objetivo (você decide o que faz sentido). O destino pode ser uma coluna gerada aleatoriamente (requer repetição e avaliação da melhor iteração, veja abaixo). Defina cada caminho completo da árvore como um "cluster", pois os pontos que passam por essa série de ramificações são tecnicamente semelhantes em relação ao destino. Isso só funciona bem em alguns problemas, mas é eficiente em larga escala. Você acaba com K clusters (veja abaixo).

2) Semisupervisionado (meio sem supervisão, mas supervisionado mecanicamente), usando o número 1: você pode tentar construir árvores para prever colunas em um padrão de exclusão. ou seja, se o esquema for [A, B, C], construa 3 modelos [A, B] -> C, [A, C] -> B, [B, C] -> A. Você recebe clusters KN (veja abaixo). N = len (esquema). Se alguns desses recursos não forem interessantes ou desequilibrados (no caso de categorias), não os use como destinos.

Resumo: O modelo selecionará os recursos em ordem, com base em informações ou pureza, e os clusters serão baseados em apenas alguns recursos, e não todos. Não há conceito de distância nesses aglomerados, mas você certamente poderia conceber um com base nos centros.

Prós: fácil de entender e explicar, treinamento rápido e inferência, funciona bem com poucos recursos fortes, funciona com categorias. Quando seus recursos são essencialmente heterogêneos e você tem muitos recursos, não precisa gastar tanto tempo decidindo qual usar na função de distância.

Contras: não padrão, deve ser escrito, viés ingênuo, colinearidade com o alvo causa maus resultados, pois 1000 recursos igualmente importantes não funcionarão bem (o KMeans com distância euclidiana é melhor aqui).

Quantos clusters você recebe? Você deve, absolutamente, restringir o modelo DT para não crescer muito. Por exemplo, defina amostras mínimas por folha, nós máximos de folhas (preferencial) ou profundidade máxima. Opcionalmente, defina restrições de pureza ou entropia. Você deve verificar quantos clusters isso forneceu e avaliar se esse método é melhor que o cluster real.

As técnicas e parâmetros funcionaram bem para você? Qual foi o melhor? Para descobrir, você precisa fazer a avaliação de cluster: Métricas de desempenho para avaliar o aprendizado não supervisionado


2

O que você está procurando é um algoritmo de cluster de divisão.

Os algoritmos mais comuns são aglomerativos, que agrupam os dados de maneira ascendente - cada observação é iniciada à medida que seu próprio cluster e os clusters são mesclados. O agrupamento de divisão é de cima para baixo - as observações começam em um agrupamento que é gradualmente dividido.

O desejo de parecer uma árvore de decisão limita as opções, pois a maioria dos algoritmos opera em distâncias dentro do espaço de dados completo, em vez de dividir uma variável por vez.

O DIANA é o único algoritmo de cluster divisivo que conheço e acho que está estruturado como uma árvore de decisão. Eu ficaria surpreso se não houvesse outros por aí.

Você pode usar um algoritmo de árvore de decisão padrão se modificar a regra de divisão para uma métrica que não considera uma variável dependente definida, mas usa uma métrica de qualidade do cluster.


0

Uma idéia a considerar é supor que você tenha recursos k e n pontos. Você pode construir árvores aleatórias usando o recurso (k-1) e 1 como uma variável dependente. Y. Você pode selecionar uma altura h após a qual você terá pontos de dados nas raízes. Você pode tomar o tipo de votação de diferentes árvores. Apenas um pensamento.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.