Riepilogo
In questo post, confrontiamo l'esecuzione di un albero decisionale in Python rispetto a JMP e dimostriamo come creare un albero decisionale personalizzato in JMP applicando criteri matematici per determinare su quale parametro ogni ramo dovrebbe essere suddiviso. Questo livello di personalizzazione non è disponibile in Python, rendendo JMP essenziale per la creazione di modelli robusti in cui i parametri di suddivisione non sono lasciati al caso. Inoltre, questa personalizzazione ti consente di sfruttare la tua competenza in materia per giustificare la selezione del parametro di suddivisione in ogni ramo, soprattutto quando più candidati mostrano una capacità simile di suddividere i dati in modo efficace.
Questo esempio utilizza il set di dati Wine, un esempio di classificazione comunemente disponibile nella libreria Scikit-learn. Contiene i risultati di un'analisi chimica di vini coltivati nella stessa regione in Italia ma derivati da tre diverse cultivar (tipi di uva): etichettati 0, 1 e 2. Nel set di dati, sono state eseguite 13 tecniche di caratterizzazione chimica su ciascun campione, tra cui la quantità di flavonoidi (un tipo di fenolo), l'intensità del colore del vino, il contenuto di ceneri, la tonalità, il contenuto di alcol, ecc.
L'obiettivo? Creare un modello di classificazione ad albero decisionale per identificare la fonte del vino con il minor numero possibile di test di caratterizzazione, il più economici possibile.
Utilizzo di Python
Per prima cosa, vediamo cosa otteniamo quando creiamo un modello di albero decisionale in Python. (Lo script è allegato a questo post.) Il modello risultante può essere rappresentato graficamente con matplot lib, come mostrato di seguito. Il primo modello classifica in base a intensità di colore, prolina, contenuto di ceneri, flavonoidi e contenuto di alcol.

A meno che il seed casuale non sia impostato su un certo valore, l'albero apparirà diverso a ogni nuova esecuzione, come mostrato di seguito. Sebbene ciò sia previsto, non è pratico, poiché potresti voler scegliere il miglior set di test di caratterizzazione che siano rapidi e/o economici da eseguire. In questo esempio, non c'è modo di controllare la feature in cui si verifica la divisione o a quale valore.
|
Stato casuale = 2
|
Stato casuale = 14
|
Stato casuale = 24
|
|
|
|
|
Test necessari: intensità del colore, prolina, contenuto di alcol, flavonoidi
|
Test necessari: intensità del colore, prolina, cenere, alcalinità della cenere, acido malico, contenuto di alcol, flavonoidi
|
Test necessari: intensità del colore, prolina, od280/od315, flavonoidi, alcalinità delle ceneri
|
Utilizzo di JMP
Vediamo se JMP riesce a fare un lavoro migliore nella selezione dei test di caratterizzazione.
Quando si esegue la piattaforma Decision Tree in JMP, andare su Analyze > Predictive Modeling > Partition. Impostare Validation Portion su 0.3 e selezionare Informative Missing e Ordinal Restricts Order.

Il report apparirà più o meno così. Fai clic su Vai.

Facendo clic su Vai viene prodotto questo albero decisionale:

Come in Python, ripetendo l'analisi si crea un'altra struttura per l'albero decisionale.
Quindi, cosa si può fare per creare un modello meno randomizzato che si basi su alcune preferenze sui metodi di caratterizzazione utilizzati? Ignoreremo le suddivisioni e sceglieremo noi stessi i parametri.
Per prima cosa, clicchiamo sul pulsante Prune. Cliccando su Prune, puoi fare un passo indietro e rimuovere un ramo alla volta. Poi, clicca sull'elenco Candidates e ordina le feature in base al loro G^2 o Logworth Splitting Criterion, che ti consente di analizzare quali parametri sono in cima all'elenco.
Di seguito puoi vedere i diversi candidati per la suddivisione, con i flavonoidi in cima alla lista, seguiti da od280/od315, fenoli totali e prolina.

Il valore G^2 ci dice che il modello sceglierà il flavonoide come criterio di suddivisione. Se clicchi su Split, la suddivisione del ramo avverrà utilizzando il valore dei flavonoidi di 1,41.
Quindi, espandi l'elenco Candidates sotto flavonoids < 1.41. L'intensità del colore è ora in cima all'elenco. Tuttavia, forse è più facile misurare la tonalità rispetto all'intensità del colore; in tal caso, fai clic sul triangolo rosso e fai clic su Split Specific. Puoi quindi scegliere il parametro per la divisione, in questo caso la tonalità, e fare clic su OK.

Il nuovo albero, che si trova sotto, indica che se il livello di flavonoidi è inferiore a 1,41 e la tonalità è inferiore a 0,906, c'è una probabilità dello 0,98 che il vino sia fatto dalla cultivar n. 2. D'altra parte, quando la tonalità è superiore a 0,906, è molto probabile che provenga dall'uva di tipo 1. Quando il livello di flavonoidi è superiore a 1,41, c'è una probabilità quasi del 50-50 che la cultivar sia 0 o 1. Quindi, continuiamo la divisione lì.

Sotto flavonoidi >=1,41, guarda i candidati e i loro livelli di G^2. Alcol e prolina hanno un valore G^2 simile. Poiché è più facile testare l'alcol, fai la divisione in alcol. Rivela che c'è una probabilità del 91% che il vino provenga dall'uva di tipo 0 se il contenuto di alcol è superiore a 13,5.

Il modello di albero decisionale finale creato è riportato di seguito. Ora abbiamo bisogno di meno test di caratterizzazione per identificare il tipo di uva e i test scelti sono più facili da eseguire senza adottare un approccio black box per la scelta di questi parametri. Le regole decisionali possono quindi essere facilmente salvate e condivise con altri.
