Esiste un algoritmo simile a un albero decisionale per il clustering senza supervisione?


20

Ho un set di dati composto da 5 funzioni: A, B, C, D, E. Sono tutti valori numerici. Invece di fare un clustering basato sulla densità, quello che voglio fare è raggruppare i dati in modo simile ad un albero decisionale.

L'approccio intendo è qualcosa del genere:

L'algoritmo può dividere i dati in cluster iniziali X in base alla caratteristica C, ovvero i cluster X possono avere valori C piccoli, medi C, grandi C e molto grandi ecc. Successivamente, sotto ciascuno dei nodi del cluster X, l'algoritmo si divide ulteriormente i dati in cluster Y in base alla funzione A. L'algoritmo continua fino a quando non vengono utilizzate tutte le funzionalità.

L'algoritmo che ho descritto sopra è come un algoritmo dell'albero delle decisioni. Ma ne ho bisogno per il clustering senza supervisione, anziché per la classificazione supervisionata.

Le mie domande sono le seguenti:

  1. Tali algoritmi esistono già? Qual è il nome corretto per tale algoritmo
  2. Esiste un pacchetto / libreria R / python che ha un'implementazione di questo tipo di algoritmi?

3
But I need it for unsupervised clustering, instead of supervised classificationQuesta frase chiave da sola è troppo breve e non espone chiaramente ciò che vuoi. Sopra di esso hai descritto quello che mi sembra un albero decisionale. Puoi ora dare un passaggio simile sull'algo che vuoi?
ttnphns,

1
@ttnphns Ciao, come sai, l'albero delle decisioni è un metodo controllato. Ogni etichetta caratteristica viene classificata come Class1 o Class2. L'algoritmo determina la soglia per ogni funzione in base alle etichette note. Tuttavia, sto affrontando un problema di clustering. Non conosco le etichette corrette di ogni vettore di feature. Voglio trovare un algoritmo che determini automaticamente la soglia per ogni funzione in modo da costruire un albero. In questo modo, il clustering risultante può essere facilmente interpretato come ad esempio Cluster 1: Alto A-Basso B- Medio C- Alto D - Basso E, Cluster 2 come Basso A - Alto B- Medio C- Medio D - Basso E.
nan

Non ti capisco abbastanza bene. Prendi l' CHAIDalbero, per esempio. Devi scegliere la variabile dipendente. Lascia che sia A. L'algoritmo seleziona tra B, C, D, E la variabile più correlata con A e raggruppa quella variabile (diciamo, il predittore, sia D) in due o più categorie "in modo ottimale" - in modo che la correlazione (tra la variabile categorizzata D e la variabile A è massimizzata. Diciamo, ha lasciato 3 gruppi, D1, D2, D3. Successivamente, la stessa procedura viene ripetuta all'interno di ciascuna categoria (gruppo) di D separatamente e il miglior predittore tra B, C , E è cercato sotto il binning. Ecc. Che cosa non ti soddisfa esattamente qui?
ttnphns,

2
@ttnphns Ho appena trovato questo documento, penso che abbiano fatto quello che intendo. ftp.cse.buffalo.edu/users/azhang/disc/disc01/cd1/out/papers/…
nan

1
@nan hai trovato qualche implementazione di tali alberi? Non forniscono alcun link al codice nell'articolo
Alleo

Risposte:


12

Puoi prendere in considerazione il seguente approccio:

  • Utilizzare qualsiasi algoritmo di clustering adeguato ai dati
  • Supponiamo che il cluster risultante siano classi
  • Addestra un albero decisionale sui cluster

Ciò ti consentirà di provare diversi algoritmi di clustering, ma otterrai un'approssimazione dell'albero decisionale per ciascuno di essi.


1
concordare sul fatto che questo è "appropriato", ma si dovrebbe ovviamente tenere sempre presente che la creazione di un'etichetta da un algoritmo di clustering non è una caratteristica "effettiva" di un'osservazione. A seconda della qualità e del tipo di clustering, la distorsione introdotta esisterà in misura maggiore o minore.
NiuBiBang,

Puoi indicarmi un documento che discute questa strategia?
nCessity

2

Il primo documento che viene in mente è questo: Clustering tramite Decision Tree Construction https://pdfs.semanticscholar.org/8996/148e8f0b34308e2d22f78ff89bf1f038d1d6.pdf

Come un altro menzionato, "gerarchico" (dall'alto verso il basso) e "gerarchico agglomerato" (dal basso verso l'alto) sono entrambe tecniche ben note ideate usando gli alberi per fare il raggruppamento. Scipy ha questo.

Se sei d'accordo con il codice personalizzato perché non conosco nessuna libreria, ci sono due tecniche che posso consigliare. Tieni presente che questi non sono tecnicamente raggruppati a causa della meccanica su cui fanno affidamento. Potresti chiamare questo pseudo clustering.

1) Supervisionato: è in qualche modo simile al documento (vale la pena leggere). Costruisci un singolo modello di albero decisionale per apprendere alcuni obiettivi (decidi cosa ha senso). Il target potrebbe essere una colonna generata casualmente (richiede la ripetizione e la valutazione dell'iterazione migliore, vedere di seguito). Definisci ogni percorso completo dell'albero come un "cluster" poiché i punti che cadono attraverso quella serie di rami sono tecnicamente simili per quanto riguarda il bersaglio. Funziona bene solo su alcuni problemi, ma è efficiente su larga scala. Si finisce con K cluster (vedi sotto).

2) Semisupervised (una specie di non supervisionato, ma supervisionato meccanicamente), usando il n. 1: puoi provare a costruire alberi per prevedere le colonne in un modello da lasciare fuori. cioè se lo schema è [A, B, C], crea 3 modelli [A, B] -> C, [A, C] -> B, [B, C] -> A. Ottieni cluster KN (vedi sotto). N = len (schema). Se alcune di queste funzionalità non sono interessanti o troppo sbilanciate (nel caso di categorie), non utilizzarle come obiettivi.

Riepilogo: il modello selezionerà le funzioni in ordine in base a informazioni o purezza e i cluster saranno basati su poche funzionalità anziché su tutte. Non esiste un concetto di distanza in questi cluster, ma si potrebbe certamente escogitare uno basato sui centri.

Pro: facile da capire e spiegare, allenamento rapido e inferenza, funziona bene con poche funzionalità forti, funziona con categorie. Quando le tue funzionalità sono essenzialmente eterogenee e hai molte funzionalità, non devi passare tutto il tempo a decidere quale utilizzare nella funzione di distanza.

Contro: non standard, deve essere scritto, parzialità ingenua, collinearità con il target causa risultati negativi, avere 1000 caratteristiche ugualmente importanti non funzionerà bene (KMeans con distanza euclidea è meglio qui).

Quanti cluster ottieni? Devi assolutamente limitare il modello DT a non crescere troppo. ad es. impostare campioni minimi per foglia, nodi fogliari massimi (preferito) o profondità massima. Facoltativamente, impostare i vincoli di purezza o entropia. Devi controllare quanti cluster ti hanno dato e valutare se questo metodo è migliore del clustering reale.

Le tecniche e i parametri hanno funzionato bene per te? Qual è stato il migliore? Per scoprirlo, è necessario eseguire la valutazione del cluster: metriche delle prestazioni per valutare l'apprendimento non supervisionato


2

Quello che stai cercando è un algoritmo di clustering divisivo.

Gli algoritmi più comuni sono agglomerati, che raggruppano i dati in modo bottom-up: ogni osservazione inizia quando il suo cluster e i suoi cluster vengono uniti. Il cluster divisivo è dall'alto verso il basso - le osservazioni iniziano in un cluster che viene gradualmente diviso.

Il desiderio di apparire come un albero decisionale limita le scelte poiché la maggior parte degli algoritmi opera su distanze all'interno dello spazio dati completo piuttosto che suddividere una variabile alla volta.

DIANA è l'unico algoritmo di clustering divisivo che conosco e penso che sia strutturato come un albero decisionale. Sarei sorpreso se non ce ne fossero altri là fuori.

È possibile utilizzare un algoritmo di albero decisionale standard se si modifica la regola di divisione in una metrica che non considera una variabile dipendente definita, ma piuttosto utilizza una metrica di bontà del cluster.


0

Un'idea da considerare è supporre di avere k caratteristiche e n punti. Puoi costruire alberi casuali usando la funzione (k-1) e 1 come variabile dipendente. Y. Puoi selezionare un'altezza h dopo la quale avrai i punti dati nelle radici. Puoi prendere il tipo di voto di alberi diversi. Solo un pensiero.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.