2011-09-16

Interaktionen in Entscheidungsbäumen II

Im letzten Eintrag hatte ich schon mit relativ kleinen Beispielen gezeigt, dass die Berücksichtigung von Interaktionen in Entscheidungsbäume zweierlei Nutzen haben kann:

1. Der Baum wird kleiner und somit einfacher zu interpretieren.
2. Der Baum wird genauer und eignet sich somit auch besser für Prognosen.
(Natürlich gilt das nur, wenn die Interaktion relevant für die Erklärung der Zielgröße ist.)

An dieser Stelle möchte ich das noch an einem kurzem aber etwas komplexeren Beispiel verdeutlichen.


In dieser 3-dimensionalen Situation sind die zugrunde liegenden Interaktionen, die die Zielgröße (Cyan/Blau) beeinflussen, zu komplex um sie in einer geometrischen Form zu beschreiben. Ein einfacher Entscheidungsbaum versucht die Farbe der Punkte auf folgende Weise zu erklären:
Ohne ein Pruning durchgeführt zu haben ergibt sich ein Baum mit 12 Blättern und einer Missklassifikationsrate von 10%.

Im Vergleich dazu der Baum, der die Interaktion berücksichtigt:
Dieser Baum benutzt nur 3 Blätter um die (nicht verrauschten) Daten perfekt zu erklären.

Natürlich ist es nicht sonderlich verwunderlich, dass der Baum der die volle Information über das zugrundeliegende Problem hat besser ist als einer dem entscheidende Information fehlt. Interessant ist aber, dass die Berücksichtigung von Interaktionen in der Praxis bis dato keine Rolle spielt. Tatsächlich unterstützt weder R noch JMP die Verwendung von Interaktionen in Entscheidungsbäumen von sich aus. In beiden Fällen müssen die Wechselwirkungen zunächst händisch erzeugt werden bevor sie als Einflussgrößen angegeben werden können.

Anhang:

# Entscheidungsbäume und Interaktionen II
# Sebastian Hoffmeister - Statcon
library(tree)
x1 = rnorm(100, 0, 1)
x2 = rnorm(100, 0, 1)
x3 = rnorm(100, 0, 1)
interaction = x1*0.5*x2*3*x3 # Die wahre Interaktion
y =  rep(0, 100)
for(i in 1:100) { # Erzeugen der Zielgröße
    if(abs(interaction[i])<0.5) y[i] = 1
}

simple.tree = tree(as.factor(y) ~ x1 + x2 + x3) # Ein einfacher Baum
summary(simple.tree)
plot(simple.tree)
text(simple.tree)

int = x1*x2*x3 # Man kennt natürlich nicht die einzelnen Koeffizienten in der Interaktion
interaction.tree = tree(as.factor(y) ~ x1 +x2 + x3 + int)
summary(interaction.tree)
plot(interaction.tree)
text(interaction.tree)

Keine Kommentare:

Kommentar veröffentlichen