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)