Δέντρο απόφασης στο R: Δέντρο ταξινόμησης με παράδειγμα

⚡ Έξυπνη Σύνοψη

Τα Δέντρα Αποφάσεων στο R διαιρούν τα δεδομένα σε κλάδους χρησιμοποιώντας απλούς κανόνες ναι ή όχι, μέχρι κάθε φύλλο να έχει μια κυρίαρχη κλάση. Αυτή η αναλυτική παρουσίαση δημιουργεί, σχεδιάζει, αξιολογεί και συντονίζει ένα δέντρο ταξινόμησης rpart στο σύνολο δεδομένων επιβίωσης του Τιτανικού.

  • 🌳 Βασικός Ορισμός: Ένα δέντρο διαμερίζει αναδρομικά τον χώρο των προγνωστικών, επιλέγοντας σε κάθε κόμβο τη διαίρεση που μειώνει περισσότερο την ακαθαρσία της κλάσης.
  • 🔄 Προετοιμασία δεδομένων: Ανακατέψτε το ταξινομημένο αρχείο Titanic με sample(), αφαιρέστε τις στήλες αναγνωριστικού, μετατρέψτε τους συντελεστές και, στη συνέχεια, αφαιρέστε τις γραμμές NA.
  • Σύνταξη μοντέλου: Καλέστε την εντολή rpart(survived~., data = data_train, method = 'class') και εμφανίστε το αποτέλεσμα με την εντολή rpart.plot(fit, extra = 106).
  • ⚙️ βραχυχρόνιων διακυμάνσεων της ρευστότητας: Η συνάρτηση rpart.control() εκθέτει τα minsplit, minbucket, maxdepth και cp, με ακρίβεια ανύψωσης 79.90%.
  • 📊 Εκτίμηση: Δημιουργήστε έναν πίνακα σύγχυσης με την table() και, στη συνέχεια, διαιρέστε τη διαγώνιο με το σύνολο για ακρίβεια δοκιμής 78.47%.

Δέντρο απόφασης στο R

Τι είναι τα Δέντρα Απόφασης;

Αποφάσεις δέντρων είναι ένας ευέλικτος αλγόριθμος Μηχανικής Μάθησης που μπορεί να εκτελέσει εργασίες ταξινόμησης και παλινδρόμησης. Είναι πολύ ισχυροί αλγόριθμοι, ικανοί να προσαρμόσουν σύνθετα σύνολα δεδομένων. Επιπλέον, τα δέντρα αποφάσεων είναι θεμελιώδη συστατικά των τυχαίων δασών, τα οποία συγκαταλέγονται στους πιο ισχυρούς αλγόριθμους Μηχανικής Μάθησης που διατίθενται σήμερα.

Πριν από την κατασκευή ενός δέντρου σε κώδικα, είναι χρήσιμο να γνωρίζουμε πώς ένα δέντρο αποφασίζει πού θα χωριστεί.

Πώς λειτουργεί ένα Δέντρο Αποφάσεων;

Ένα δέντρο αποφάσεων μετατρέπει ένα σύνολο δεδομένων σε ένα διάγραμμα ροής με ερωτήσεις ναι ή όχι, το οποίο αποτελείται από τρία είδη κόμβων: ρίζα διατηρεί κάθε παρατήρηση εκπαίδευσης, μια εσωτερικός κόμβος θέτει μια ερώτηση σχετικά με έναν προγνωστικό παράγοντα και χωρίζει τα δεδομένα σε δύο, και ένα φύλλο σταματάει τη διαίρεση και επιστρέφει την κλάση πλειοψηφίας.

Η ανάπτυξη ακολουθεί μια άπληστη διαδικασία που ονομάζεται αναδρομική δυαδική διαμέριση:

  1. Αξιολογήστε κάθε υποψήφια ομάδα. Για κάθε προγνωστικό παράγοντα και σημείο αποκοπής, μετρήστε πόσο ακάθαρτες θα είναι οι δύο ομάδες που προκύπτουν.
  2. Κράτα το καλύτερο. Η διάσπαση που μειώνει περισσότερο την ακαθαρσία γίνεται το ερώτημα που τίθεται σε αυτόν τον κόμβο.
  3. Επαναλάβετε σε κάθε παιδί μέχρι να το σταματήσει ένας κανόνας ελέγχου: minsplit, minbucket, maxdepth ή cp.
  4. Κλαδεύω. Στη συνέχεια, το cp κλαδεύει τα κλαδιά που δεν αποδίδουν τον εαυτό τους, γεγονός που εμποδίζει το δέντρο να απομνημονεύσει το σύνολο εκπαίδευσης.

Επειδή κάθε ερώτηση συγκρίνει μια μεταβλητή με ένα όριο, ο αλγόριθμος δεν χρειάζεται ποτέ κλιμάκωση ή εικονική κωδικοποίηση.

Δείκτης Gini έναντι Εντροπίας σε Δέντρα Αποφάσεων

Αυτή η πρόσμειξη μπορεί να μετρηθεί με δύο τρόπους και το rpart σας επιτρέπει να επιλέξετε.

Κριτήρια Δείκτης Gini Εντροπία (Κέρδος Πληροφοριών)
Τύπος 1 – άθροισμα των τετραγώνων των αναλογιών των κλάσεων -άθροισμα του p επί log2(p)
Εύρος (δύο κλάσεις) από 0 έως 0.5 από 0 έως 1
Υπολογισμός Ταχύτερα, χωρίς λογάριθμο Πιο αργό, χρησιμοποιεί λογάριθμους
ρύθμιση rpart Προεπιλογή parms = λίστα(split = “πληροφορίες”)
fit_entropy <- rpart(survived~., data = data_train, method = 'class',
    parms = list(split = "information"))

Στην πράξη, και τα δύο κριτήρια επιλέγουν την ίδια διαίρεση τις περισσότερες φορές, επομένως ο προεπιλεγμένος δείκτης Gini είναι μια ασφαλής επιλογή.

Πλεονεκτήματα και μειονεκτήματα των δέντρων αποφάσεων

Οι συμβιβασμοί σας λένε πότε ένα μόνο δέντρο είναι αρκετό και πότε να μετακινηθείτε σε ένα σύνολο.

Πλεονεκτήματα

  • Πλήρως ερμηνεύσιμο: Το προσαρμοσμένο μοντέλο είναι ένα διάγραμμα που μπορεί να διαβάσει οποιοσδήποτε ενδιαφερόμενος.
  • Ελάχιστη προεπεξεργασία: Δεν απαιτείται κλιμάκωση ή κανονικοποίηση και οι παράγοντες λειτουργούν εγγενώς.
  • Χειρίζεται και τις δύο εργασίες: Η method = 'class' ταιριάζει σε έναν ταξινομητή και η method = 'anova' ταιριάζει σε ένα δέντρο παλινδρόμησης.
  • Γρήγορη προπόνηση: Τα μεγάλα σύνολα δεδομένων χωράνε σε δευτερόλεπτα, επομένως τα δέντρα αποτελούν μια χρήσιμη πρώτη γραμμή βάσης.

Μειονεκτήματα

  • Υψηλή διακύμανση: Μια μικρή αλλαγή στα δεδομένα εκπαίδευσης μπορεί να παράγει ένα εντελώς διαφορετικό δέντρο.
  • Επιρρεπείς σε υπερβολική προσαρμογή: Ένα δέντρο χωρίς περιορισμούς αναπτύσσεται μέχρι κάθε φύλλο να είναι καθαρό, εκτός εάν το cp και το μέγιστο βάθος το περιορίζουν.
  • Μόνο παράλληλες διαιρέσεις άξονα: Τα διαγώνια όρια χρειάζονται πολλές τομές σε σχήμα σκάλας.

Η λύση για τις δύο πρώτες αδυναμίες είναι ο μέσος όρος πολλών δέντρων, κάτι που είναι και το τυχαίο δάσος κάνει.

Πώς να εκπαιδεύσετε και να οπτικοποιήσετε ένα δέντρο αποφάσεων στην R

Για να δημιουργήσετε το πρώτο σας δέντρο αποφάσεων σε R, θα ακολουθήσετε επτά βήματα:

  • Βήμα 1: Εισαγάγετε τα δεδομένα
  • Βήμα 2: Καθαρίστε το σύνολο δεδομένων
  • Βήμα 3: Δημιουργία συνόλου τρένου/δοκιμών
  • Βήμα 4: Κατασκευάστε το μοντέλο
  • Βήμα 5: Κάντε πρόβλεψη
  • Βήμα 6: Μετρήστε την απόδοση
  • Βήμα 7: Συντονίστε τις υπερπαραμέτρους

Βήμα 1) Εισαγάγετε τα δεδομένα

Αν είστε περίεργοι για την τύχη του Τιτανικού, μπορείτε να παρακολουθήσετε αυτό το βίντεο Youtube. Ο σκοπός αυτού του συνόλου δεδομένων είναι να προβλέψει ποιοι άνθρωποι είναι πιο πιθανό να επιβιώσουν μετά τη σύγκρουση με το παγόβουνο. Το σύνολο δεδομένων περιέχει 13 μεταβλητές και 1309 παρατηρήσεις. Το σύνολο δεδομένων ταξινομείται από τη μεταβλητή X.

set.seed(678)
path <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/titanic_data.csv'
titanic <-read.csv(path)
head(titanic)

Παραγωγή:

##   X pclass survived                                            name    sex
## 1 1      1        1                   Allen, Miss. Elisabeth Walton female
## 2 2      1        1                  Allison, Master. Hudson Trevor   male
## 3 3      1        0                    Allison, Miss. Helen Loraine female
## 4 4      1        0            Allison, Mr. Hudson Joshua Creighton   male
## 5 5      1        0 Allison, Mrs. Hudson J C (Bessie Waldo Daniels) female
## 6 6      1        1                             Anderson, Mr. Harry   male
##       age sibsp parch ticket     fare   cabin embarked
## 1 29.0000     0     0  24160 211.3375      B5        S
## 2  0.9167     1     2 113781 151.5500 C22 C26        S
## 3  2.0000     1     2 113781 151.5500 C22 C26        S
## 4 30.0000     1     2 113781 151.5500 C22 C26        S
## 5 25.0000     1     2 113781 151.5500 C22 C26        S
## 6 48.0000     0     0  19952  26.5500     E12        S
##                         home.dest
## 1                    St Louis, MO
## 2 Montreal, PQ / Chesterville, ON
## 3 Montreal, PQ / Chesterville, ON
## 4 Montreal, PQ / Chesterville, ON
## 5 Montreal, PQ / Chesterville, ON
## 6                    New York, NY
tail(titanic)

Παραγωγή:

##         X pclass survived                      name    sex  age sibsp
## 1304 1304      3        0     Yousseff, Mr. Gerious   male   NA     0
## 1305 1305      3        0      Zabour, Miss. Hileni female 14.5     1
## 1306 1306      3        0     Zabour, Miss. Thamine female   NA     1
## 1307 1307      3        0 Zakarian, Mr. Mapriededer   male 26.5     0
## 1308 1308      3        0       Zakarian, Mr. Ortin   male 27.0     0
## 1309 1309      3        0        Zimmerman, Mr. Leo   male 29.0     0
##      parch ticket    fare cabin embarked home.dest
## 1304     0   2627 14.4583              C          
## 1305     0   2665 14.4542              C          
## 1306     0   2665 14.4542              C          
## 1307     0   2656  7.2250              C          
## 1308     0   2670  7.2250              C          
## 1309     0 315082  7.8750              S

Από την έξοδο της κεφαλής και της ουράς, μπορείτε να παρατηρήσετε ότι τα δεδομένα δεν ανακατεύονται. Αυτό είναι μεγάλο θέμα! Όταν θα χωρίσετε τα δεδομένα σας μεταξύ ενός σετ τρένου και ενός σετ δοκιμής, θα επιλέξετε αποκλειστικά ο επιβάτης από την κατηγορία 1 και 2 (Κανένας επιβάτης από την κατηγορία 3 δεν βρίσκεται στο κορυφαίο 80 τοις εκατό των παρατηρήσεων), που σημαίνει ότι ο αλγόριθμος δεν θα δει ποτέ τα χαρακτηριστικά του επιβάτη της κατηγορίας 3. Αυτό το λάθος θα οδηγήσει σε κακή πρόβλεψη.

Για να ξεπεράσετε αυτό το ζήτημα, μπορείτε να χρησιμοποιήσετε τη συνάρτηση δείγμα ().

shuffle_index <- sample(1:nrow(titanic))
head(shuffle_index)

Δέντρο αποφάσεων Κωδικός R Επεξήγηση

  • sample(1:nrow(titanic)): Δημιουργήστε μια τυχαία λίστα ευρετηρίου από το 1 έως το 1309 (δηλ. τον μέγιστο αριθμό σειρών).

Παραγωγή:

## [1]  288  874 1078  633  887  992

Θα χρησιμοποιήσετε αυτό το ευρετήριο για να ανακατέψετε το τιτανικό σύνολο δεδομένων.

titanic <- titanic[shuffle_index, ]
head(titanic)

Παραγωγή:

##         X pclass survived
## 288   288      1        0
## 874   874      3        0
## 1078 1078      3        1
## 633   633      3        0
## 887   887      3        1
## 992   992      3        1
##                                                           name    sex age
## 288                                      Sutton, Mr. Frederick   male  61
## 874                   Humblen, Mr. Adolf Mathias Nicolai Olsen   male  42
## 1078                                 O'Driscoll, Miss. Bridget female  NA
## 633  Andersson, Mrs. Anders Johan (Alfrida Konstantia Brogren) female  39
## 887                                        Jermyn, Miss. Annie female  NA
## 992                                           Mamee, Mr. Hanna   male  NA
##      sibsp parch ticket    fare cabin embarked           home.dest## 288      0     0  36963 32.3208   D50        S     Haddenfield, NJ
## 874      0     0 348121  7.6500 F G63        S                    
## 1078     0     0  14311  7.7500              Q                    
## 633      1     5 347082 31.2750              S Sweden Winnipeg, MN
## 887      0     0  14313  7.7500              Q                    
## 992      0     0   2677  7.2292              C	

Βήμα 2) Καθαρίστε το σύνολο δεδομένων

Αρκετές μεταβλητές περιέχουν τιμές NA. Ο καθαρισμός εκτελείται σε τρία μέρη:

  • Αφήστε τις μεταβλητές home.dest, cabin, name, X και ticket
  • Δημιουργία μεταβλητών παραγόντων για pclass και surved
  • Ρίξτε το ΝΑ
library(dplyr)
# Drop variables
clean_titanic <- titanic %>%
select(-c(home.dest, cabin, name, X, ticket)) %>% 
#Convert to factor level
	mutate(pclass = factor(pclass, levels = c(1, 2, 3), labels = c('Upper', 'Middle', 'Lower')),
	survived = factor(survived, levels = c(0, 1), labels = c('No', 'Yes'))) %>%
na.omit()
glimpse(clean_titanic)

Code εξήγηση

  • Select(-c(home.dest, καμπίνα, όνομα, X, εισιτήριο)): Απόθεση περιττών μεταβλητών
  • pclass = factor(pclass, levels = c(1,2,3), labels= c('Upper', 'Middle', 'Lower')): Προσθήκη ετικέτας στη μεταβλητή pclass. Το 1 γίνεται Upper, το 2 γίνεται Middle και το 3 γίνεται Lower
  • factor(survived, levels = c(0,1), labels = c('Όχι', 'Ναι')): Προσθέστε ετικέτες στη μεταβλητή που επέζησε. Το 0 γίνεται Όχι και το 1 γίνεται Ναι
  • na.omit(): Αφαιρέστε τις παρατηρήσεις NA

Παραγωγή:

## Observations: 1,045
## Variables: 8
## $ pclass   <fctr> Upper, Lower, Lower, Upper, Middle, Upper, Middle, U...
## $ survived <fctr> No, No, No, Yes, No, Yes, Yes, No, No, No, No, No, Y...
## $ sex      <fctr> male, male, female, female, male, male, female, male...
## $ age      <dbl> 61.0, 42.0, 39.0, 49.0, 29.0, 37.0, 20.0, 54.0, 2.0, ...
## $ sibsp    <int> 0, 0, 1, 0, 0, 1, 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 1, 1,...
## $ parch    <int> 0, 0, 5, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 2, 0, 4, 0,...
## $ fare     <dbl> 32.3208, 7.6500, 31.2750, 25.9292, 10.5000, 52.5542, ...
## $ embarked <fctr> S, S, S, S, S, S, S, S, S, C, S, S, S, Q, C, S, S, C...		

Βήμα 3) Δημιουργήστε σετ τρένου/δοκιμών

Πριν εκπαιδεύσετε το μοντέλο σας, πρέπει να εκτελέσετε δύο βήματα:

  • Δημιουργία συνόλου αμαξοστοιχίας και δοκιμής: Εκπαιδεύετε το μοντέλο στο σετ αμαξοστοιχίας και δοκιμάζετε την πρόβλεψη στο σετ δοκιμής (δηλαδή μη ορατά δεδομένα)
  • Εγκαταστήστε το rpart.plot από την κονσόλα

Η κοινή πρακτική είναι ο διαχωρισμός των δεδομένων 80/20, το 80 τοις εκατό των δεδομένων χρησιμεύει για την εκπαίδευση του μοντέλου και το 20 τοις εκατό για την πραγματοποίηση προβλέψεων. Πρέπει να δημιουργήσετε δύο ξεχωριστά πλαίσια δεδομένων. Δεν θέλετε να αγγίξετε το σετ δοκιμής μέχρι να ολοκληρώσετε την κατασκευή του μοντέλου σας. Μπορείτε να δημιουργήσετε ένα όνομα συνάρτησης create_train_test() που παίρνει τρία ορίσματα.

create_train_test(df, size = 0.8, train = TRUE)
arguments:
-df: Dataset used to train the model.
-size: Size of the split. By default, 0.8. Numerical value
-train: If set to `TRUE`, the function creates the train set, otherwise the test set. Default value sets to `TRUE`. Boolean value.You need to add a Boolean parameter because R does not allow to return two data frames simultaneously.
create_train_test <- function(data, size = 0.8, train = TRUE) {
    n_row = nrow(data)
    total_row = size * n_row
    train_sample <- 1: total_row
    if (train == TRUE) {
        return (data[train_sample, ])
    } else {
        return (data[-train_sample, ])
    }
}

Code εξήγηση

  • function(data, size=0.8, train = TRUE): Προσθέστε τα ορίσματα στη συνάρτηση
  • n_row = nrow(data): Μετρήστε τον αριθμό των σειρών στο σύνολο δεδομένων
  • total_row = size*n_row: Επιστρέψτε την nη σειρά για να δημιουργήσετε το σύνολο τρένου
  • train_sample <- 1:total_row: Επιλέξτε την πρώτη σειρά στις ντες σειρές
  • if (train ==TRUE){ } else { }: Εάν η συνθήκη οριστεί σε true, επιστρέψτε το σύνολο αμαξοστοιχίας, διαφορετικά το σύνολο δοκιμής.

Μπορείτε να δοκιμάσετε τη λειτουργία σας και να ελέγξετε τη διάσταση.

data_train <- create_train_test(clean_titanic, 0.8, train = TRUE)
data_test <- create_train_test(clean_titanic, 0.8, train = FALSE)
dim(data_train)

Παραγωγή:

## [1] 836   8
dim(data_test)

Παραγωγή:

## [1] 209   8

Το σύνολο δεδομένων τρένου έχει 836 γραμμές και 8 στήλες, ενώ το σύνολο δεδομένων δοκιμής έχει 209 γραμμές και τις ίδιες 8 στήλες.

Χρησιμοποιείτε τη συνάρτηση prop.table() σε συνδυασμό με την table() για να επαληθεύσετε εάν η διαδικασία τυχαιοποίησης είναι σωστή.

prop.table(table(data_train$survived))

Παραγωγή:

##
##        No       Yes 
## 0.5944976 0.4055024
prop.table(table(data_test$survived))

Παραγωγή:

## 
##        No       Yes 
## 0.5789474 0.4210526

Και στα δύο δεδομένα, ο αριθμός των επιζώντων είναι ο ίδιος, περίπου 40 τοις εκατό.

Εγκαταστήστε το rpart.plot

Το rpart.plot δεν είναι διαθέσιμο από τις βιβλιοθήκες conda. Μπορείτε να το εγκαταστήσετε από την κονσόλα:

install.packages("rpart.plot")

Βήμα 4) Κατασκευάστε το μοντέλο

Είστε έτοιμοι να κατασκευάσετε το μοντέλο. Η σύνταξη για τη συνάρτηση δέντρου αποφάσεων rpart() είναι:

rpart(formula, data=, method='')
arguments:			
- formula: The function to predict
- data: Specifies the data frame
- method:			
- "class" for a classification tree 			
- "anova" for a regression tree	

Χρησιμοποιείτε τη μέθοδο κλάσης επειδή προβλέπετε μια τάξη.

library(rpart)
library(rpart.plot)
fit <- rpart(survived~., data = data_train, method = 'class')
rpart.plot(fit, extra = 106)

Code εξήγηση

  • rpart(): Λειτουργία που ταιριάζει στο μοντέλο. Τα επιχειρήματα είναι:
    • επέζησε ~.: Formula of the Decision Trees
    • data = data_train: Σύνολο δεδομένων
    • μέθοδος = 'class': Προσαρμόστε ένα δυαδικό μοντέλο
  • rpart.plot(fit, extra= 106): Σχεδιάστε το δέντρο. Το όρισμα extra έχει οριστεί σε 106, το οποίο εμφανίζει την πιθανότητα της δεύτερης κλάσης συν το ποσοστό των παρατηρήσεων σε κάθε κόμβο. Μπορείτε να ανατρέξετε στο βινιέτα για περισσότερες πληροφορίες σχετικά με τις άλλες επιλογές.

Παραγωγή:

 Δημιουργήστε ένα μοντέλο δέντρων απόφασης στο R

Ξεκινάτε από τον κόμβο ρίζας, στην κορυφή του γραφήματος και σε βάθος 0 από 3:

  1. Στην κορυφή, είναι η συνολική πιθανότητα επιβίωσης. Δείχνει το ποσοστό των επιβατών που επέζησαν από τη συντριβή. Το 41 τοις εκατό των επιβατών επέζησε.
  2. Αυτός ο κόμβος ρωτάει αν το φύλο του επιβάτη είναι άνδρας. Εάν ναι, τότε κατεβαίνετε στο αριστερό παιδί της ρίζας (βάθος 1). Το 63% είναι άνδρες με πιθανότητα επιβίωσης 21%.
  3. Στον δεύτερο κόμβο, ρωτάτε αν ο άνδρας επιβάτης είναι άνω των 3.5 ετών. Εάν ναι, τότε η πιθανότητα επιβίωσης είναι 19 τοις εκατό.
  4. Συνεχίζετε έτσι για να καταλάβετε ποια χαρακτηριστικά επηρεάζουν την πιθανότητα επιβίωσης.

Σημειώστε ότι, μία από τις πολλές ιδιότητες των Decision Trees είναι ότι απαιτούν πολύ λίγη προετοιμασία δεδομένων. Συγκεκριμένα, δεν απαιτούν κλιμάκωση ή κεντράρισμα χαρακτηριστικών.

Από προεπιλογή, η συνάρτηση rpart() χρησιμοποιεί το Gini μέτρο προσμίξεων για την επιλογή κάθε διαχωρισμού. Όσο υψηλότερη είναι η τιμή Gini, τόσο πιο αναμεμειγμένες είναι οι κλάσεις μέσα σε αυτόν τον κόμβο, επομένως ο αλγόριθμος επιλέγει πάντα τη διαχωριστική γραμμή που τη μειώνει περισσότερο.

Βήμα 5) Κάντε μια πρόβλεψη

Μπορείτε να προβλέψετε το σύνολο δεδομένων δοκιμής σας. Για να κάνετε μια πρόβλεψη, μπορείτε να χρησιμοποιήσετε τη συνάρτηση predict(). Η βασική σύνταξη της πρόβλεψης για το δέντρο απόφασης R είναι:

predict(fitted_model, df, type = 'class')
arguments:
- fitted_model: This is the object stored after model estimation. 
- df: Data frame used to make the prediction
- type: Type of prediction			
    - 'class': for classification			
    - 'prob': to compute the probability of each class			
    - 'vector': Predict the mean response at the node level	

Τώρα προβλέπετε, για καθέναν από τους 209 επιβάτες στο σετ δοκιμών, εάν το μοντέλο αναμένει ότι θα επιβιώσουν από τη σύγκρουση.

predict_unseen <-predict(fit, data_test, type = 'class')

Code εξήγηση

  • predict(fit, data_test, type = 'class'): Προβλέψτε την κλάση (0/1) του συνόλου δοκιμής

Τώρα συγκρίνετε τις προβλεπόμενες τάξεις με τα πραγματικά αποτελέσματα.

table_mat <- table(data_test$survived, predict_unseen)
table_mat

Code εξήγηση

  • table(data_test$survived, predict_unseen): Δημιουργήστε έναν πίνακα συνάφειας των προβλεπόμενων κλάσεων σε σχέση με το πραγματικό αποτέλεσμα

Παραγωγή:

##      predict_unseen
##        No Yes
##   No  106  15
##   Yes  30  58

Οι γραμμές είναι πραγματικές τιμές, οι στήλες είναι προβλέψεις. Το μοντέλο αναγνώρισε σωστά 106 μη επιζώντες και 58 επιζώντες, αλλά χαρακτήρισε 15 μη επιζώντες ως επιζώντες και 30 επιζώντες ως νεκρούς.

Βήμα 6) Μετρήστε την απόδοση

Μπορείτε να υπολογίσετε ένα μέτρο ακρίβειας για την εργασία ταξινόμησης με το μήτρα σύγχυσης:

The μήτρα σύγχυσης είναι μια καλύτερη επιλογή για την αξιολόγηση της απόδοσης της ταξινόμησης. Η γενική ιδέα είναι να μετράμε πόσες φορές τα True instances ταξινομούνται ως False.

Μετρήστε την απόδοση των δέντρων απόφασης στο R

Κάθε γραμμή σε έναν πίνακα σύγχυσης αντιπροσωπεύει έναν πραγματικό στόχο, ενώ κάθε στήλη αντιπροσωπεύει έναν προβλεπόμενο στόχο. Η πρώτη γραμμή αυτού του πίνακα λαμβάνει υπόψη τους επιβάτες που πέθαναν (την αρνητική κατηγορία): 106 ταξινομήθηκαν σωστά ως νεκροί (Αληθινό αρνητικό), ενώ 15 ταξινομήθηκαν λανθασμένα ως επιζώντες (Λάθος θετική). Η δεύτερη σειρά περιλαμβάνει τους επιζώντες: 58 ταυτοποιήθηκαν σωστά (Αληθινό θετικό), ενώ 30 χάθηκαν (Εσφαλμένο αρνητικό).

Μπορείτε να υπολογίσετε το τεστ ακρίβειας από τον πίνακα σύγχυσης:

Μετρήστε την απόδοση των δέντρων απόφασης στο R

Είναι η αναλογία του αληθινού θετικού και του αληθινού αρνητικού επί του αθροίσματος του πίνακα. Με το R, μπορείτε να κωδικοποιήσετε ως εξής:

accuracy_Test <- sum(diag(table_mat)) / sum(table_mat)

Code εξήγηση

  • sum(diag(table_mat)): Άθροισμα της διαγωνίου
  • sum(table_mat): Άθροισμα του πίνακα.

Μπορείτε να εκτυπώσετε την ακρίβεια του σετ δοκιμής:

print(paste('Accuracy for test', accuracy_Test))

Παραγωγή:

## [1] "Accuracy for test 0.784688995215311"

Η ακρίβεια στο σύνολο δοκιμών είναι 0.7847, δηλαδή 78.47 τοις εκατό. Επαναλάβετε την άσκηση στο σύνολο εκπαίδευσης για να δείτε πόσο υπερπροσαρμόζεται το μοντέλο.

Βήμα 7) Συντονίστε τις υπερ-παραμέτρους

Το δέντρο απόφασης στο R έχει διάφορες παραμέτρους που ελέγχουν πτυχές της προσαρμογής. Στη βιβλιοθήκη δένδρων αποφάσεων rpart, μπορείτε να ελέγξετε τις παραμέτρους χρησιμοποιώντας τη συνάρτηση rpart.control(). Στον παρακάτω κώδικα εισάγετε τις παραμέτρους που θα συντονίσετε. Μπορείτε να ανατρέξετε στο βινιέτα για άλλες παραμέτρους.

rpart.control(minsplit = 20, minbucket = round(minsplit/3), maxdepth = 30)
Arguments:
-minsplit: Set the minimum number of observations in the node before the algorithm perform a split
-minbucket: Set the minimum number of observations in a terminal node, i.e. the leaf
-maxdepth: Set the maximum depth of any node of the final tree. The root node is treated as depth 0

Θα προχωρήσουμε ως εξής:

  • Κατασκευάστε συνάρτηση για απόδοση ακρίβειας
  • Συντονίστε το μέγιστο βάθος
  • Συντονίστε τον ελάχιστο αριθμό δειγμάτων που πρέπει να έχει ένας κόμβος για να μπορέσει να διαχωριστεί
  • Συντονίστε τον ελάχιστο αριθμό δείγματος που πρέπει να έχει ένας κόμβος φύλλου

Μπορείτε να γράψετε μια συνάρτηση για την εμφάνιση της ακρίβειας. Απλώς αναδιπλώνετε τον κώδικα που χρησιμοποιούσατε πριν:

  1. predict: predict_unseen <- predict(fit, data_test, type = 'class')
  2. Παραγωγή πίνακα: table_mat <- table(data_test$survived, predict_unseen)
  3. Υπολογισμός ακρίβειας: accuracy_Test <- sum(diag(table_mat))/sum(table_mat)
accuracy_tune <- function(fit) {
    predict_unseen <- predict(fit, data_test, type = 'class')
    table_mat <- table(data_test$survived, predict_unseen)
    accuracy_Test <- sum(diag(table_mat)) / sum(table_mat)
    accuracy_Test
}

Τώρα ρυθμίστε τις παραμέτρους και δείτε αν μπορείτε να βελτιώσετε το προεπιλεγμένο μοντέλο. Υπενθυμίζεται ότι πρέπει να ξεπεράσετε την ακρίβεια του 0.7847.

control <- rpart.control(minsplit = 4,
    minbucket = round(5 / 3),
    maxdepth = 3,
    cp = 0)
tune_fit <- rpart(survived~., data = data_train, method = 'class', control = control)
accuracy_tune(tune_fit)

Παραγωγή:

## [1] 0.7990431

Με την ακόλουθη παράμετρο:

minsplit = 4
minbucket = round(5/3)
maxdepth = 3
cp = 0

Η ακρίβεια αυξάνεται από 0.7847 σε 0.7990, επομένως το συντονισμένο δέντρο ξεπερνά την προεπιλεγμένη διαμόρφωση κατά περίπου 1.4 ποσοστιαίες μονάδες.

Δέντρα Αποφάσεων στην R: Γρήγορη Αναφορά Συναρτήσεων

Ο παρακάτω πίνακας παραθέτει κάθε συνάρτηση που χρησιμοποιείται στα επτά παραπάνω βήματα, μαζί με το πακέτο που την παρέχει και τις παραμέτρους που αναμένει. R.

Βιβλιοθήκη Σκοπός Λειτουργία Τάξη Παράμετροι Λεπτομέρειες
το μέρος Δέντρο ταξινόμησης τρένων στο R rpart() τάξη τύπος, df, μέθοδος
το μέρος Δέντρο παλινδρόμησης τρένου rpart() anova τύπος, df, μέθοδος
το μέρος Οικόπεδο τα δέντρα rpart.plot() προσαρμοσμένο μοντέλο
βάση προβλέψει προλέγω() τάξη τοποθετημένο μοντέλο, τύπος
βάση προβλέψει προλέγω() prob τοποθετημένο μοντέλο, τύπος
βάση προβλέψει προλέγω() διάνυσμα τοποθετημένο μοντέλο, τύπος
το μέρος Παράμετροι ελέγχου rpart.control() minsplit Ορίστε τον ελάχιστο αριθμό παρατηρήσεων στον κόμβο πριν ο αλγόριθμος εκτελέσει μια διαίρεση
Minbucket Ορίστε τον ελάχιστο αριθμό παρατηρήσεων σε έναν τερματικό κόμβο, δηλαδή το φύλλο
μέγιστο βάθος Ορίστε το μέγιστο βάθος οποιουδήποτε κόμβου του τελικού δέντρου. Ο κόμβος ρίζας αντιμετωπίζεται ως βάθος 0.
το μέρος Μοντέλο αμαξοστοιχίας με παράμετρο ελέγχου rpart() τύπος, df, μέθοδος, έλεγχος

Σημείωση : Εκπαιδεύστε το μοντέλο σε δεδομένα εκπαίδευσης και δοκιμάστε την απόδοση σε ένα μη εμφανές σύνολο δεδομένων, δηλαδή σετ δοκιμής.

Συχνές Ερωτήσεις

Τόσο τα δέντρα ταξινόμησης όσο και τα δέντρα παλινδρόμησης ταιριάζουν. Η rpart() υλοποιεί το CART με ενσωματωμένο κλάδεμα διασταυρούμενης επικύρωσης μέσω του cp και συνδυάζεται με το rpart.plot για σαφή διαγράμματα, γεγονός που την καθιστά την πιο κοινή επιλογή.

Η συνάρτηση cp ορίζει την ελάχιστη βελτίωση που πρέπει να προσφέρει ένα split για να διατηρηθεί. Οι μεγαλύτερες τιμές κλαδεύουν επιθετικά και παράγουν μικρότερα δέντρα. Χρησιμοποιήστε τις συναρτήσεις printcp() και plotcp() για να βρείτε την τιμή με το χαμηλότερο σφάλμα διασταυρούμενης επικύρωσης.

Ναι. Η rpart() χρησιμοποιεί υποκατάστατα διαχωρισμούς για να δρομολογήσει παρατηρήσεις με ελλείποντες προγνωστικούς παράγοντες προς τα κάτω στον πιο παρόμοιο κλάδο. Αυτό το σεμινάριο καλεί αντ' αυτού το na.omit(), καθαρά για να διατηρήσει το παράδειγμα συνόλου δεδομένων απλό.

Τα δέντρα αποφάσεων τροφοδοτούν την επεξηγήσιμη Τεχνητή Νοημοσύνη στην πίστωση, τις ασφάλειες και την υγειονομική περίθαλψη, όπου μια ρυθμιστική αρχή μπορεί να απαιτήσει την ακριβή αιτιολόγηση πίσω από μια απόφαση. Αποτελούν επίσης τους βασικούς μαθητευόμενους μέσα σε μοντέλα ενίσχυσης κλίσης και τυχαίων δασών.

Ναι. Οι βοηθοί τεχνητής νοημοσύνης μπορούν να μεταφράσουν διαχωρισμένους κανόνες σε απλή γλώσσα, να προτείνουν τιμές cp για δοκιμή και να επισημάνουν υπερπροσαρμογή στην έξοδο printcp(). Επαληθεύστε κάθε πρόταση με τα δικά σας διασταυρωμένα επικυρωμένα αποτελέσματα πριν ενεργήσετε βάσει αυτής.

Συνοψίστε αυτήν την ανάρτηση με: