Scikit Learn - Alberi decisionali
In questo capitolo, impareremo il metodo di apprendimento in Sklearn che viene definito albero decisionale.
Decisions tress (DTs) sono il metodo di apprendimento supervisionato non parametrico più potente. Possono essere utilizzati per le attività di classificazione e regressione. L'obiettivo principale dei DT è creare un modello che preveda il valore della variabile target apprendendo semplici regole decisionali dedotte dalle caratteristiche dei dati. Gli alberi decisionali hanno due entità principali; uno è il nodo radice, dove i dati si dividono, e l'altro è il nodo decisionale o se ne va, dove abbiamo ottenuto l'output finale.
Algoritmi dell'albero decisionale
Di seguito vengono spiegati diversi algoritmi dell'albero decisionale:
ID3
È stato sviluppato da Ross Quinlan nel 1986. È anche chiamato Iterative Dichotomiser 3. L'obiettivo principale di questo algoritmo è trovare quelle caratteristiche categoriali, per ogni nodo, che produrranno il maggior guadagno di informazioni per gli obiettivi categoriali.
Permette di far crescere l'albero fino alla sua dimensione massima e quindi, per migliorare la capacità dell'albero su dati invisibili, applica una fase di potatura. L'output di questo algoritmo sarebbe un albero a più vie.
C4.5
È il successore di ID3 e definisce dinamicamente un attributo discreto che partiziona il valore dell'attributo continuo in un insieme discreto di intervalli. Questo è il motivo per cui ha rimosso la restrizione delle caratteristiche categoriali. Converte l'albero addestrato ID3 in set di regole "IF-THEN".
Al fine di determinare la sequenza in cui queste regole dovrebbero essere applicate, l'accuratezza di ciascuna regola verrà valutata per prima.
C5.0
Funziona in modo simile a C4.5 ma utilizza meno memoria e crea regole più piccole. È più preciso di C4.5.
CARRELLO
Si chiama algoritmo di classificazione e regressione degli alberi. Fondamentalmente genera suddivisioni binarie utilizzando le caratteristiche e la soglia che producono il maggior guadagno di informazioni su ciascun nodo (chiamato indice di Gini).
L'omogeneità dipende dall'indice di Gini, maggiore è il valore dell'indice di Gini, maggiore sarebbe l'omogeneità. È come l'algoritmo C4.5, ma la differenza è che non calcola set di regole e non supporta anche variabili target numeriche (regressione).
Classificazione con alberi decisionali
In questo caso, le variabili decisionali sono categoriali.
Sklearn Module - La libreria Scikit-learn fornisce il nome del modulo DecisionTreeClassifier per eseguire la classificazione multiclasse sul set di dati.
Parametri
La tabella seguente è costituita dai parametri utilizzati da sklearn.tree.DecisionTreeClassifier modulo -
Suor n | Parametro e descrizione |
---|---|
1 | criterion - stringa, valore predefinito opzionale = "gini" Rappresenta la funzione per misurare la qualità di uno split. I criteri supportati sono "gini" e "entropia". L'impostazione predefinita è gini che è per l'impurità di Gini mentre l'entropia è per il guadagno di informazioni. |
2 | splitter - stringa, impostazione predefinita opzionale = "migliore" Indica al modello quale strategia tra "migliore" o "casuale" scegliere la divisione in ciascun nodo. |
3 | max_depth - int o None, valore predefinito opzionale = None Questo parametro decide la profondità massima dell'albero. Il valore predefinito è Nessuno, il che significa che i nodi si espandono fino a quando tutte le foglie sono pure o finché tutte le foglie non contengono meno di min_smaples_split campioni. |
4 | min_samples_split - int, float, predefinito opzionale = 2 Questo parametro fornisce il numero minimo di campioni necessari per dividere un nodo interno. |
5 | min_samples_leaf - int, float, predefinito opzionale = 1 Questo parametro fornisce il numero minimo di campioni necessari per trovarsi in un nodo foglia. |
6 | min_weight_fraction_leaf - float, impostazione predefinita opzionale = 0. Con questo parametro, il modello otterrà la frazione ponderata minima della somma dei pesi richiesti per essere in un nodo foglia. |
7 | max_features - int, float, string o None, valore predefinito opzionale = None Assegna al modello il numero di caratteristiche da considerare quando si cerca la divisione migliore. |
8 | random_state - int, istanza RandomState o None, opzionale, default = nessuno Questo parametro rappresenta il seme del numero pseudo casuale generato che viene utilizzato durante la mescolanza dei dati. Le seguenti sono le opzioni:
|
9 | max_leaf_nodes - int o None, valore predefinito opzionale = None Questo parametro farà crescere un albero con max_leaf_nodes nel modo migliore per primo. L'impostazione predefinita è nessuno, il che significa che ci sarebbe un numero illimitato di nodi foglia. |
10 | min_impurity_decrease - float, impostazione predefinita opzionale = 0. Questo valore funziona come criterio per la divisione di un nodo perché il modello dividerà un nodo se questa divisione induce una diminuzione dell'impurità maggiore o uguale a min_impurity_decrease value. |
11 | min_impurity_split - float, predefinito = 1e-7 Rappresenta la soglia per l'arresto anticipato della crescita degli alberi. |
12 | class_weight - dict, elenco di dict, "bilanciato" o Nessuno, impostazione predefinita = Nessuno Rappresenta i pesi associati alle classi. La forma è {class_label: weight}. Se usiamo l'opzione predefinita, significa che tutte le classi dovrebbero avere un peso. D'altra parte, se scegliclass_weight: balanced, utilizzerà i valori di y per regolare automaticamente i pesi. |
13 | presort - bool, valore predefinito opzionale = False Indica al modello se presortare i dati per accelerare la ricerca delle migliori suddivisioni nell'adattamento. L'impostazione predefinita è false ma, se impostata su true, potrebbe rallentare il processo di addestramento. |
Attributi
La tabella seguente è costituita dagli attributi utilizzati da sklearn.tree.DecisionTreeClassifier modulo -
Suor n | Parametro e descrizione |
---|---|
1 | feature_importances_ - matrice di forma = [n_features] Questo attributo restituirà l'importanza della caratteristica. |
2 | classes_: - array di shape = [n_classes] o un elenco di tali array Rappresenta le etichette delle classi, ovvero il problema dell'uscita singola, o un elenco di array di etichette delle classi, ovvero il problema dell'uscita multipla. |
3 | max_features_ - int Rappresenta il valore dedotto del parametro max_features. |
4 | n_classes_ - int o elenco Rappresenta il numero di classi, ovvero il problema con un singolo output, o un elenco di numero di classi per ogni output, ovvero il problema con più output. |
5 | n_features_ - int Fornisce il numero di features quando viene eseguito il metodo fit (). |
6 | n_outputs_ - int Fornisce il numero di outputs quando viene eseguito il metodo fit (). |
Metodi
La tabella seguente comprende i metodi utilizzati da sklearn.tree.DecisionTreeClassifier modulo -
Suor n | Parametro e descrizione |
---|---|
1 | apply(self, X [, check_input]) Questo metodo restituirà l'indice della foglia. |
2 | decision_path(self, X [, check_input]) Come suggerisce il nome, questo metodo restituirà il percorso decisionale nell'albero |
3 | fit(self, X, y [, sample_weight, ...]) Il metodo fit () costruirà un classificatore dell'albero decisionale da un dato set di addestramento (X, y). |
4 | get_depth(se stesso) Come suggerisce il nome, questo metodo restituirà la profondità dell'albero decisionale |
5 | get_n_leaves(se stesso) Come suggerisce il nome, questo metodo restituirà il numero di foglie dell'albero decisionale. |
6 | get_params(self [, deep]) Possiamo usare questo metodo per ottenere i parametri per lo stimatore. |
7 | predict(self, X [, check_input]) Prevede il valore della classe per X. |
8 | predict_log_proba(sé, X) Prevede le probabilità logaritmiche di classe dei campioni di input forniti da noi, X. |
9 | predict_proba(self, X [, check_input]) Prevede le probabilità di classe dei campioni di input forniti da noi, X. |
10 | score(self, X, y [, sample_weight]) Come suggerisce il nome, il metodo score () restituirà la precisione media sui dati e le etichette del test forniti. |
11 | set_params(self, \ * \ * params) Possiamo impostare i parametri dello stimatore con questo metodo. |
Esempio di implementazione
Lo script Python di seguito utilizzerà sklearn.tree.DecisionTreeClassifier modulo per costruire un classificatore per prevedere maschi o femmine dal nostro set di dati con 25 campioni e due caratteristiche, ovvero 'altezza' e 'lunghezza dei capelli' -
from sklearn import tree
from sklearn.model_selection import train_test_split
X=[[165,19],[175,32],[136,35],[174,65],[141,28],[176,15]
,[131,32],[166,6],[128,32],[179,10],[136,34],[186,2],[12
6,25],[176,28],[112,38],[169,9],[171,36],[116,25],[196,2
5], [196,38], [126,40], [197,20], [150,25], [140,32],[136,35]]
Y=['Man','Woman','Woman','Man','Woman','Man','Woman','Ma
n','Woman','Man','Woman','Man','Woman','Woman','Woman','
Man','Woman','Woman','Man', 'Woman', 'Woman', 'Man', 'Man', 'Woman', 'Woman']
data_feature_names = ['height','length of hair']
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.3, random_state = 1)
DTclf = tree.DecisionTreeClassifier()
DTclf = clf.fit(X,Y)
prediction = DTclf.predict([[135,29]])
print(prediction)
Produzione
['Woman']
Possiamo anche prevedere la probabilità di ciascuna classe utilizzando il seguente metodo python prediction_proba () come segue:
Esempio
prediction = DTclf.predict_proba([[135,29]])
print(prediction)
Produzione
[[0. 1.]]
Regressione con alberi decisionali
In questo caso le variabili decisionali sono continue.
Sklearn Module - La libreria Scikit-learn fornisce il nome del modulo DecisionTreeRegressor per applicare alberi decisionali su problemi di regressione.
Parametri
Parametri utilizzati da DecisionTreeRegressor sono quasi uguali a quelli usati in DecisionTreeClassifiermodulo. La differenza sta nel parametro "criterio". PerDecisionTreeRegressor moduli ‘criterion: string, il parametro optional default = "mse" "ha i seguenti valori:
mse- Sta per errore quadratico medio. È uguale alla riduzione della varianza come criterio di selezione delle caratteristiche. Riduce al minimo la perdita di L2 utilizzando la media di ciascun nodo terminale.
freidman_mse - Utilizza anche l'errore quadratico medio ma con il punteggio di miglioramento di Friedman.
mae- Sta per l'errore medio assoluto. Riduce al minimo la perdita di L1 utilizzando la mediana di ciascun nodo terminale.
Un'altra differenza è che non ha ‘class_weight’ parametro.
Attributi
Attributi di DecisionTreeRegressor sono uguali a quelle di DecisionTreeClassifiermodulo. La differenza è che non ce l'ha‘classes_’ e ‘n_classes_attributi.
Metodi
Metodi di DecisionTreeRegressor sono uguali a quelle di DecisionTreeClassifiermodulo. La differenza è che non ce l'ha‘predict_log_proba()’ e ‘predict_proba()’attributi.
Esempio di implementazione
Il metodo fit () nel modello di regressione dell'albero decisionale assumerà valori in virgola mobile di y. vediamo un semplice esempio di implementazione utilizzandoSklearn.tree.DecisionTreeRegressor -
from sklearn import tree
X = [[1, 1], [5, 5]]
y = [0.1, 1.5]
DTreg = tree.DecisionTreeRegressor()
DTreg = clf.fit(X, y)
Una volta adattato, possiamo usare questo modello di regressione per fare previsioni come segue:
DTreg.predict([[4, 5]])
Produzione
array([1.5])