Analiza dużych zbiorów danych - drzewa decyzyjne

Drzewo decyzyjne to algorytm używany do nadzorowanych problemów uczenia się, takich jak klasyfikacja lub regresja. Drzewo decyzyjne lub drzewo klasyfikacyjne to drzewo, w którym każdy węzeł wewnętrzny (bez liści) jest oznaczony cechą wejściową. Łuki wychodzące z węzła oznaczonego elementem są oznaczone każdą z możliwych wartości elementu. Każdy liść drzewa jest oznaczony klasą lub rozkładem prawdopodobieństwa w klasach.

Drzewa można się „nauczyć”, dzieląc zbiór źródłowy na podzbiory na podstawie testu wartości atrybutu. Ten proces jest powtarzany dla każdego pochodnego podzbioru w sposób rekurencyjny o nazwierecursive partitioning. Rekurencja jest zakończona, gdy podzbiór w węźle ma taką samą wartość zmiennej docelowej lub gdy dzielenie nie dodaje już wartości do prognoz. Ten proces odgórnej indukcji drzew decyzyjnych jest przykładem zachłannego algorytmu i jest to najpowszechniejsza strategia uczenia się drzew decyzyjnych.

Drzewa decyzyjne używane w eksploracji danych są dwojakiego rodzaju -

  • Classification tree - gdy odpowiedź jest zmienną nominalną, na przykład czy wiadomość e-mail jest spamem, czy nie.

  • Regression tree - kiedy przewidywany wynik można uznać za liczbę rzeczywistą (np. Wynagrodzenie pracownika).

Drzewa decyzyjne są prostą metodą i jako takie mają pewne problemy. Jedną z tych kwestii jest duża zmienność w wynikowych modelach tworzonych przez drzewa decyzyjne. Aby złagodzić ten problem, opracowano zespolone metody drzew decyzyjnych. Istnieją dwie grupy metod zespołowych, które są obecnie szeroko stosowane -

  • Bagging decision trees- Drzewa te są używane do budowania wielu drzew decyzyjnych poprzez wielokrotne próbkowanie danych szkoleniowych z wymianą i głosowanie drzew na prognozę konsensusu. Algorytm ten nazwano losowym lasem.

  • Boosting decision trees- Zwiększanie gradientu łączy słabych uczniów; w tym przypadku drzewa decyzyjne przekształcają się w jednego silnego ucznia, w sposób iteracyjny. Dopasowuje słabe drzewo do danych i iteracyjnie dopasowuje słabych uczniów, aby poprawić błąd poprzedniego modelu.

# Install the party package
# install.packages('party') 
library(party) 
library(ggplot2)  

head(diamonds) 
# We will predict the cut of diamonds using the features available in the 
diamonds dataset. 
ct = ctree(cut ~ ., data = diamonds) 

# plot(ct, main="Conditional Inference Tree") 
# Example output 
# Response:  cut  
# Inputs:  carat, color, clarity, depth, table, price, x, y, z  

# Number of observations:  53940  
#  
# 1) table <= 57; criterion = 1, statistic = 10131.878 
#   2) depth <= 63; criterion = 1, statistic = 8377.279 
#     3) table <= 56.4; criterion = 1, statistic = 226.423 
#       4) z <= 2.64; criterion = 1, statistic = 70.393 
#         5) clarity <= VS1; criterion = 0.989, statistic = 10.48 
#           6) color <= E; criterion = 0.997, statistic = 12.829 
#             7)*  weights = 82  
#           6) color > E  

#Table of prediction errors 
table(predict(ct), diamonds$cut) 
#            Fair  Good Very Good Premium Ideal 
# Fair       1388   171        17       0    14 
# Good        102  2912       499      26    27 
# Very Good    54   998      3334     249   355 
# Premium      44   711      5054   11915  1167 
# Ideal        22   114      3178    1601 19988 
# Estimated class probabilities 
probs = predict(ct, newdata = diamonds, type = "prob") 
probs = do.call(rbind, probs) 
head(probs)